· 4 years ago · Aug 24, 2021, 03:04 PM
1describe Api::V1::ContactDocumentCollectionsController, type: :controller do
2 let!(:user) { create(:org_user) }
3 let!(:realm) { create(:org_realm) }
4 let!(:super_firm) { create(:org_firm, realm: realm) }
5 let!(:super_workgroup) { create(:org_workgroup, super_group: true, realm: realm, firm: super_firm) }
6 let!(:classic_user) { create(:org_classic_user, user: user, realm: super_workgroup.realm, document_status_level_code: '40') }
7 let!(:super_program) { create(:org_program, workgroup: super_workgroup) }
8 let!(:super_branch) { create(:org_branch, program: super_program) }
9 let(:rep) { create(:org_rep, realm: super_workgroup.realm, owner: classic_user, classic_user: classic_user, branch: super_branch) }
10 let!(:rep_code) { create(:org_rep_code, rep: rep) }
11 let!(:rep_code_map_1) { create(:org_rep_code_mapping, rep_code: rep_code, workgroup_id: super_workgroup.id ) }
12 let!(:role) { create :org_role, name: 'Tester' }
13 let!(:user_roles) { create(:org_user_role, user: user, role: role) }
14 let!(:current_user_session) { create(:user_session, :complete, :active, owner: user) }
15 let!(:contact) { create(:contacts_contact, realm: realm, owner: classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
16 let!(:contact_1) { create(:contacts_contact, realm: realm, owner: classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
17 let!(:move_from_contact) { create(:contacts_contact, realm: realm, owner: classic_user) }
18 let!(:move_to_contact) { create(:contacts_contact, realm: realm, owner: classic_user) }
19 let!(:afc) { create(:accounts_account_forms_collection, classic_urn: "AccountFormsCollection:#{contact.external_id}", contact_id: contact.id, realm: contact.realm) }
20 let!(:account) { create(:accounts_account, account_forms_collection: afc, rep: rep_code.code) }
21 let!(:cust_account) { create(:custodial_account, number: account.account_number) }
22 let(:service) { create(:internal_service, name: 'Acting Service') }
23 let!(:contact_document_type) { create(:contact_document_type, realm: realm, description: "Some Value 1", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
24 let!(:check_document_type) { create(:contact_document_type, realm: realm, description: "Check Copy") }
25 let!(:check_fundvision_document_type) { create(:contact_document_type, realm: realm, description: "Check Copy - fundVISION") }
26 let!(:check_document1) { create(:contact_document_collection, contact: contact_1, document_type: check_document_type, scan_date: Date.today, account_numbers: [[account.account_number, account.account_type_description]], realm: contact.realm, check_comments: "Check Blotter 1", status_date: Date.today, service: service) }
27 let!(:check_document2) { create(:contact_document_collection, contact: contact_1, document_type: check_document_type, scan_date: Date.today, account_numbers: [[account.account_number, account.account_type_description]], realm: contact.realm, check_comments: "Check Blotter 2", status_date: Date.today, service: service) }
28 let!(:check_fundvision_document) { create(:contact_document_collection, contact: contact_1, document_type: check_document_type, scan_date: Date.today, account_numbers: [[account.account_number, account.account_type_description]], realm: contact.realm, comments: "Check Fundvision", status_date: Date.today, service: service) }
29 let!(:cdc_top_rail_only) { create(:contact_document_collection, contact: contact, document_type_id: nil, scan_date: Date.today, account_numbers: [[account.account_number, account.account_type_description]], realm: contact.realm, comments: "Top Rail Only", status_date: Date.today, service: service) }
30 let!(:cdc_grid_only) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type, kind: contact_document_type.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
31 let!(:cdc_top_rail_grid_back_to_rep_both) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type, kind: contact_document_type.classic_id, scan_date: Date.yesterday, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "55", realm: contact.realm, comments: "Top Rail and Grid Both", status_date: Date.yesterday) }
32 let!(:cdc_top_rail_grid_to_rep_for_processing_both) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type, kind: contact_document_type.classic_id, scan_date: Date.yesterday, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "4", realm: contact.realm, comments: "Top Rail and Grid Both", status_date: Date.yesterday) }
33 let(:document) { create(:contact_document, content: 'hello world', contact: contact) }
34 let!(:cdc_move_contact) { create(:contact_document_collection, contact: move_from_contact, document_type_id: 75, scan_date: Date.tomorrow, document_next_step_code: "10", realm: move_from_contact.realm, comments: "Grid Only", status_date: Date.tomorrow) }
35 let!(:cdc_unassigned_scanned) { create(:contact_document_collection, scan_date: Date.tomorrow, realm: realm) }
36 let!(:cdc_move_contact_with_scanner) { create(:contact_document_collection, contact: move_from_contact, document_type_id: 75, scan_date: Date.tomorrow, document_next_step_code: "10", realm: move_from_contact.realm, comments: "Grid Only", status_date: Date.tomorrow, scanner: create(:scanner, user_id: user.id)) }
37 let!(:permission) { create :org_permission, name: 'admin_check_blotter' }
38 let!(:role) { create :org_role, name: 'Super User' }
39 let!(:role_permission) { create :org_role_permission, role: role, permission: permission }
40 let(:checks_pershing) { create :custodial_check_deposit, rep_code: rep_code.code, account: cust_account }
41 let(:checks_pershing_detail) { create(:check_deposit_detail, check_deposit_id: checks_pershing.id) }
42 let!(:user_roles) { create(:org_user_role, user: user, role: role) }
43
44 before_all do
45 Faker::UniqueGenerator.clear
46 DatabaseCleaner.start
47 create(:lookup_table, category: "document_next_step_code", key: "55", value: "Back to Rep")
48 create(:lookup_table, category: "document_next_step_code", key: "10", value: "To Transfers for Processing")
49 create(:lookup_table, category: "document_problem_code", key: "8", value: "Social Security Number Missing")
50 create(:lookup_table, category: "document_problem_code", key: "11", value: "Employer Information Missing")
51 create(:lookup_table, category: "document_problem_code", key: "10", value: "Initial Transaction Missing")
52 create(:lookup_table, category: "document_status_level_code", key: "10", value: "Preview - Accepted")
53 end
54
55 describe "#checks" do
56 context "when user is not logged in" do
57 before { post :checks_blotter, format: 'json' }
58 it_behaves_like "an unauthorized api request"
59 end
60
61 context "when user is not logged in" do
62 let!(:user_without_permission) { create(:org_user) }
63 let!(:current_user_session) { create(:user_session, :complete, :active, owner: user_without_permission) }
64
65 before { post :checks_blotter, session: { user_session_id: current_user_session.id }}
66
67 it 'returns a permission denied message' do
68 expect(json['message']).to match(/Permission denied/)
69 end
70 end
71
72 context 'check blotter index' do
73 before do
74 checks_pershing.touch
75 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
76 end
77
78 it 'returns checks from both contact_document_collection and custodial_deposit_checks tables' do
79 expect(json['records'].count).to eq(4)
80 expect(json['records'].any? { |check| check['check_origin'] == 'UNIO' }).to eq(true)
81 expect(json['records'].any? { |check| check['check_origin'] == 'Pershing' }).to eq(true)
82 end
83 end
84
85 context 'check blotter export' do
86 render_views
87 let(:mime_type) { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }
88 let(:exported_columns) { ["client_name","account_numbers","check_amount", "deposit_amount", "uploaded_date","received_date","forwarded_date","comments","follow_up","approve", "check_origin"] }
89
90 before :each do
91 check_document1.check_amount_in_cents = 66600
92 check_document1.save!
93 checks_pershing.touch
94 post :checks_blotter, format: 'xlsx', session: { user_session_id: current_user_session.id }, params: { exported_columns: exported_columns }
95 end
96
97 # it_behaves_like "a successful api request"
98
99 it 'returns an xlsx file' do
100 expect(response.headers['Content-Type']).to include(mime_type)
101 expect(response.headers['Content-Disposition']).to include('attachment')
102 expect(response.headers['Content-Disposition']).to include("checks_blotter_#{Time.zone.now.strftime('%Y/%m/%d')}.xlsx")
103 end
104
105 it 'data inside xlsx file' do
106 File.write("tmp/check_blotter.xlsx", response.body)
107 worksheet = Roo::Spreadsheet.open('tmp/check_blotter.xlsx')
108 headers = worksheet.row(1).map {|x| x.downcase.gsub(' ', '_')}
109 check_pershing_idx = worksheet.to_a.index {|x| x.include?(checks_pershing.check_amount.to_i)} + 1
110 check_unio_idx = worksheet.to_a.index {|x| x.include?(check_document1.check_amount_in_cents.to_i / 100)} + 1
111 expect(::Contacts::CheckBlotterIndexVw.where(id: checks_pershing.id).first.check_amount.to_f / 100).to eq(worksheet.row(check_pershing_idx)[headers.find_index('check_amount')])
112 expect(::Contacts::CheckBlotterIndexVw.where(id: checks_pershing.id).first.deposit_amount.to_f / 100).to eq(worksheet.row(check_pershing_idx)[headers.find_index('deposit_amount')])
113 expect(checks_pershing.deposit_amount.to_f).to eq(worksheet.row(check_pershing_idx)[headers.find_index('deposit_amount')])
114 expect(checks_pershing.check_amount.to_f).to eq(worksheet.row(check_pershing_idx)[headers.find_index('check_amount')])
115 expect(check_document1.check_amount_in_cents.to_f / 100).to eq(worksheet.row(check_unio_idx)[headers.find_index('check_amount')])
116 end
117
118 end
119
120 context 'check blotter index when user have a super workgroup' do
121 let!(:super_user) { create(:org_user) }
122 let!(:other_user) { create(:org_user) }
123 let!(:realm_cfs) { create(:org_realm, :cfs_back_office) }
124 let!(:realm_next) { create(:org_realm, :next_front_office) }
125 let!(:realm_spf) { create(:org_realm, :spf_registration) }
126 let!(:realm_cg) { create(:org_realm, :cg_registration) }
127
128 let!(:super_firm) { create(:org_firm, realm: realm_cfs) }
129 let!(:normal_firm_1) { create(:org_firm, realm: realm_next) }
130 let!(:normal_firm_2) { create(:org_firm, realm: realm_spf) }
131 let!(:other_firm) { create(:org_firm, realm: realm_cg) }
132
133 let!(:super_workgroup) { create(:org_workgroup, super_group: true, realm: realm_cfs, firm: super_firm) }
134 let!(:normal_workgroup_1) { create(:org_workgroup, realm: realm_next, firm: normal_firm_1) }
135 let!(:normal_workgroup_2) { create(:org_workgroup, realm: realm_spf, firm: normal_firm_2) }
136 let!(:other_workgroup) { create(:org_workgroup, realm: realm_cg, firm: other_firm) }
137
138 let!(:super_classic_user) { create(:org_classic_user, realm: super_workgroup.realm, workgroup: super_workgroup) }
139 let!(:normal_classic_user_1) { create(:org_classic_user, realm: normal_workgroup_1.realm, workgroup: normal_workgroup_1) }
140 let!(:normal_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
141 let!(:other_classic_user_1) { create(:org_classic_user, realm: other_workgroup.realm, workgroup: other_workgroup) }
142 let!(:other_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
143
144 let!(:super_classic_user_ownership) { create(:org_classic_user_ownership, user: super_user, classic_user: super_classic_user) }
145 let!(:normal_classic_user_ownership_1) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_1) }
146 let!(:normal_classic_user_ownership_2) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_2) }
147 let!(:other_classic_user_ownership_1) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_1) }
148 let!(:other_classic_user_ownership_2) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_2) }
149
150 let!(:super_contact) { create(:contacts_contact, owner: super_classic_user) }
151 let!(:normal_contact_1) { create(:contacts_contact, owner: normal_classic_user_1) }
152 let!(:normal_contact_2) { create(:contacts_contact, owner: normal_classic_user_2) }
153 let!(:other_contact_1) { create(:contacts_contact, owner: other_classic_user_1) }
154 let!(:other_contact_2) { create(:contacts_contact, owner: other_classic_user_2) }
155
156 let!(:super_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: super_contact.id, realm: realm_cfs) }
157 let!(:normal_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: normal_contact_1.id, realm: realm_next) }
158 let!(:normal_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: normal_contact_2.id, realm: realm_spf) }
159 let!(:other_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: other_contact_1.id, realm: realm_cg) }
160 let!(:other_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: other_contact_2.id, realm: realm_spf) }
161
162 let!(:super_account) { create(:accounts_account, account_forms_collection: super_account_forms_collection) }
163 let!(:normal_account_1) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_1) }
164 let!(:normal_account_2) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_2) }
165 let!(:other_account_1) { create(:accounts_account, account_forms_collection: other_account_forms_collection_1) }
166 let!(:other_account_2) { create(:accounts_account, account_forms_collection: other_account_forms_collection_2) }
167
168 let!(:super_cust_account) { create(:custodial_account, number: super_account.account_number) }
169 let!(:normal_cust_account_1) { create(:custodial_account, number: normal_account_1.account_number) }
170 let!(:normal_cust_account_2) { create(:custodial_account, number: normal_account_2.account_number) }
171 let!(:other_cust_account_1) { create(:custodial_account, number: other_account_1.account_number) }
172 let!(:other_cust_account_2) { create(:custodial_account, number: other_account_2.account_number) }
173
174 let!(:super_program) { create(:org_program, workgroup: super_workgroup) }
175 let!(:normal_program_1) { create(:org_program, workgroup: normal_workgroup_1) }
176 let!(:normal_program_2) { create(:org_program, workgroup: normal_workgroup_2) }
177 let!(:other_program) { create(:org_program, workgroup: other_workgroup) }
178
179 let!(:super_branch) { create(:org_branch, program: super_program) }
180 let!(:normal_branch_1) { create(:org_branch, program: normal_program_1) }
181 let!(:normal_branch_2) { create(:org_branch, program: normal_program_2) }
182 let!(:other_branch) { create(:org_branch, program: other_program) }
183
184 let!(:super_rep) { create(:org_rep, realm: super_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user, branch: super_branch) }
185 let!(:normal_rep_1) { create(:org_rep, realm: normal_workgroup_1.realm, owner: normal_classic_user_1, classic_user: normal_classic_user_1, branch: normal_branch_1) }
186 let!(:normal_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: normal_classic_user_2, classic_user: normal_classic_user_2, branch: normal_branch_2) }
187 let!(:other_rep_1) { create(:org_rep, realm: other_workgroup.realm, owner: other_classic_user_1, classic_user: other_classic_user_1, branch: other_branch) }
188 let!(:other_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: other_classic_user_2, classic_user: other_classic_user_2, branch: normal_branch_2) }
189
190 let!(:super_rep_code) { create(:org_rep_code, rep: super_rep) }
191 let!(:normal_rep_code_1) { create(:org_rep_code, rep: normal_rep_1) }
192 let!(:normal_rep_code_2) { create(:org_rep_code, rep: normal_rep_2) }
193 let!(:other_rep_code_1) { create(:org_rep_code, rep: other_rep_1, code: normal_rep_code_1.code) }
194 let!(:other_rep_code_2) { create(:org_rep_code, rep: other_rep_2, code: normal_rep_code_1.code) }
195
196 let!(:current_user_session) { create(:user_session, :complete, :active, owner: super_user) }
197 let!(:role) { create :org_role, name: 'Tester' }
198 let!(:user_roles) { create(:org_user_role, user: super_user, role: role) }
199 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: super_rep_code.code, account: super_cust_account) }
200 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: normal_rep_code_1.code, account: normal_cust_account_1) }
201 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: normal_rep_code_2.code, account: normal_cust_account_2) }
202 let!(:cust_check_deposit_4) { create(:custodial_check_deposit, rep_code: other_rep_code_1.code, account: other_cust_account_1) }
203 let!(:cust_check_deposit_5) { create(:custodial_check_deposit, rep_code: other_rep_code_2.code, account: other_cust_account_2) }
204
205 before do
206 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
207 end
208
209 it 'returns all the checks for the realm of the super workgroup' do
210 expect(json['records'].count).to eq(6)
211 end
212 end
213
214 context 'check blotter index when user have HOA Workgroup' do
215 let!(:hoa_user) { create(:org_user) }
216 let!(:other_user) { create(:org_user) }
217 let!(:realm) { create(:org_realm) }
218
219 let!(:normal_firm) { create(:org_firm, realm: realm) }
220 let!(:other_firm) { create(:org_firm, realm: realm) }
221
222 let!(:hoa_workgroup) { create(:org_workgroup, firm: normal_firm) }
223 let!(:normal_workgroup) { create(:org_workgroup, firm: normal_firm) }
224 let!(:other_workgroup) { create(:org_workgroup, firm: other_firm) }
225
226 let!(:hoa_classic_user_1) { create(:org_classic_user, user: hoa_user, realm: realm, workgroup: hoa_workgroup) }
227 let!(:hoa_classic_user_2) { create(:org_classic_user, user: hoa_user, realm: realm, workgroup: normal_workgroup) }
228 let!(:other_classic_user) { create(:org_classic_user, user: other_user, realm: realm, workgroup: other_workgroup) }
229
230 let!(:hoa_affiliation) { create(:org_affiliation, lead_workgroup: hoa_workgroup) }
231 let!(:affiliation_workgroup) { create(:affiliation_workgroup, affiliation: hoa_affiliation, workgroup: normal_workgroup) }
232
233 let!(:hoa_contact) { create(:contacts_contact, owner: hoa_classic_user_1) }
234 let!(:normal_contact) { create(:contacts_contact, owner: hoa_classic_user_2) }
235 let!(:other_contact) { create(:contacts_contact, owner: other_classic_user) }
236
237 let!(:hoa_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: hoa_contact.id, realm: realm) }
238 let!(:normal_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: normal_contact.id, realm: realm) }
239 let!(:other_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: other_contact.id, realm: realm) }
240
241 let!(:hoa_account) { create(:accounts_account, account_forms_collection: hoa_account_forms_collection) }
242 let!(:normal_account) { create(:accounts_account, account_forms_collection: normal_account_forms_collection) }
243 let!(:other_account) { create(:accounts_account, account_forms_collection: other_account_forms_collection) }
244
245 let!(:hoa_cust_account) { create(:custodial_account, number: hoa_account.account_number) }
246 let!(:normal_cust_account) { create(:custodial_account, number: normal_account.account_number) }
247 let!(:other_cust_account) { create(:custodial_account, number: other_account.account_number) }
248
249 let!(:program_1) { create(:org_program, workgroup: hoa_workgroup) }
250 let!(:program_2) { create(:org_program, workgroup: normal_workgroup) }
251 let!(:program_3) { create(:org_program, workgroup: other_workgroup) }
252
253 let!(:branch_1) { create(:org_branch, program: program_1) }
254 let!(:branch_2) { create(:org_branch, program: program_2) }
255 let!(:branch_3) { create(:org_branch, program: program_3) }
256
257 let!(:rep_1) { create(:org_rep, realm: realm, owner: hoa_classic_user_1, classic_user: hoa_classic_user_1, branch: branch_1) }
258 let!(:rep_2) { create(:org_rep, realm: realm, owner: hoa_classic_user_2, classic_user: hoa_classic_user_2, branch: branch_2) }
259 let!(:rep_3) { create(:org_rep, realm: realm, owner: other_classic_user, classic_user: other_classic_user, branch: branch_3) }
260
261 let!(:rep_code_1) { create(:org_rep_code, rep: rep_1) }
262 let!(:rep_code_2) { create(:org_rep_code, rep: rep_2) }
263 let!(:rep_code_3) { create(:org_rep_code, rep: rep_3) }
264
265 let!(:current_user_session) { create(:user_session, :complete, :active, owner: hoa_user) }
266 let!(:role) { create :org_role, name: 'Tester' }
267 let!(:user_roles) { create(:org_user_role, user: hoa_user, role: role) }
268 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: rep_code_1.code, account: hoa_cust_account) }
269 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: rep_code_2.code, account: normal_cust_account) }
270 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_3.code, account: other_cust_account) }
271
272 before do
273 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
274 end
275
276 it 'returns only the checks for reps that belongs to the hoa_workgroup or one of his affiliations' do
277 expect(json['records'].count).to eq(2)
278 expect(json['records'].all? { |check| check['rep_code'] == rep_code_1.code || check['rep_code'] == rep_code_2.code }).to eq(true)
279 end
280 end
281
282 context 'check blotter index when user is supervisor (manager)' do
283 let!(:supervisor) { create(:org_user) }
284 let!(:supervised_1) { create(:org_user) }
285 let!(:not_supervised) { create(:org_user) }
286 let!(:realm) { create(:org_realm) }
287 let!(:supervisor_classic_user) { create(:org_classic_user, user: supervisor, realm: realm) }
288 let!(:supervised_classic_user) { create(:org_classic_user, user: supervised_1, realm: realm, manager: supervisor_classic_user) }
289 let!(:not_supervised_classic_user) { create(:org_classic_user, user: not_supervised, realm: realm) }
290
291 let!(:supervisor_contact) { create(:contacts_contact, owner: supervisor_classic_user) }
292 let!(:supervised_contact) { create(:contacts_contact, owner: supervised_classic_user) }
293 let!(:not_supervised_contact) { create(:contacts_contact, owner: not_supervised_classic_user) }
294
295 let!(:supervisor_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: supervisor_contact.id, realm: realm) }
296 let!(:supervised_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: supervised_contact.id, realm: realm) }
297 let!(:not_supervised_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: not_supervised_contact.id, realm: realm) }
298
299 let!(:supervisor_account) { create(:accounts_account, account_forms_collection: supervisor_account_forms_collection) }
300 let!(:supervised_account) { create(:accounts_account, account_forms_collection: supervised_account_forms_collection) }
301 let!(:not_supervised_account) { create(:accounts_account, account_forms_collection: not_supervised_account_forms_collection) }
302
303 let!(:supervisor_cust_account) { create(:custodial_account, number: supervisor_account.account_number) }
304 let!(:supervised_cust_account) { create(:custodial_account, number: supervised_account.account_number) }
305 let!(:not_supervised_cust_account) { create(:custodial_account, number: not_supervised_account.account_number) }
306
307 let!(:rep_1) { create(:org_rep, realm: realm, owner: supervisor_classic_user, classic_user: supervisor_classic_user) }
308 let!(:rep_2) { create(:org_rep, realm: realm, owner: supervised_classic_user, classic_user: supervised_classic_user) }
309 let!(:rep_3) { create(:org_rep, realm: realm, owner: not_supervised_classic_user, classic_user: not_supervised_classic_user) }
310 let!(:rep_code_1) { create(:org_rep_code, rep: rep_1) }
311 let!(:rep_code_2) { create(:org_rep_code, rep: rep_2) }
312 let!(:rep_code_3) { create(:org_rep_code, rep: rep_3) }
313 let!(:current_user_session) { create(:user_session, :complete, :active, owner: supervisor) }
314 let!(:role) { create :org_role, name: 'Tester' }
315 let!(:user_roles) { create(:org_user_role, user: supervisor, role: role) }
316 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: rep_code_1.code, account: supervisor_cust_account) }
317 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: rep_code_2.code, account: supervised_cust_account) }
318 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_3.code, account: not_supervised_cust_account) }
319
320 before do
321 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
322 end
323
324 it 'returns only the checks that belongs to himself or one of the supervisees' do
325 expect(json['records'].count).to eq(2)
326 expect(json['records'].all? { |check| check['rep_code'] == rep_code_1.code || check['rep_code'] == rep_code_2.code }).to eq(true)
327 end
328 end
329
330 context 'check blotter index when user have assistants' do
331 let!(:main_user) { create(:org_user) }
332 let!(:assistant_1) { create(:org_user) }
333 let!(:not_assistant) { create(:org_user) }
334 let!(:realm) { create(:org_realm) }
335 let!(:main_classic_user) { create(:org_classic_user, user: main_user, realm: realm) }
336 let!(:assistant_classic_user) { create(:org_classic_user, user: assistant_1, realm: realm) }
337 let!(:not_assistant_classic_user) { create(:org_classic_user, user: not_assistant, realm: realm) }
338 let!(:assistant_relation) { create(:org_classic_user_assistance, assistee: main_classic_user, assistant: assistant_classic_user) }
339
340 let!(:main_contact) { create(:contacts_contact, owner: main_classic_user) }
341 let!(:assistant_contact) { create(:contacts_contact, owner: assistant_classic_user) }
342 let!(:not_assistant_contact) { create(:contacts_contact, owner: not_assistant_classic_user) }
343
344 let!(:main_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: main_contact.id, realm: realm) }
345 let!(:assistant_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: assistant_contact.id, realm: realm) }
346 let!(:not_assistant_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: not_assistant_contact.id, realm: realm) }
347
348 let!(:main_account) { create(:accounts_account, account_forms_collection: main_account_forms_collection) }
349 let!(:assistant_account) { create(:accounts_account, account_forms_collection: assistant_account_forms_collection) }
350 let!(:not_assistant_account) { create(:accounts_account, account_forms_collection: not_assistant_account_forms_collection) }
351
352 let!(:main_cust_account) { create(:custodial_account, number: main_account.account_number) }
353 let!(:assistant_cust_account) { create(:custodial_account, number: assistant_account.account_number) }
354 let!(:not_assistant_cust_account) { create(:custodial_account, number: not_assistant_account.account_number) }
355
356 let!(:rep_1) { create(:org_rep, realm: realm, owner: main_classic_user, classic_user: main_classic_user) }
357 let!(:rep_2) { create(:org_rep, realm: realm, owner: assistant_classic_user, classic_user: assistant_classic_user) }
358 let!(:rep_3) { create(:org_rep, realm: realm, owner: not_assistant_classic_user, classic_user: not_assistant_classic_user) }
359 let!(:rep_code_1) { create(:org_rep_code, rep: rep_1) }
360 let!(:rep_code_2) { create(:org_rep_code, rep: rep_2) }
361 let!(:rep_code_3) { create(:org_rep_code, rep: rep_3) }
362 let!(:current_user_session) { create(:user_session, :complete, :active, owner: main_user) }
363 let!(:role) { create :org_role, name: 'Tester' }
364 let!(:user_roles) { create(:org_user_role, user: main_user, role: role) }
365 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: rep_code_1.code, account: main_cust_account) }
366 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: rep_code_2.code, account: assistant_cust_account) }
367 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_3.code, account: not_assistant_cust_account) }
368
369 before do
370 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
371 end
372
373 it 'returns only the checks that belongs to himself or one of the assistants' do
374 expect(json['records'].count).to eq(2)
375 expect(json['records'].all? { |check| check['rep_code'] == rep_code_1.code || check['rep_code'] == rep_code_2.code }).to eq(true)
376 end
377 end
378
379 context 'check blotter index when user is supervisor AND have assistants' do
380 let!(:main_user) { create(:org_user) }
381 let!(:supervised_1) { create(:org_user) }
382 let!(:assistant_1) { create(:org_user) }
383 let!(:not_assistant) { create(:org_user) }
384 let!(:realm) { create(:org_realm) }
385 let!(:main_classic_user) { create(:org_classic_user, user: main_user, realm: realm) }
386 let!(:supervised_classic_user) { create(:org_classic_user, user: supervised_1, realm: realm, manager: main_classic_user) }
387 let!(:assistant_classic_user) { create(:org_classic_user, user: assistant_1, realm: realm) }
388 let!(:not_assistant_classic_user) { create(:org_classic_user, user: not_assistant, realm: realm) }
389 let!(:assistant_relation) { create(:org_classic_user_assistance, assistee: main_classic_user, assistant: assistant_classic_user) }
390
391 let!(:main_contact) { create(:contacts_contact, owner: main_classic_user) }
392 let!(:supervised_contact) { create(:contacts_contact, owner: supervised_classic_user) }
393 let!(:assistant_contact) { create(:contacts_contact, owner: assistant_classic_user) }
394 let!(:not_assistant_contact) { create(:contacts_contact, owner: not_assistant_classic_user) }
395
396 let!(:main_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: main_contact.id, realm: realm) }
397 let!(:supervised_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: supervised_contact.id, realm: realm) }
398 let!(:assistant_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: assistant_contact.id, realm: realm) }
399 let!(:not_assistant_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: not_assistant_contact.id, realm: realm) }
400
401 let!(:main_account) { create(:accounts_account, account_forms_collection: main_account_forms_collection) }
402 let!(:supervised_account) { create(:accounts_account, account_forms_collection: supervised_account_forms_collection) }
403 let!(:assistant_account) { create(:accounts_account, account_forms_collection: assistant_account_forms_collection) }
404 let!(:not_assistant_account) { create(:accounts_account, account_forms_collection: not_assistant_account_forms_collection) }
405
406 let!(:main_cust_account) { create(:custodial_account, number: main_account.account_number) }
407 let!(:supervised_cust_account) { create(:custodial_account, number: supervised_account.account_number) }
408 let!(:assistant_cust_account) { create(:custodial_account, number: assistant_account.account_number) }
409 let!(:not_assistant_cust_account) { create(:custodial_account, number: not_assistant_account.account_number) }
410
411 let!(:rep_1) { create(:org_rep, realm: realm, owner: main_classic_user, classic_user: main_classic_user) }
412 let!(:rep_2) { create(:org_rep, realm: realm, owner: assistant_classic_user, classic_user: assistant_classic_user) }
413 let!(:rep_3) { create(:org_rep, realm: realm, owner: not_assistant_classic_user, classic_user: not_assistant_classic_user) }
414 let!(:rep_4) { create(:org_rep, realm: realm, owner: supervised_classic_user, classic_user: supervised_classic_user) }
415 let!(:rep_code_1) { create(:org_rep_code, rep: rep_1) }
416 let!(:rep_code_2) { create(:org_rep_code, rep: rep_2) }
417 let!(:rep_code_3) { create(:org_rep_code, rep: rep_3) }
418 let!(:rep_code_4) { create(:org_rep_code, rep: rep_4) }
419 let!(:current_user_session) { create(:user_session, :complete, :active, owner: main_user) }
420 let!(:role) { create :org_role, name: 'Tester' }
421 let!(:user_roles) { create(:org_user_role, user: main_user, role: role) }
422 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: rep_code_1.code, account: main_cust_account) }
423 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: rep_code_2.code, account: assistant_cust_account) }
424 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_3.code, account: not_assistant_cust_account) }
425 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_4.code, account: supervised_cust_account) }
426
427 before do
428 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
429 end
430
431 it 'returns only the checks that belongs to himself or one of the assistants' do
432 expect(json['records'].count).to eq(3)
433 expect(json['records'].all? { |check| [rep_code_1.code, rep_code_2.code, rep_code_4.code].include?(check['rep_code']) }).to eq(true)
434 end
435 end
436
437 context 'check blotter index when user is a normal rep' do
438 let!(:main_user) { create(:org_user) }
439 let!(:other_user) { create(:org_user) }
440 let!(:realm) { create(:org_realm) }
441 let!(:realm_2) { create(:org_realm, :spf_front_office) }
442 let!(:main_classic_user_1) { create(:org_classic_user,realm: realm) }
443 let!(:main_classic_user_2) { create(:org_classic_user, realm: realm_2) }
444 let!(:other_classic_user) { create(:org_classic_user, realm: realm) }
445 let!(:classic_user_ownership_1) { create(:org_classic_user_ownership, user: main_user, classic_user: main_classic_user_1) }
446 let!(:classic_user_ownership_2) { create(:org_classic_user_ownership, user: main_user, classic_user: main_classic_user_2) }
447 let!(:classic_user_ownership_3) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user) }
448
449 let!(:main_contact_1) { create(:contacts_contact, owner: main_classic_user_1) }
450 let!(:main_contact_2) { create(:contacts_contact, owner: main_classic_user_2) }
451 let!(:other_contact) { create(:contacts_contact, owner: other_classic_user) }
452
453 let!(:main_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: main_contact_1.id, realm: realm) }
454 let!(:main_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: main_contact_2.id, realm: realm_2) }
455 let!(:other_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: other_contact.id, realm: realm) }
456
457 let!(:main_account_1) { create(:accounts_account, account_forms_collection: main_account_forms_collection_1) }
458 let!(:main_account_2) { create(:accounts_account, account_forms_collection: main_account_forms_collection_2) }
459 let!(:other_account) { create(:accounts_account, account_forms_collection: other_account_forms_collection) }
460
461 let!(:main_cust_account_1) { create(:custodial_account, number: main_account_1.account_number) }
462 let!(:main_cust_account_2) { create(:custodial_account, number: main_account_2.account_number) }
463 let!(:other_cust_account) { create(:custodial_account, number: other_account.account_number) }
464
465 let!(:rep_1) { create(:org_rep, realm: realm, owner: main_classic_user_1, classic_user: main_classic_user_1) }
466 let!(:rep_2) { create(:org_rep, realm: realm_2, owner: main_classic_user_2, classic_user: main_classic_user_2) }
467 let!(:rep_3) { create(:org_rep, realm: realm, owner: other_classic_user, classic_user: other_classic_user) }
468 let!(:rep_code_1) { create(:org_rep_code, rep: rep_1) }
469 let!(:rep_code_2) { create(:org_rep_code, rep: rep_2) }
470 let!(:rep_code_3) { create(:org_rep_code, rep: rep_3) }
471 let!(:current_user_session) { create(:user_session, :complete, :active, owner: main_user) }
472 let!(:role) { create :org_role, name: 'Tester' }
473 let!(:user_roles) { create(:org_user_role, user: main_user, role: role) }
474 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: rep_code_1.code, account: main_cust_account_1) }
475 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: rep_code_2.code, account: main_cust_account_2) }
476 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: rep_code_3.code, account: other_cust_account) }
477
478 before do
479 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
480 end
481
482 it 'returns only the checks that belongs to himself' do
483 expect(json['records'].count).to eq(2)
484 expect(json['records'].all? { |check| check['rep_code'] == rep_code_1.code || check['rep_code'] == rep_code_2.code }).to eq(true)
485 end
486 end
487
488 context "search" do
489 before :each do
490 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }
491 end
492
493 it_behaves_like "a successful api request"
494
495 it "returns filtered documents" do
496 expect(json["records"].size).to eq(3)
497 expect(json["records"].any? {|check| check["id"] == check_document1.id }).to eq(true)
498 end
499 end
500
501 context "search by approver_by" do
502 before :each do
503 check_document1.approver = user
504 check_document1.save!
505 check_fundvision_document.approver = user
506 check_fundvision_document.save!
507 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { approved_by: user.first_name }
508 end
509
510 it_behaves_like "a successful api request"
511
512 it "returns filtered documents" do
513 expect(json["records"].size).to eq(2)
514 expect(json["records"].all? {|check| check["approver"] == "#{user.first_name} #{user.last_name}" }).to eq(true)
515 end
516 end
517
518 context "search by user follower" do
519 before :each do
520 check_document1.follower_id = user.id
521 check_document1.save!
522 check_fundvision_document.follower_id = nil
523 check_fundvision_document.save!
524 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { user_follow: user.first_name }
525 end
526
527 it_behaves_like "a successful api request"
528
529 it "returns filtered documents" do
530 expect(json["records"].size).to eq(1)
531 expect(json["records"].all? {|check| check["user_follow"] == "#{user.first_name} #{user.last_name}" }).to eq(true)
532 end
533 end
534
535 context "search by user unfollowed" do
536 before :each do
537 check_document1.unfollower_id = user.id
538 check_document1.save!
539 check_fundvision_document.unfollower_id = nil
540 check_fundvision_document.save!
541 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { user_unfollow: user.first_name }
542 end
543
544 it_behaves_like "a successful api request"
545
546 it "returns filtered documents" do
547 expect(json["records"].size).to eq(1)
548 expect(json["records"].all? {|check| check["user_unfollow"] == "#{user.first_name} #{user.last_name}" }).to eq(true)
549 end
550 end
551
552 context "search by client_name" do
553 before :each do
554 check_document1.contact = contact_1
555 check_document1.save!
556 check_document2.contact = contact
557 check_document2.save!
558 check_fundvision_document.contact = contact
559 check_fundvision_document.save!
560 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { client_name: contact_1.first_name }
561 end
562
563 it_behaves_like "a successful api request"
564
565 it "returns filtered documents" do
566 expect(json["records"].size).to eq(1)
567 expect(json["records"].all? {|check| check["client_name"] == "#{contact_1.first_name} #{contact_1.last_name}" }).to eq(true)
568 end
569 end
570
571 context "search by received_by" do
572 before :each do
573 check_document1.received_by = user.first_name
574 check_document1.save!
575 check_fundvision_document.received_by = contact.first_name
576 check_fundvision_document.save!
577 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { received_by: user.first_name }
578 end
579
580 it_behaves_like "a successful api request"
581
582 it "returns filtered documents" do
583 expect(json["records"].size).to eq(1)
584 expect(json["records"].all? {|check| check["received_by"].first == user.first_name }).to eq(true)
585 end
586 end
587
588 context "search by account_number" do
589 before :each do
590 check_document1.account_numbers = [[account.account_number, account.account_type_description]]
591 check_document1.save!
592 check_document2.account_numbers = [['xxx123', 'dummy account']]
593 check_document2.save!
594 check_fundvision_document.account_numbers = [['abc123', 'dummy account 2']]
595 check_fundvision_document.save!
596 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { account_numbers: account.account_number }
597 end
598
599 it_behaves_like "a successful api request"
600
601 it "returns filtered documents" do
602 expect(json["records"].size).to eq(1)
603 expect(json["records"].all? {|check| check["account_numbers"]&.first&.first == account.account_number }).to eq(true)
604 end
605 end
606
607 context "search by product_type" do
608 before :each do
609 check_document1.check_product_type_code = "Testing product"
610 check_document1.save!
611 check_fundvision_document.check_product_type_code = "Other code"
612 check_fundvision_document.save!
613 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { product_type: "Testing product" }
614 end
615
616 it_behaves_like "a successful api request"
617
618 it "returns filtered documents" do
619 expect(json["records"].size).to eq(1)
620 expect(json["records"].all? {|check| check["product_type"] == "Testing product" }).to eq(true)
621 end
622 end
623
624 context "search by contribution_type" do
625 before :each do
626 check_document1.contribution_type_code = "Contrib test"
627 check_document1.save!
628 check_fundvision_document.contribution_type_code = "Other"
629 check_fundvision_document.save!
630 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { contribution_type: "Contrib test" }
631 end
632
633 it_behaves_like "a successful api request"
634
635 it "returns filtered documents" do
636 expect(json["records"].size).to eq(1)
637 expect(json["records"].all? {|check| check["contribution_type"] == "Contrib test" }).to eq(true)
638 end
639 end
640
641 context "search by rep_code" do
642 before :each do
643 check_document1.account_numbers = [[account.account_number, account.account_type_description]]
644 check_document1.save!
645 check_document2.account_numbers = [['xxx123', 'dummy account']]
646 check_document2.save!
647 check_fundvision_document.account_numbers = [['abc123', 'dummy account 2']]
648 check_fundvision_document.save!
649 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { rep_code: account.rep }
650 end
651
652 it_behaves_like "a successful api request"
653
654 it "returns filtered documents" do
655 expect(json["records"].size).to eq(3)
656 expect(json["records"].all? {|check| check["rep_code"] == account.rep }).to eq(true)
657 end
658 end
659
660 context "search by check_origin" do
661 before :each do
662 checks_pershing.touch
663 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { check_origin: "Pershing" }
664 end
665
666 it_behaves_like "a successful api request"
667
668 it "returns filtered documents" do
669 expect(json["records"].size).to eq(1)
670 expect(json["records"].all? {|check| check["check_origin"] == "Pershing" }).to eq(true)
671 end
672 end
673
674 context "search by follow_up" do
675 before :each do
676 check_document1.follow_up = true
677 check_document1.save!
678 check_fundvision_document.follow_up = false
679 check_fundvision_document.save!
680 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { follow_up: true }
681 end
682
683 it_behaves_like "a successful api request"
684
685 it "returns filtered documents" do
686 expect(json["records"].size).to eq(1)
687 expect(json["records"].all? {|check| check["follow_up"] == true }).to eq(true)
688 end
689 end
690
691 context "search by forwarded_to" do
692 let!(:sponsor) { create(:accounts_sponsor) }
693 before :each do
694 sponsor.contact = contact
695 sponsor.save!
696 check_document1.forwarded_to = sponsor.classic_urn.split(':').last
697 check_document1.contact = contact
698 check_document1.save!
699 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { forwarded_to: sponsor.contact.employment_company }
700 end
701
702 it_behaves_like "a successful api request"
703
704 it "returns filtered documents" do
705 expect(json["records"].size).to eq(1)
706 expect(json["records"].first["forwarded_to"] == sponsor.contact.employment_company).to eq(true)
707 end
708 end
709
710 context "search from forwarded_date" do
711 before :each do
712 check_document1.forwarded_date = Time.zone.today
713 check_document1.save!
714 check_fundvision_document.forwarded_date = 2.days.ago
715 check_fundvision_document.save!
716 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { forwarded_from_date: 1.day.ago }
717 end
718
719 it_behaves_like "a successful api request"
720
721 it "returns filtered documents" do
722 expect(json["records"].size).to eq(1)
723 expect(Date.parse(json["records"].first["forwarded_date"]) >= 1.day.ago).to eq(true)
724 end
725 end
726
727 context "search to forwarded_date" do
728 before :each do
729 check_document1.forwarded_date = 3.days.ago
730 check_document1.save!
731 check_fundvision_document.forwarded_date = 2.days.ago
732 check_fundvision_document.save!
733 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { forwarded_to_date: 3.day.ago }
734 end
735
736 it_behaves_like "a successful api request"
737
738 it "returns filtered documents" do
739 expect(json["records"].size).to eq(1)
740 expect(Date.parse(json["records"].first["forwarded_date"]) <= 3.days.ago).to eq(true)
741 end
742 end
743
744 context "search from received_date" do
745 before :each do
746 check_document1.received_date = Time.zone.today
747 check_document1.save!
748 check_fundvision_document.received_date = 2.days.ago
749 check_fundvision_document.save!
750 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { received_from_date: 1.day.ago }
751 end
752
753 it_behaves_like "a successful api request"
754
755 it "returns filtered documents" do
756 expect(json["records"].size).to eq(1)
757 expect(Date.parse(json["records"].first["received_date"]) >= 1.days.ago).to eq(true)
758 end
759 end
760
761 context "search to received_date" do
762 before :each do
763 check_document1.received_date = 3.days.ago
764 check_document1.save!
765 check_fundvision_document.received_date = 2.days.ago
766 check_fundvision_document.save!
767 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { received_to_date: 3.day.ago }
768 end
769
770 it_behaves_like "a successful api request"
771
772 it "returns filtered documents" do
773 expect(json["records"].size).to eq(1)
774 expect(Date.parse(json["records"].first["received_date"]) <= 3.days.ago).to eq(true)
775 end
776 end
777
778 context "search from uploaded_date" do
779 before :each do
780 check_document1.scan_date = Time.zone.today
781 check_document1.save!
782 check_fundvision_document.scan_date = 2.days.ago
783 check_fundvision_document.save!
784 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { uploaded_from_date: 1.day.ago, sort_by: 'uploaded_date', sort_order: 'desc' }
785 end
786
787 it_behaves_like "a successful api request"
788
789 it "returns filtered documents" do
790 expect(json["records"].size).to eq(2)
791 expect(Date.parse(json["records"].first["uploaded_date"]) >= 1.days.ago).to eq(true)
792 end
793 end
794
795 context "search to uploaded_date" do
796 before :each do
797 check_document1.scan_date = 3.days.ago
798 check_document1.save!
799 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { uploaded_to_date: 3.day.ago }
800 end
801
802 it_behaves_like "a successful api request"
803
804 it "returns filtered documents" do
805 expect(json["records"].size).to eq(1)
806 expect(Date.parse(json["records"].first["uploaded_date"]) <= 3.days.ago).to eq(true)
807 end
808 end
809
810 context "search from approve_date" do
811 before :each do
812 check_document1.approve_date = Time.zone.today
813 check_document1.save!
814 check_fundvision_document.approve_date = 2.days.ago
815 check_fundvision_document.save!
816 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { approve_from_date: Time.zone.yesterday }
817 end
818
819 it_behaves_like "a successful api request"
820
821 it "returns filtered documents" do
822 expect(json["records"].size).to eq(1)
823 expect(Date.parse(json["records"].first["approve_date"]) >= Time.zone.yesterday).to eq(true)
824 end
825 end
826
827 context "search to approve_date" do
828 before :each do
829 check_document1.approve_date = 3.days.ago
830 check_document1.save!
831 check_fundvision_document.approve_date = 2.days.ago
832 check_fundvision_document.save!
833 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { approve_to_date: 3.day.ago }
834 end
835
836 it_behaves_like "a successful api request"
837
838 it "returns filtered documents" do
839 expect(json["records"].size).to eq(1)
840 expect(Date.parse(json["records"].first["approve_date"]) <= 3.days.ago).to eq(true)
841 end
842 end
843
844 context "search from follow_date" do
845 before :each do
846 check_document1.follow_date = Time.zone.today
847 check_document1.save!
848 check_fundvision_document.follow_date = 2.days.ago
849 check_fundvision_document.save!
850 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { follow_from_date: Time.zone.yesterday }
851 end
852
853 it_behaves_like "a successful api request"
854
855 it "returns filtered documents" do
856 expect(json["records"].size).to eq(1)
857 expect(Date.parse(json["records"].first["follow_date"]) >= Time.zone.yesterday).to eq(true)
858 end
859 end
860
861 context "search to follow_date" do
862 before :each do
863 check_document1.follow_date = 3.days.ago
864 check_document1.save!
865 check_fundvision_document.follow_date = 2.days.ago
866 check_fundvision_document.save!
867 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { follow_to_date: 3.day.ago }
868 end
869
870 it_behaves_like "a successful api request"
871
872 it "returns filtered documents" do
873 expect(json["records"].size).to eq(1)
874 expect(Date.parse(json["records"].first["follow_date"]) <= 3.days.ago).to eq(true)
875 end
876 end
877
878 context "search from unfollow_date" do
879 before :each do
880 check_document1.unfollow_date = Time.zone.today
881 check_document1.save!
882 check_fundvision_document.unfollow_date = 2.days.ago
883 check_fundvision_document.save!
884 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { unfollow_from_date: 1.day.ago }
885 end
886
887 it_behaves_like "a successful api request"
888
889 it "returns filtered documents" do
890 expect(json["records"].size).to eq(1)
891 expect(Date.parse(json["records"].first["unfollow_date"]) >= 1.days.ago).to eq(true)
892 end
893 end
894
895 context "search to unfollow_date" do
896 before :each do
897 check_document1.unfollow_date = 3.days.ago
898 check_document1.save!
899 check_fundvision_document.unfollow_date = 2.days.ago
900 check_fundvision_document.save!
901 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { unfollow_to_date: 3.day.ago }
902 end
903
904 it_behaves_like "a successful api request"
905
906 it "returns filtered documents" do
907 expect(json["records"].size).to eq(1)
908 expect(Date.parse(json["records"].first["unfollow_date"]) <= 3.days.ago).to eq(true)
909 end
910 end
911
912 context 'search by supervisor_name' do
913 let!(:super_user) { create(:org_user) }
914 let!(:other_user) { create(:org_user) }
915 let!(:realm_cfs) { create(:org_realm, :cfs_back_office) }
916 let!(:realm_next) { create(:org_realm, :next_front_office) }
917 let!(:realm_spf) { create(:org_realm, :spf_registration) }
918 let!(:realm_cg) { create(:org_realm, :cg_registration) }
919
920 let!(:super_firm) { create(:org_firm, realm: realm_cfs) }
921 let!(:normal_firm_1) { create(:org_firm, realm: realm_next) }
922 let!(:normal_firm_2) { create(:org_firm, realm: realm_spf) }
923 let!(:other_firm) { create(:org_firm, realm: realm_cg) }
924
925 let!(:super_workgroup) { create(:org_workgroup, super_group: true, realm: realm_cfs, firm: super_firm) }
926 let!(:normal_workgroup_1) { create(:org_workgroup, realm: realm_next, firm: normal_firm_1) }
927 let!(:normal_workgroup_2) { create(:org_workgroup, realm: realm_spf, firm: normal_firm_2) }
928 let!(:other_workgroup) { create(:org_workgroup, realm: realm_cg, firm: other_firm) }
929
930 let!(:super_classic_user) { create(:org_classic_user, realm: super_workgroup.realm, workgroup: super_workgroup) }
931 let!(:normal_classic_user_1) { create(:org_classic_user, realm: normal_workgroup_1.realm, workgroup: normal_workgroup_1) }
932 let!(:normal_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
933 let!(:other_classic_user_1) { create(:org_classic_user, realm: other_workgroup.realm, workgroup: other_workgroup) }
934 let!(:other_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
935
936 let!(:super_classic_user_ownership) { create(:org_classic_user_ownership, user: super_user, classic_user: super_classic_user) }
937 let!(:normal_classic_user_ownership_1) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_1) }
938 let!(:normal_classic_user_ownership_2) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_2) }
939 let!(:other_classic_user_ownership_1) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_1) }
940 let!(:other_classic_user_ownership_2) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_2) }
941
942 let!(:super_contact) { create(:contacts_contact, owner: super_classic_user) }
943 let!(:normal_contact_1) { create(:contacts_contact, owner: normal_classic_user_1) }
944 let!(:normal_contact_2) { create(:contacts_contact, owner: normal_classic_user_2) }
945 let!(:other_contact_1) { create(:contacts_contact, owner: other_classic_user_1) }
946 let!(:other_contact_2) { create(:contacts_contact, owner: other_classic_user_2) }
947
948 let!(:super_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: super_contact.id, realm: realm_cfs) }
949 let!(:normal_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: normal_contact_1.id, realm: realm_next) }
950 let!(:normal_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: normal_contact_2.id, realm: realm_spf) }
951 let!(:other_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: other_contact_1.id, realm: realm_cg) }
952 let!(:other_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: other_contact_2.id, realm: realm_spf) }
953
954 let!(:super_account) { create(:accounts_account, account_forms_collection: super_account_forms_collection) }
955 let!(:normal_account_1) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_1) }
956 let!(:normal_account_2) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_2) }
957 let!(:other_account_1) { create(:accounts_account, account_forms_collection: other_account_forms_collection_1) }
958 let!(:other_account_2) { create(:accounts_account, account_forms_collection: other_account_forms_collection_2) }
959
960 let!(:super_cust_account) { create(:custodial_account, number: super_account.account_number) }
961 let!(:normal_cust_account_1) { create(:custodial_account, number: normal_account_1.account_number) }
962 let!(:normal_cust_account_2) { create(:custodial_account, number: normal_account_2.account_number) }
963 let!(:other_cust_account_1) { create(:custodial_account, number: other_account_1.account_number) }
964 let!(:other_cust_account_2) { create(:custodial_account, number: other_account_2.account_number) }
965
966 let!(:super_program) { create(:org_program, workgroup: super_workgroup) }
967 let!(:normal_program_1) { create(:org_program, workgroup: normal_workgroup_1) }
968 let!(:normal_program_2) { create(:org_program, workgroup: normal_workgroup_2) }
969 let!(:other_program) { create(:org_program, workgroup: other_workgroup) }
970
971 let!(:osj_mgr) { create(:org_rep, realm: super_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user) }
972 let!(:super_branch) { create(:org_branch, realm: realm_cfs, program: super_program, osj_mgr_classic_ids: [osj_mgr.classic_urn.split(':').last]) }
973 let!(:normal_branch_1) { create(:org_branch, program: normal_program_1) }
974 let!(:normal_branch_2) { create(:org_branch, program: normal_program_2) }
975 let!(:other_branch) { create(:org_branch, program: other_program) }
976
977 let!(:super_rep) { create(:org_rep, realm: super_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user, branch: super_branch, crd_registration: '12345') }
978 let!(:normal_rep_1) { create(:org_rep, realm: normal_workgroup_1.realm, owner: normal_classic_user_1, classic_user: normal_classic_user_1, branch: normal_branch_1, supervisor_crd_override: super_rep.crd_registration) }
979 let!(:normal_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: normal_classic_user_2, classic_user: normal_classic_user_2, branch: normal_branch_2, supervisor_crd_override: super_rep.crd_registration) }
980 let!(:other_rep_1) { create(:org_rep, realm: other_workgroup.realm, owner: other_classic_user_1, classic_user: other_classic_user_1, branch: other_branch, supervisor_crd_override: super_rep.crd_registration) }
981 let!(:other_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: other_classic_user_2, classic_user: other_classic_user_2, branch: normal_branch_2, supervisor_crd_override: super_rep.crd_registration) }
982
983 let!(:super_rep_code) { create(:org_rep_code, rep: super_rep) }
984 let!(:normal_rep_code_1) { create(:org_rep_code, rep: normal_rep_1) }
985 let!(:normal_rep_code_2) { create(:org_rep_code, rep: normal_rep_2) }
986 let!(:other_rep_code_1) { create(:org_rep_code, rep: other_rep_1, code: normal_rep_code_1.code) }
987 let!(:other_rep_code_2) { create(:org_rep_code, rep: other_rep_2, code: normal_rep_code_1.code) }
988
989 let!(:rep_code_map_1) { create(:org_rep_code_mapping, rep_code: super_rep_code, workgroup_id: super_workgroup.id ) }
990
991 let!(:current_user_session) { create(:user_session, :complete, :active, owner: super_user) }
992 let!(:role) { create :org_role, name: 'Tester' }
993 let!(:user_roles) { create(:org_user_role, user: super_user, role: role) }
994 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: super_rep_code.code, account: super_cust_account) }
995 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: normal_rep_code_1.code, account: normal_cust_account_1) }
996 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: normal_rep_code_2.code, account: normal_cust_account_2) }
997 let!(:cust_check_deposit_4) { create(:custodial_check_deposit, rep_code: other_rep_code_1.code, account: other_cust_account_1) }
998 let!(:cust_check_deposit_5) { create(:custodial_check_deposit, rep_code: other_rep_code_2.code, account: other_cust_account_2) }
999
1000 before :each do
1001 super_contact.rep_code_mapping_id = rep_code_map_1.id
1002 super_contact.save!
1003 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { supervisor_name: osj_mgr.first_name }
1004 end
1005
1006 it 'returns all the checks filtered by supervisor_name' do
1007 expect(json["records"].any? {|check| check["supervisor_name"] == "#{osj_mgr.first_name} #{osj_mgr.last_name}" }).to eq(true)
1008 end
1009
1010 let!(:current_user_session_2) { create(:user_session, :complete, :active, owner: super_user) }
1011 before :each do
1012 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session_2.id }
1013 end
1014
1015 end
1016
1017 context 'search by override_name' do
1018 let!(:super_user) { create(:org_user) }
1019 let!(:other_user) { create(:org_user) }
1020 let!(:realm_cfs) { create(:org_realm, :cfs_back_office) }
1021 let!(:realm_next) { create(:org_realm, :next_front_office) }
1022 let!(:realm_spf) { create(:org_realm, :spf_registration) }
1023 let!(:realm_cg) { create(:org_realm, :cg_registration) }
1024
1025 let!(:super_firm) { create(:org_firm, realm: realm_cfs) }
1026 let!(:normal_firm_1) { create(:org_firm, realm: realm_next) }
1027 let!(:normal_firm_2) { create(:org_firm, realm: realm_spf) }
1028 let!(:other_firm) { create(:org_firm, realm: realm_cg) }
1029
1030 let!(:super_workgroup) { create(:org_workgroup, super_group: true, realm: realm_cfs, firm: super_firm) }
1031 let!(:normal_workgroup_1) { create(:org_workgroup, realm: realm_next, firm: normal_firm_1) }
1032 let!(:normal_workgroup_2) { create(:org_workgroup, realm: realm_spf, firm: normal_firm_2) }
1033 let!(:other_workgroup) { create(:org_workgroup, realm: realm_cg, firm: other_firm) }
1034
1035 let!(:super_classic_user) { create(:org_classic_user, realm: super_workgroup.realm, workgroup: super_workgroup) }
1036 let!(:normal_classic_user_1) { create(:org_classic_user, realm: normal_workgroup_1.realm, workgroup: normal_workgroup_1) }
1037 let!(:normal_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
1038 let!(:other_classic_user_1) { create(:org_classic_user, realm: other_workgroup.realm, workgroup: other_workgroup) }
1039 let!(:other_classic_user_2) { create(:org_classic_user, realm: normal_workgroup_2.realm, workgroup: normal_workgroup_2) }
1040
1041 let!(:super_classic_user_ownership) { create(:org_classic_user_ownership, user: super_user, classic_user: super_classic_user) }
1042 let!(:normal_classic_user_ownership_1) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_1) }
1043 let!(:normal_classic_user_ownership_2) { create(:org_classic_user_ownership, user: super_user, classic_user: normal_classic_user_2) }
1044 let!(:other_classic_user_ownership_1) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_1) }
1045 let!(:other_classic_user_ownership_2) { create(:org_classic_user_ownership, user: other_user, classic_user: other_classic_user_2) }
1046
1047 let!(:super_contact) { create(:contacts_contact, owner: super_classic_user) }
1048 let!(:normal_contact_1) { create(:contacts_contact, owner: normal_classic_user_1) }
1049 let!(:normal_contact_2) { create(:contacts_contact, owner: normal_classic_user_2) }
1050 let!(:other_contact_1) { create(:contacts_contact, owner: other_classic_user_1) }
1051 let!(:other_contact_2) { create(:contacts_contact, owner: other_classic_user_2) }
1052
1053 let!(:super_account_forms_collection) { create(:accounts_account_forms_collection, contact_id: super_contact.id, realm: realm_cfs) }
1054 let!(:normal_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: normal_contact_1.id, realm: realm_next) }
1055 let!(:normal_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: normal_contact_2.id, realm: realm_spf) }
1056 let!(:other_account_forms_collection_1) { create(:accounts_account_forms_collection, contact_id: other_contact_1.id, realm: realm_cg) }
1057 let!(:other_account_forms_collection_2) { create(:accounts_account_forms_collection, contact_id: other_contact_2.id, realm: realm_spf) }
1058
1059 let!(:super_account) { create(:accounts_account, account_forms_collection: super_account_forms_collection) }
1060 let!(:normal_account_1) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_1) }
1061 let!(:normal_account_2) { create(:accounts_account, account_forms_collection: normal_account_forms_collection_2) }
1062 let!(:other_account_1) { create(:accounts_account, account_forms_collection: other_account_forms_collection_1) }
1063 let!(:other_account_2) { create(:accounts_account, account_forms_collection: other_account_forms_collection_2) }
1064
1065 let!(:super_cust_account) { create(:custodial_account, number: super_account.account_number) }
1066 let!(:normal_cust_account_1) { create(:custodial_account, number: normal_account_1.account_number) }
1067 let!(:normal_cust_account_2) { create(:custodial_account, number: normal_account_2.account_number) }
1068 let!(:other_cust_account_1) { create(:custodial_account, number: other_account_1.account_number) }
1069 let!(:other_cust_account_2) { create(:custodial_account, number: other_account_2.account_number) }
1070
1071 let!(:super_program) { create(:org_program, workgroup: super_workgroup) }
1072 let!(:normal_program_1) { create(:org_program, workgroup: normal_workgroup_1) }
1073 let!(:normal_program_2) { create(:org_program, workgroup: normal_workgroup_2) }
1074 let!(:other_program) { create(:org_program, workgroup: other_workgroup) }
1075
1076 let!(:osj_mgr_1) { create(:org_rep, realm: super_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user) }
1077 let!(:osj_mgr_2) { create(:org_rep, realm: normal_workgroup_1.realm, owner: super_classic_user, classic_user: super_classic_user) }
1078 let!(:osj_mgr_3) { create(:org_rep, realm: normal_workgroup_2.realm, owner: super_classic_user, classic_user: super_classic_user) }
1079 let!(:osj_mgr_4) { create(:org_rep, realm: other_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user) }
1080
1081 let!(:super_branch) { create(:org_branch, realm: realm_cfs, program: super_program, osj_mgr_classic_ids: [osj_mgr_1.classic_urn.split(':').last]) }
1082 let!(:normal_branch_1) { create(:org_branch, program: normal_program_1, osj_mgr_classic_ids: [osj_mgr_2.classic_urn.split(':').last]) }
1083 let!(:normal_branch_2) { create(:org_branch, program: normal_program_2, osj_mgr_classic_ids: [osj_mgr_3.classic_urn.split(':').last]) }
1084 let!(:other_branch) { create(:org_branch, program: other_program, osj_mgr_classic_ids: [osj_mgr_4.classic_urn.split(':').last]) }
1085
1086 let!(:super_rep) { create(:org_rep, realm: super_workgroup.realm, owner: super_classic_user, classic_user: super_classic_user, branch: super_branch, crd_registration: '12345') }
1087 let!(:normal_rep_1) { create(:org_rep, realm: normal_workgroup_1.realm, owner: normal_classic_user_1, classic_user: normal_classic_user_1, branch: normal_branch_1, supervisor_crd_override: super_rep.crd_registration) }
1088 let!(:normal_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: normal_classic_user_2, classic_user: normal_classic_user_2, branch: normal_branch_2, supervisor_crd_override: super_rep.crd_registration) }
1089 let!(:other_rep_1) { create(:org_rep, realm: other_workgroup.realm, owner: other_classic_user_1, classic_user: other_classic_user_1, branch: other_branch, supervisor_crd_override: super_rep.crd_registration) }
1090 let!(:other_rep_2) { create(:org_rep, realm: normal_workgroup_2.realm, owner: other_classic_user_2, classic_user: other_classic_user_2, branch: normal_branch_2, supervisor_crd_override: super_rep.crd_registration) }
1091
1092 let!(:super_rep_code) { create(:org_rep_code, rep: super_rep) }
1093 let!(:normal_rep_code_1) { create(:org_rep_code, rep: normal_rep_1) }
1094 let!(:normal_rep_code_2) { create(:org_rep_code, rep: normal_rep_2) }
1095 let!(:other_rep_code_1) { create(:org_rep_code, rep: other_rep_1, code: normal_rep_code_1.code) }
1096 let!(:other_rep_code_2) { create(:org_rep_code, rep: other_rep_2, code: normal_rep_code_1.code) }
1097
1098 let!(:rep_code_map_1) { create(:org_rep_code_mapping, rep_code: super_rep_code, workgroup_id: super_workgroup.id ) }
1099
1100 let!(:current_user_session) { create(:user_session, :complete, :active, owner: super_user) }
1101 let!(:role) { create :org_role, name: 'Tester' }
1102 let!(:user_roles) { create(:org_user_role, user: super_user, role: role) }
1103 let!(:cust_check_deposit_1) { create(:custodial_check_deposit, rep_code: super_rep_code.code, account: super_cust_account) }
1104 let!(:cust_check_deposit_2) { create(:custodial_check_deposit, rep_code: normal_rep_code_1.code, account: normal_cust_account_1) }
1105 let!(:cust_check_deposit_3) { create(:custodial_check_deposit, rep_code: normal_rep_code_2.code, account: normal_cust_account_2) }
1106 let!(:cust_check_deposit_4) { create(:custodial_check_deposit, rep_code: other_rep_code_1.code, account: other_cust_account_1) }
1107 let!(:cust_check_deposit_5) { create(:custodial_check_deposit, rep_code: other_rep_code_2.code, account: other_cust_account_2) }
1108
1109
1110 before :each do
1111 super_contact.rep_code_mapping_id = rep_code_map_1.id
1112 super_contact.save!
1113 normal_contact_1.rep_code_mapping_id = rep_code_map_1.id
1114 normal_contact_1.save!
1115 normal_contact_2.rep_code_mapping_id = rep_code_map_1.id
1116 normal_contact_2.save!
1117 post :checks_blotter, format: 'json', session: { user_session_id: current_user_session.id }, params: { override_name: super_rep.first_name }
1118 end
1119
1120 it 'returns all the checks filtered by override_name' do
1121 expect(json["records"].any? {|check| check["override_name"] == "#{super_rep.first_name} #{super_rep.last_name}" }).to eq(true)
1122 end
1123 end
1124
1125 context "approve checks without permission" do
1126 let!(:user_2) { create(:org_user) }
1127 let!(:current_user_session) { create(:user_session, :complete, :active, owner: user_2) }
1128
1129 before :each do
1130 post :approve_checks, session: { user_session_id: current_user_session.id }, params: {
1131 checks: [ {id: check_document1.id, check_origin: 'UNIO'},
1132 {id: check_fundvision_document.id, check_origin: 'UNIO'},
1133 {id: checks_pershing.id, check_origin: 'Pershing'}
1134 ]}
1135 end
1136
1137 it_behaves_like 'an invalid api request', 403
1138 end
1139
1140 context "approve checks without select or correct params" do
1141 before :each do
1142 user.user_roles.last.destroy
1143 post :approve_checks, session: { user_session_id: current_user_session.id }
1144 end
1145
1146 it_behaves_like 'an invalid api request', 403
1147 end
1148
1149 context "approve checks" do
1150 before :each do
1151 post :approve_checks, session: { user_session_id: current_user_session.id }, params: {
1152 checks: [ {id: check_document1.id, check_origin: 'UNIO'},
1153 {id: check_fundvision_document.id, check_origin: 'UNIO'},
1154 {id: checks_pershing.id, check_origin: 'Pershing'}
1155 ]}
1156 end
1157
1158 it_behaves_like "a successful api request"
1159
1160 it "returns a success message" do
1161 expect(json["message"]).to eq("Checks approved successfully.")
1162 end
1163 it "check approved pershing checks" do
1164 expect( ::Custodial::CheckDeposit.joins(:check_deposit_detail).where("approver_id is not null").count ).to eq(1)
1165 end
1166 it "check approved two unio checks" do
1167 expect(::Contacts::ContactDocumentCollection.where("approver_id is not null").count).to eq(2)
1168 end
1169 it "check follow up after approve" do
1170 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).approver_id).to be_kind_of(Integer)
1171 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).unfollower_id).to be_kind_of(Integer)
1172 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).follower_id).to be_kind_of(Integer)
1173 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).follow_date).to be_kind_of(Date)
1174 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).unfollow_date).to be_kind_of(Date)
1175 expect(::Contacts::ContactDocumentCollection.find(check_document1.id).approve_date).to be_kind_of(Date)
1176 end
1177 end
1178
1179 context "follow up checks " do
1180 before :each do
1181 post :follow_up_checks, session: { user_session_id: current_user_session.id },
1182 params: { checks: [ {id: check_document1.id, check_origin: 'UNIO'},
1183 {id: check_fundvision_document.id, check_origin: 'UNIO'},
1184 {id: checks_pershing.id, check_origin: 'Pershing'}
1185 ] }
1186 end
1187
1188 it_behaves_like "a successful api request"
1189
1190 it "returns a success message" do
1191 expect(json["message"]).to eq("Following up successfully.")
1192 end
1193 it "check follow up pershing checks" do
1194 expect( ::Custodial::CheckDeposit.joins(:check_deposit_detail).where("custodial_check_deposit_details.follower_id is not null and custodial_check_deposit_details.follow_up is true").count ).to eq(1)
1195 end
1196 it "check follow up two unio checks" do
1197 expect(::Contacts::ContactDocumentCollection.where("contact_document_collections.follower_id is not null and contact_document_collections.follow_up is true").count).to eq(2)
1198 end
1199 end
1200
1201 context "unfollow up checks" do
1202 before :each do
1203 post :unfollow_up_checks, session: { user_session_id: current_user_session.id },
1204 params: { checks: [ {id: check_document1.id, check_origin: 'UNIO'},
1205 {id: check_fundvision_document.id, check_origin: 'UNIO'},
1206 {id: checks_pershing.id, check_origin: 'Pershing'}
1207 ] }
1208 end
1209
1210 it_behaves_like "a successful api request"
1211
1212 it "returns a success message" do
1213 expect(json["message"]).to eq("Unfollowing up successfully.")
1214 end
1215 it "check unfollow up pershing checks" do
1216 expect( ::Custodial::CheckDeposit.joins(:check_deposit_detail).where("custodial_check_deposit_details.unfollower_id is not null and custodial_check_deposit_details.follow_up is false").count ).to eq(1)
1217 end
1218 it "check unfollow up two unio checks" do
1219 expect(::Contacts::ContactDocumentCollection.where("contact_document_collections.unfollower_id is not null and contact_document_collections.follow_up is false").count).to eq(2)
1220 end
1221 end
1222
1223 context "comment unio checks" do
1224 before :each do
1225 post :comments, session: { user_session_id: current_user_session.id },
1226 params: { id: check_document1.id, check_origin: 'UNIO', comments: "Comment Updated For UNIO" }
1227 end
1228
1229 it_behaves_like "a successful api request"
1230
1231 it "returns a success message" do
1232 expect(json["message"]).to eq("Comments updated successfully.")
1233 expect("Comment Updated For UNIO").to eq(::Contacts::CheckBlotterIndexVw.where(id: check_document1.id, check_origin: 'UNIO').first.comments)
1234 end
1235 end
1236
1237 context "creating pershing details" do
1238 let!(:checks_pershing_without_detail) { create :custodial_check_deposit }
1239
1240 before :all do
1241 ::Custodial::CheckDeposit.skip_callback(:create, :after, :create_check_detail)
1242 end
1243
1244 before :each do
1245 post :follow_up_checks, session: { user_session_id: current_user_session.id },
1246 params: { checks: [ { id: checks_pershing_without_detail.id, check_origin: 'Pershing' } ] }
1247 end
1248
1249 after :all do
1250 ::Custodial::CheckDeposit.set_callback(:create, :after, :create_check_detail)
1251 end
1252
1253 it_behaves_like "a successful api request"
1254
1255 it "check follow up two pershing checks validating without detail" do
1256
1257 expect(json["message"]).to eq("Following up successfully.")
1258 expect(::Custodial::CheckDepositDetail.where(custodial_check_deposit_id: checks_pershing_without_detail.id).present?).to eq(true)
1259 expect(checks_pershing_without_detail.check_deposit_detail.follow_up).to eq(true)
1260 end
1261 end
1262
1263
1264 context "comment pershing checks" do
1265 before :each do
1266 post :comments, session: { user_session_id: current_user_session.id },
1267 params: { id: checks_pershing.id, check_origin: 'Pershing', comments: "Comment Updated For Pershing" }
1268 end
1269
1270 it_behaves_like "a successful api request"
1271
1272 it "returns a success message" do
1273 expect(json["message"]).to eq("Comments updated successfully.")
1274 expect("Comment Updated For Pershing").to eq(checks_pershing.check_deposit_detail.comments)
1275 end
1276 end
1277
1278 end
1279
1280 describe "#index" do
1281 context "when user is not logged in" do
1282 before { get :index, params: { contact_id: contact.external_id } }
1283 it_behaves_like "an unauthorized api request"
1284 end
1285
1286 describe "when user is logged in" do
1287 context "for top rail" do
1288 before :each do
1289 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, is_review: 'true', client_name: contact.first_name, sort_by: 'document_next_step_code', sort_order: 'desc' }
1290 end
1291
1292 it_behaves_like "a successful api request"
1293
1294 it "returns documents to review" do
1295 expect(json["records"].size).to eq(3)
1296 expect(json["records"].first["next_step"]).to eq(cdc_top_rail_only.document_next_step_code)
1297 expect(json["records"].first["service"]).to eq(service.name)
1298 expect(json["records"].last["next_step"]).to eq("To Rep for Processing")
1299 expect(json["records"].second["next_step"]).to eq(Tables::DocumentNextStepCode::ENUMERATED_VALUES[cdc_top_rail_grid_back_to_rep_both.document_next_step_code])
1300 expect(json["records"].second["accounts"].first["account_number"]).to eq(account.account_number)
1301 expect(json["records"].second["accounts"].first["account_type"]).to eq(account.account_type_description.to_s)
1302 end
1303
1304 it "contains to rep for processing next step in document to review" do
1305 expect(json["records"].collect {|r| r["next_step"] }).to include("To Rep for Processing")
1306 end
1307 end
1308
1309 context "for document grid" do
1310 let!(:main_user) { create(:org_user) }
1311
1312 let!(:assistant_user) { create(:org_user, first_name: 'Courtney', last_name: 'Houck') }
1313 let!(:assistant_classic_user) { create(:org_classic_user, user: assistant_user) }
1314
1315
1316 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1317 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user) }
1318 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user, commission_view: false) }
1319 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1320 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1321 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1322 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1323 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1324
1325 before :each do
1326 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1327 end
1328
1329 it_behaves_like "a successful api request"
1330
1331 it "returns documents reviewed" do
1332 expect(json["records"].size).to eq(2)
1333 expect(json["records"].first["next_step"]).to eq(Tables::DocumentNextStepCode::ENUMERATED_VALUES[cdc_grid_only.document_next_step_code])
1334 expect(json["records"].first["accounts"].first["account_number"]).to eq(account.account_number)
1335 expect(json["records"].first["accounts"].first["account_type"]).to eq(account.account_type_description.to_s)
1336 expect(json["records"].first["original_filename"]).to eq('fileName.pdf')
1337 end
1338
1339 it "returns documents having next step as To Rep for Processing in documents reviewed" do
1340 expect(json["records"].collect {|r| r["next_step"] }).to include("To Transfers for Processing")
1341 end
1342
1343 it "commission statement document access not granted" do
1344 expect(json["records"].size).to eq(2)
1345 end
1346
1347 end
1348
1349 context "and commission view is not given to current user" do
1350 let!(:assistant_user) { create(:org_user, first_name: 'Courtney', last_name: 'Houck') }
1351 let!(:assistant_classic_user) { create(:org_classic_user, user: assistant_user, realm: realm) }
1352 let!(:assistant_user_session) { create(:user_session, :complete, :active, owner: assistant_user) }
1353
1354 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1355 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user) }
1356 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user, commission_view: false) }
1357 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: assistee_classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1358 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1359 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1360 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1361 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1362
1363 before :each do
1364 get :index, session: { user_session_id: assistant_user_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1365 end
1366
1367 it_behaves_like "a successful api request"
1368
1369 it "commission statement document access not granted" do
1370 expect(json["records"].size).to eq(1)
1371 end
1372
1373 end
1374
1375 context "and commission view is given to current user" do
1376 let!(:assistant_user) { create(:org_user, first_name: 'Courtney', last_name: 'Houck') }
1377 let!(:assistant_classic_user) { create(:org_classic_user, user: assistant_user, realm: realm) }
1378 let!(:assistant_user_session) { create(:user_session, :complete, :active, owner: assistant_user) }
1379
1380 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1381 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user) }
1382 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user, commission_view: true) }
1383 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: assistee_classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1384 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1385 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1386 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1387 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1388
1389 before :each do
1390 get :index, session: { user_session_id: assistant_user_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1391 end
1392
1393 it_behaves_like "a successful api request"
1394
1395 it "commission statement document access not granted" do
1396 expect(json["records"].size).to eq(2)
1397 end
1398
1399 end
1400
1401 context "and user is himself, apart from his assistant" do
1402 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1403 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user, realm: realm) }
1404 let!(:assistee_user_session) { create(:user_session, :complete, :active, owner: assistee_user) }
1405
1406 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: assistee_classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1407 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1408 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1409 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1410 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1411
1412 before :each do
1413 get :index, session: { user_session_id: assistee_user_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1414 end
1415
1416 it_behaves_like "a successful api request"
1417
1418 it "commission statement access granted" do
1419 expect(json["records"].size).to eq(2)
1420 end
1421
1422 end
1423
1424 context "and current user is one of from assistants with he/she only have access" do
1425
1426 let!(:assistant_user1) { create(:org_user, first_name: 'Courtney1', last_name: 'Houck1') }
1427 let!(:assistant_classic_user1) { create(:org_classic_user, user: assistant_user1) }
1428
1429 let!(:assistant_user2) { create(:org_user, first_name: 'Courtney', last_name: 'Houck') }
1430 let!(:assistant_classic_user2) { create(:org_classic_user, user: assistant_user2, realm: realm) }
1431 let!(:assistant_user2_session) { create(:user_session, :complete, :active, owner: assistant_user2) }
1432
1433 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1434 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user) }
1435
1436 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user1, commission_view: false) }
1437 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user2, commission_view: true) }
1438
1439 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: assistee_classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1440 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1441 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1442 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1443 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1444
1445 before :each do
1446 get :index, session: { user_session_id: assistant_user2_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1447 end
1448
1449 it_behaves_like "a successful api request"
1450
1451 it "commission statement document access not granted" do
1452 expect(json["records"].size).to eq(2)
1453 end
1454
1455 end
1456
1457 context "and current user is one of from assistants with no access" do
1458
1459 let!(:assistant_user1) { create(:org_user, first_name: 'Courtney1', last_name: 'Houck1') }
1460 let!(:assistant_classic_user1) { create(:org_classic_user, user: assistant_user1) }
1461
1462 let!(:assistant_user2) { create(:org_user, first_name: 'Courtney', last_name: 'Houck') }
1463 let!(:assistant_classic_user2) { create(:org_classic_user, user: assistant_user2, realm: realm) }
1464 let!(:assistant_user2_session) { create(:user_session, :complete, :active, owner: assistant_user2) }
1465
1466 let!(:assistee_user) { create(:org_user, first_name: 'Derek', last_name: 'Bell') }
1467 let!(:assistee_classic_user) { create(:org_classic_user, user: assistee_user) }
1468
1469 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user1, commission_view: true) }
1470 let!(:classic_user_assistances) { create(:org_classic_user_assistance, assistee: assistee_classic_user, assistant: assistant_classic_user2, commission_view: false) }
1471
1472 let!(:contact) { create(:contacts_contact, advisor: assistee_classic_user, realm: realm, owner: assistee_classic_user, bank_account_count: 2, rep_code_mapping_id: rep_code_map_1.id) }
1473 let!(:contact_document_type3) { create(:contact_document_type, realm: realm, description: "Commission Statement", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1474 let!(:contact_document_type4) { create(:contact_document_type, realm: realm, description: "A-Share Breakpoint Inquiry", possible_next_steps: ["25"], possible_errors: ["1", "7", "8", "20", "21", "24"], possible_status_values: ["9", "17", "20", "75", "85"], form_type_id: 4, form_type_ids: [4]) }
1475 let!(:check_document3) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type3, kind: contact_document_type3.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1476 let!(:check_document4) { create(:contact_document_collection, contact: contact, document_type_id: contact_document_type4, kind: contact_document_type4.classic_id, scan_date: Date.tomorrow, account_numbers: [[account.account_number, account.account_type_description]], document_next_step_code: "10", realm: contact.realm, comments: "Grid Only", original_filename:'fileName.pdf', status_date: Date.tomorrow) }
1477
1478 before :each do
1479 get :index, session: { user_session_id: assistant_user2_session.id }, params: { contact_id: contact.external_id, is_review: 'false' }
1480 end
1481
1482 it_behaves_like "a successful api request"
1483
1484 it "commission statement document access not granted" do
1485 expect(json["records"].size).to eq(1)
1486 end
1487
1488 end
1489
1490 context "search comments" do
1491 before :each do
1492 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, q: "only" }
1493 end
1494
1495 it_behaves_like "a successful api request"
1496
1497 it "returns filtered documents" do
1498 expect(json["records"].size).to eq(1)
1499 expect(json["records"].first["comments"]).to eq("Grid Only")
1500 end
1501 end
1502
1503 context "search by filename or comment looking at comment" do
1504 before :each do
1505 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, file_or_comment: "only" }
1506 end
1507
1508 it_behaves_like "a successful api request"
1509
1510 it "returns filtered documents" do
1511 expect(json["records"].size).to eq(1)
1512 expect(json["records"].first["comments"]).to eq("Grid Only")
1513 end
1514 end
1515
1516 context "search by filename or comment looking at filename" do
1517 before :each do
1518 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, file_or_comment: "name" }
1519 end
1520
1521 it_behaves_like "a successful api request"
1522
1523 it "returns filtered documents" do
1524 expect(json["records"].size).to eq(1)
1525 expect(json["records"].first["original_filename"]).to eq("fileName.pdf")
1526 end
1527 end
1528
1529 context " date filter" do
1530 before :each do
1531 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, upload_from_date: Date.today, upload_to_date: Date.tomorrow }
1532 end
1533
1534 it_behaves_like "a successful api request"
1535
1536 it "returns filtered documents" do
1537 expect(json["records"].size).to eq(1)
1538 expect(Date.parse(json["records"].first["uploaded_date"])).to eq(Date.tomorrow)
1539 end
1540 end
1541
1542 context "review date filter" do
1543 before :each do
1544 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, review_from_date: Date.today, review_to_date: Date.tomorrow }
1545 end
1546
1547 it_behaves_like "a successful api request"
1548
1549 it "returns filtered documents" do
1550 expect(json["records"].size).to eq(1)
1551 expect(Date.parse(json["records"].first["reviewed_date"])).to eq(Date.tomorrow)
1552 end
1553 end
1554
1555 context "next_step filter" do
1556 before :each do
1557 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, next_step: "10" }
1558 end
1559
1560 it_behaves_like "a successful api request"
1561
1562 it "returns filtered documents" do
1563 expect(json["records"].size).to eq(1)
1564 expect(json["records"].first["next_step"]).to eq(Tables::DocumentNextStepCode::ENUMERATED_VALUES["10"])
1565 end
1566 end
1567
1568 context "problem filter" do
1569 before :each do
1570 cdc_grid_only.update(document_problem_code: "10")
1571 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, problem: "10" }
1572 end
1573
1574 it_behaves_like "a successful api request"
1575
1576 it "returns filtered documents" do
1577 expect(json["records"].size).to eq(1)
1578 expect(json["records"].first["problem"]).to eq(Tables::DocumentProblemCode::ENUMERATED_VALUES["10"])
1579 end
1580 end
1581
1582 context "account_number filter" do
1583 before :each do
1584 cdc_grid_only.update(account_numbers: [['123456', 'test description']])
1585 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, account: '123456' }
1586 end
1587
1588 it_behaves_like "a successful api request"
1589
1590 it "returns filtered documents" do
1591 expect(json["records"].size).to eq(1)
1592 end
1593 end
1594
1595 context "status filter" do
1596 before :each do
1597 cdc_grid_only.update(document_status_level_code: "10")
1598 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, status: "10" }
1599 end
1600
1601 it_behaves_like "a successful api request"
1602
1603 it "returns filtered documents" do
1604 expect(json["records"].size).to eq(1)
1605 expect(json["records"].first["status"]).to eq(Tables::DocumentStatusLevelCode::ENUMERATED_VALUES["10"])
1606 end
1607 end
1608
1609 context "type filter" do
1610 before :each do
1611 @document_type = create(:contact_document_type, description: "document type description")
1612 cdc_grid_only.update(document_type: @document_type)
1613 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, type: @document_type.external_id }
1614 end
1615
1616 it_behaves_like "a successful api request"
1617
1618 it "returns filtered documents" do
1619 expect(json["records"].size).to eq(1)
1620 expect(json["records"].first["type"]).to eq("document type description")
1621 end
1622 end
1623
1624 context "type description filter" do
1625 before :each do
1626 @document_type = create(:contact_document_type, description: "document type description")
1627 cdc_grid_only.update(document_type: @document_type)
1628 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, type_description: 'document type description' }
1629 end
1630
1631 it_behaves_like "a successful api request"
1632
1633 it "returns filtered documents" do
1634 expect(json["records"].size).to eq(1)
1635 expect(json["records"].first["type"]).to eq("document type description")
1636 end
1637 end
1638
1639 context "sort by date" do
1640 context "sort by branch asc" do
1641 before :each do
1642 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "branch", sort_order: "asc" }
1643 end
1644
1645 it_behaves_like "a successful api request"
1646
1647 it "returns sorted documents" do
1648 expect(json["records"].pluck(:branch).sort).to eq(json["records"].pluck(:branch))
1649 end
1650 end
1651 context "sort by client_name asc" do
1652 before :each do
1653 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "client_name", sort_order: "asc" }
1654 end
1655
1656 it_behaves_like "a successful api request"
1657
1658 it "returns sorted documents" do
1659 expect(json["records"].pluck(:client_name).sort).to eq(json["records"].pluck(:client_name))
1660 end
1661 end
1662 context "sort by forwarded_to asc" do
1663 before :each do
1664 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "forwarded_to", sort_order: "asc" }
1665 end
1666
1667 it_behaves_like "a successful api request"
1668
1669 it "returns sorted documents" do
1670 expect(json["records"].pluck(:forwarded_to).sort).to eq(json["records"].pluck(:forwarded_to))
1671 end
1672 end
1673 context "sort by approved_by asc" do
1674 before :each do
1675 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "approved_by", sort_order: "asc" }
1676 end
1677
1678 it_behaves_like "a successful api request"
1679
1680 it "returns sorted documents" do
1681 expect(json["records"].pluck(:approved_by).sort).to eq(json["records"].pluck(:approved_by))
1682 end
1683 end
1684 context "sort by rep_code asc" do
1685 before :each do
1686 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "rep_code", sort_order: "asc" }
1687 end
1688
1689 it_behaves_like "a successful api request"
1690
1691 it "returns sorted documents" do
1692 expect(json["records"].pluck(:rep_code).sort).to eq(json["records"].pluck(:rep_code))
1693 end
1694 end
1695 context "sort by broker_dealer asc" do
1696 before :each do
1697 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "broker_dealer", sort_order: "asc" }
1698 end
1699
1700 it_behaves_like "a successful api request"
1701
1702 it "returns sorted documents" do
1703 expect(json["records"].pluck(:broker_dealer).sort).to eq(json["records"].pluck(:broker_dealer))
1704 end
1705 end
1706 context "sort by check_amount_in_cents asc" do
1707 before :each do
1708 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "check_amount_in_cents", sort_order: "asc" }
1709 end
1710
1711 it_behaves_like "a successful api request"
1712
1713 it "returns sorted documents" do
1714 expect(json["records"].pluck(:check_amount_in_cents).sort).to eq(json["records"].pluck(:check_amount_in_cents))
1715 end
1716 end
1717 context "sort by deposit_amount_in_cents asc" do
1718 before :each do
1719 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "deposit_amount_in_cents", sort_order: "asc" }
1720 end
1721
1722 it_behaves_like "a successful api request"
1723
1724 it "returns sorted documents" do
1725 expect(json["records"].pluck(:deposit_amount_in_cents).sort).to eq(json["records"].pluck(:deposit_amount_in_cents))
1726 end
1727 end
1728 context "sort by original_filename asc" do
1729 before :each do
1730 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "original_filename", sort_order: "asc" }
1731 end
1732
1733 it_behaves_like "a successful api request"
1734
1735 it "returns sorted documents" do
1736 expect(json["records"].pluck(:original_filename).sort).to eq(json["records"].pluck(:original_filename))
1737 end
1738 end
1739 context "sort by upload date" do
1740 before :each do
1741 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "scan_date", sort_order: "asc" }
1742 end
1743
1744 it_behaves_like "a successful api request"
1745
1746 it "returns sorted documents" do
1747 expect(json["records"].pluck(:uploaded_date).sort).to eq(json["records"].pluck(:uploaded_date))
1748 end
1749 end
1750 context "sort by review date" do
1751 before :each do
1752 get :index, session: { user_session_id: current_user_session.id }, params: { contact_id: contact.external_id, sort_by: "scan_date", sort_order: "desc" }
1753 end
1754
1755 it_behaves_like "a successful api request"
1756
1757 it "returns sorted documents" do
1758 expect(json["records"].pluck(:reviewed_date).sort.reverse).to eq(json["records"].pluck(:reviewed_date))
1759 end
1760 end
1761 end
1762 end
1763 end
1764
1765 describe "#update" do
1766 context "when user is not logged in" do
1767 before { put :update, params: { id: cdc_top_rail_only.external_id } }
1768 it_behaves_like "an unauthorized api request"
1769 end
1770
1771 describe "when user is logged in" do
1772 context "successful update" do
1773 before do
1774 put :update,
1775 session: {
1776 user_session_id: current_user_session.id,
1777 },
1778 params: {
1779 id: cdc_top_rail_only.external_id,
1780 next_step: "2",
1781 type: contact_document_type.external_id,
1782 comments: "Comment Updated",
1783 accounts: [
1784 {
1785 account_number: account.account_number,
1786 description: account.account_type_description,
1787 },
1788 ],
1789 received_date: "2018-08-29 09:44:45",
1790 received_by: [contact_1.owner.external_id],
1791 check_product_type_code: ["1", "2"],
1792 contribution_type_code: ["1", "2"],
1793 check_amount_in_cents: 150,
1794 deposit_amount_in_cents: 150,
1795 forwarded_to: ["1", "2"],
1796 forwarded_date: "2018-08-30 09:44:45",
1797 }
1798 end
1799
1800 it_behaves_like "a successful api request"
1801
1802 it "updates the field correctly" do
1803 cdc_top_rail_only.reload
1804 expect(json["comments"]).to eq "Comment Updated"
1805 expect(json["accounts"][0]["account_number"]).to eq account.account_number
1806 expect(cdc_top_rail_only.received_date).to eq "2018-08-29 09:44:45"
1807 expect(cdc_top_rail_only.received_by).to eq [contact_1.owner.external_id]
1808 expect(cdc_top_rail_only.check_product_type_code).to eq ["1", "2"]
1809 expect(cdc_top_rail_only.contribution_type_code).to eq ["1", "2"]
1810 expect(cdc_top_rail_only.check_amount_in_cents).to eq "150"
1811 expect(cdc_top_rail_only.deposit_amount_in_cents).to eq "150"
1812 expect(cdc_top_rail_only.forwarded_to).to eq ["1", "2"]
1813 end
1814 end
1815
1816 context "assigning workflow" do
1817 before do
1818 put :update,
1819 session: {
1820 user_session_id: current_user_session.id,
1821 },
1822 params: {
1823 id: cdc_unassigned_scanned.external_id,
1824 next_step: "2",
1825 type: contact_document_type.external_id,
1826 comments: "Comment Updated",
1827 document_type_id: 75,
1828 accounts: [
1829 {
1830 account_number: account.account_number,
1831 description: account.account_type_description,
1832 },
1833 ],
1834 received_date: "2018-08-29 09:44:45",
1835 received_by: [contact_1.owner.external_id],
1836 check_product_type_code: ["1", "2"],
1837 contribution_type_code: ["1", "2"],
1838 check_amount_in_cents: 150,
1839 deposit_amount_in_cents: 150,
1840 forwarded_to: ["1", "2"],
1841 forwarded_date: "2018-08-30 09:44:45",
1842 contact_id: contact.external_id,
1843 }
1844 end
1845
1846 it_behaves_like "a successful api request"
1847
1848 it "assigns workflow to document collection" do
1849 cdc_unassigned_scanned.reload
1850 expect(json["comments"]).to eq "Comment Updated"
1851 expect(json["accounts"][0]["account_number"]).to eq account.account_number
1852 expect(cdc_unassigned_scanned.received_date).to eq "2018-08-29 09:44:45"
1853 expect(cdc_unassigned_scanned.received_by).to eq [contact_1.owner.external_id]
1854 expect(cdc_unassigned_scanned.check_product_type_code).to eq ["1", "2"]
1855 expect(cdc_unassigned_scanned.contribution_type_code).to eq ["1", "2"]
1856 expect(cdc_unassigned_scanned.check_amount_in_cents).to eq "150"
1857 expect(cdc_unassigned_scanned.deposit_amount_in_cents).to eq "150"
1858 expect(cdc_unassigned_scanned.forwarded_to).to eq ["1", "2"]
1859 expect(cdc_unassigned_scanned.contact_id).to eq contact.id
1860 expect(cdc_unassigned_scanned.contact_urn).to eq contact.classic_urn
1861 end
1862 end
1863 end
1864 end
1865
1866 describe "#account_list" do
1867 context "when user is not logged in" do
1868 before { get :account_list, params: { id: contact.external_id } }
1869 it_behaves_like "an unauthorized api request"
1870 end
1871
1872 describe "when user is logged in" do
1873 context "gets the list of next steps,status and errors according to the document type selected" do
1874 before do
1875 get :account_list, session: { user_session_id: current_user_session.id }, params: { id: cdc_grid_only.external_id }
1876 end
1877
1878 it_behaves_like "a successful api request"
1879
1880 it "fetches the details of accounts correctly" do
1881 expect(json[0].keys).to match_array ["account_number", "account_type"]
1882 end
1883 end
1884 end
1885 end
1886
1887 describe "#status_list" do
1888 context "when user is not logged in" do
1889 before { get :status_list, params: { id: contact.external_id, document_type_id: contact.external_id } }
1890 it_behaves_like "an unauthorized api request"
1891 end
1892
1893 describe "when user is logged in" do
1894 context "gets the list of next steps,status and errors according to the document type selected" do
1895 before do
1896 get :status_list, session: { user_session_id: current_user_session.id }, params: { id: cdc_grid_only.external_id, document_type_id: contact_document_type.external_id }
1897 end
1898
1899 it_behaves_like "a successful api request"
1900
1901 it "fetches the list of statuses correctly" do
1902 expect(json[0].keys).to match_array ["code", "value"]
1903 end
1904 end
1905 end
1906 end
1907
1908 describe '#trails' do
1909 before do
1910 realm = create(:org_realm)
1911 @creator_contact = create(:contacts_contact, owner: create(:org_classic_user, realm: realm), realm: realm)
1912 @cdc = create(:contact_document_collection, realm: realm, contact: create(:contacts_contact, owner: create(:org_classic_user, username: '')), document_type_id: 75, scan_date: Date.today, document_next_step_code: "55", comments: "Generic Collection")
1913 create_list(:contact_document_trail, 4, contact_document_collection: @cdc, created_at: (Time.zone.now - 2.days))
1914 @latest_cdc = create(:contact_document_trail,
1915 contact_document_collection: @cdc,
1916 trail_progress: "10",
1917 trail_reason: ["8", "11"],
1918 trail_status: "10",
1919 created_at: Time.zone.now,
1920 trail_status_contact_classic_id: @creator_contact.classic_id)
1921 end
1922 context "when user is not logged in" do
1923 before { get :trails, params: { id: @cdc.external_id } }
1924 it_behaves_like "an unauthorized api request"
1925 end
1926
1927 context "when user is logged in" do
1928 context "it should fetch the document trail records" do
1929 before :each do
1930 get :trails, session: { user_session_id: current_user_session.id }, params: { id: @cdc.external_id }
1931 end
1932
1933 it_behaves_like "a successful api request"
1934
1935 it "returns documents to review" do
1936 expect(json["records"].size).to eq(6)
1937 expect(json["records"].first["trail_status_dt"]).to eq( Time.zone.parse(@latest_cdc.trail_status_date).as_json )
1938 expect(json["records"].first["next_step"]).to eq('To Transfers for Processing')
1939 expect(json["records"].first["problem"]).to eq(["Social Security Number Missing", "Employer Information Missing"])
1940 expect(json["records"].first["status"]).to eq("Preview - Accepted")
1941 expect(json["records"].first["username"]).to eq( @creator_contact.owner.name)
1942 expect(json["records"].first.keys).to match_array Api::Contacts::V1::ContactDocumentTrailDecorator.direct_hash_keys.map(&:to_s).push("id")
1943 end
1944 end
1945 end
1946 end
1947
1948 describe "DELETE #destroy" do
1949 def delete_document
1950 delete :destroy, params: { id: cdc_grid_only.external_id, format: 'json' }, session: { user_session_id: current_user_session.id }
1951 end
1952
1953 context 'of an undeletable contact, where' do
1954 it 'document is viewed by contact in MPV' do
1955 # TODO: Code needs to be added here as part of user story AT-6490
1956 # expect { delete_document }.to_not change { Contacts::ContactDocumentCollection.count }
1957 # expect(json["message"]).to match(/Document has already been viewed by client\/contact in MPV and cannot be deleted./)
1958 end
1959
1960 it 'document is reviewed' do
1961 cdc_grid_only.update(document_status_level_code: 10)
1962 expect { delete_document }.to_not change { Contacts::ContactDocumentCollection.active_documents.count }
1963 expect(json["message"]).to match(/Document has already been reviewed and cannot be deleted./)
1964 end
1965
1966 it 'has history changes for non osj user' do
1967 create(:contact_document_trail, contact_document_collection: cdc_grid_only)
1968 expect { delete_document }.to_not change { Contacts::ContactDocumentCollection.active_documents.count }
1969 expect(json["message"]).to match(/Document has history of changes and cannot be deleted./)
1970 end
1971 end
1972
1973 context 'of a deletable contact' do
1974 it 'removes the document for non osj user without history changes' do
1975 expect { delete_document }.to change { Contacts::ContactDocumentCollection.active_documents.count }.by(-1)
1976 expect(json["message"]).to match(/Document deleted successfully./)
1977 end
1978
1979 it 'removes the document for osj user with history changes' do
1980 classic_user.update(user_type_osj: true)
1981 create(:contact_document_trail, contact_document_collection: cdc_grid_only)
1982 expect { delete_document }.to change { Contacts::ContactDocumentCollection.active_documents.count }.by(-1)
1983 expect(json["message"]).to match(/Document deleted successfully./)
1984 end
1985 end
1986 end
1987
1988 describe "POST #upload" do
1989 let(:default_params) {
1990 {
1991 form_type_id: '4',
1992 form_id: 9999,
1993 contact_id: contact.external_id,
1994 content: Base64.encode64('this is a test'),
1995 content_type: "image/png",
1996 document_name: "hello.png",
1997 original_filename: "fileOnComputer.png",
1998 kind: contact_document_type.classic_id
1999 }
2000 }
2001 context "with no session" do
2002 before { jpost :upload, params: { contact_id: contact.external_id } }
2003 it_behaves_like "an unauthorized api request"
2004 end
2005
2006 context "when logged in" do
2007 before do
2008 expect(AccountOpening::FormsAPI).to receive(:new).and_return(
2009 double(update_form_pdf: "Updated successfully", show_form: nil)
2010 )
2011 jpost :upload,
2012 params: {
2013 form_id: 32232323233,
2014 contact_id: contact.external_id,
2015 content: Base64.encode64('this is a test'),
2016 content_type: "image/png",
2017 document_name: "hello.png",
2018 comments: "this is test comment",
2019 next_step: "55",
2020 type: contact_document_type.external_id,
2021 kind: contact_document_type.classic_id,
2022 accounts: [
2023 {
2024 account_number: account.account_number.to_s,
2025 account_type: account.account_type_description,
2026 },
2027 ],
2028 received_date: "2018-08-29 09:44:45",
2029 received_by: [contact_1.owner.external_id],
2030 check_product_type_code: ["1", "2"],
2031 contribution_type_code: ["1", "2"],
2032 check_amount_in_cents: 150,
2033 deposit_amount_in_cents: 150,
2034 forwarded_to: ["1", "2"],
2035 forwarded_date: "2018-08-30 09:44:45",
2036 },
2037 session: { user_session_id: current_user_session.id }
2038 end
2039 it "creates a new Attachment" do
2040 expect(json['message']).to eq("Document uploaded successfully.")
2041 expect(json['object']['next_step']).to eq("Back to Rep")
2042 expect(json['object']['id']).not_to be_nil
2043 expect(::Contacts::ContactDocumentCollection.last.document_next_step_code).to eq "55"
2044 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to eq [[account.account_number.to_s, account.account_type_description.to_s]]
2045 expect(::Contacts::ContactDocument.last.document_name).to eq "hello.png"
2046 expect(::Contacts::ContactDocument.last.original_filename).to eq nil
2047 expect(::Contacts::ContactDocument.last.content).to eq 'this is a test'
2048 expect(::Contacts::ContactDocumentCollection.last.received_date).to eq "2018-08-29 09:44:45"
2049 expect(::Contacts::ContactDocumentCollection.last.received_by).to eq [contact_1.owner.external_id]
2050 expect(::Contacts::ContactDocumentCollection.last.check_product_type_code).to eq ["1", "2"]
2051 expect(::Contacts::ContactDocumentCollection.last.contribution_type_code).to eq ["1", "2"]
2052 expect(::Contacts::ContactDocumentCollection.last.check_amount_in_cents).to eq "150"
2053 expect(::Contacts::ContactDocumentCollection.last.deposit_amount_in_cents).to eq "150"
2054 expect(::Contacts::ContactDocumentCollection.last.forwarded_to).to eq ["1", "2"]
2055 end
2056 end
2057
2058 context "when using form_type instead of document params" do
2059 before do
2060 expect(AccountOpening::FormsAPI).to receive(:new).and_return(
2061 double(update_form_pdf: "Updated successfully", show_form: nil)
2062 )
2063 jpost :upload,
2064 params: {
2065 form_type_id: '4',
2066 form_id: 9999,
2067 contact_id: contact.external_id,
2068 content: Base64.encode64('this is a test'),
2069 content_type: "image/png",
2070 document_name: "hello.png",
2071 original_filename: "fileOnComputer.png",
2072 next_step: "4",
2073 comments: "this is test comment",
2074 kind: contact_document_type.classic_id,
2075 accounts: [
2076 {
2077 account_number: account.account_number.to_s,
2078 account_type: account.account_type_description,
2079 },
2080 ],
2081 received_date: "2018-08-29 09:44:45",
2082 received_by: [contact_1.owner.external_id],
2083 check_product_type_code: ["1", "2"],
2084 contribution_type_code: ["1", "2"],
2085 check_amount_in_cents: 150,
2086 deposit_amount_in_cents: 150,
2087 forwarded_to: ["1", "2"],
2088 forwarded_date: "2018-08-30 09:44:45",
2089 },
2090 session: { user_session_id: current_user_session.id }
2091 end
2092 it "creates a new Attachment using first possible next step" do
2093 expect(json['message']).to eq("Document uploaded successfully.")
2094 expect(json['object']['next_step']).to eq("To Rep for Processing")
2095 expect(json['object']['id']).not_to be_nil
2096 expect(::Contacts::ContactDocumentCollection.last.document_next_step_code).to eq "4"
2097 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to eq [[account.account_number.to_s, account.account_type_description.to_s]]
2098 expect(::Contacts::ContactDocument.last.document_name).to eq "hello.png"
2099 expect(::Contacts::ContactDocument.last.content).to eq 'this is a test'
2100 expect(::Contacts::ContactDocumentCollection.last.received_date).to eq "2018-08-29 09:44:45"
2101 expect(::Contacts::ContactDocumentCollection.last.received_by).to eq [contact_1.owner.external_id]
2102 expect(::Contacts::ContactDocumentCollection.last.check_product_type_code).to eq ["1", "2"]
2103 expect(::Contacts::ContactDocumentCollection.last.contribution_type_code).to eq ["1", "2"]
2104 expect(::Contacts::ContactDocumentCollection.last.check_amount_in_cents).to eq "150"
2105 expect(::Contacts::ContactDocumentCollection.last.deposit_amount_in_cents).to eq "150"
2106 expect(::Contacts::ContactDocumentCollection.last.forwarded_to).to eq ["1", "2"]
2107 expect(::Contacts::ContactDocumentCollection.last.original_filename).to eq 'fileOnComputer.png'
2108 end
2109 end
2110
2111 context "when using a document_type with a dependent document_type" do
2112 let(:upload_as) do
2113 create(
2114 :contact_document_type,
2115 realm: realm,
2116 description: "Parent Document Type",
2117 possible_next_steps: ["25"],
2118 possible_errors: ["1", "7", "8", "20", "21", "24"],
2119 possible_status_values: ["0", "17", "20", "75", "85"],
2120 form_type_id: 666,
2121 form_type_ids: [666])
2122 end
2123 let(:bundle_id) { 666 }
2124 let(:forms_api) { AccountOpening::FormsAPI }
2125 let(:forms_api_instance) { instance_double(forms_api) }
2126 let(:stubbed_bundle) { { service_type: 'Non-Advisory', service_sub_type: 'fundVISION' }.to_json }
2127
2128 before do
2129 allow(forms_api).to receive(:new).with(contact).and_return(forms_api_instance)
2130 allow(forms_api_instance).to receive(:show_form).and_return(nil)
2131 allow(forms_api_instance).to receive(:show_bundle).with(bundle_id).and_return(stubbed_bundle)
2132 allow(forms_api_instance).to receive(:update_form_pdf).and_return("Updated successfully")
2133 contact_document_type.update(upload_as: upload_as)
2134
2135 jpost :upload,
2136 params: default_params.merge(bundle_id: bundle_id),
2137 session: { user_session_id: current_user_session.id }
2138 end
2139 it "creates a new Attachment using first possible next step" do
2140 expect(::Contacts::ContactDocumentCollection.last.document_type).to eq(upload_as)
2141 end
2142 end
2143
2144 context "when using form_type without next_step instead of document params" do
2145 before do
2146 expect(AccountOpening::FormsAPI).to receive(:new).and_return(
2147 double(update_form_pdf: "Updated successfully", show_form: nil)
2148 )
2149 jpost :upload,
2150 params: default_params,
2151 session: { user_session_id: current_user_session.id }
2152 end
2153
2154 it "creates a new Attachment using default next step" do
2155 expect(json['message']).to eq("Document uploaded successfully.")
2156 expect(json['object']['next_step']).to eq("OSJ")
2157 expect(json['object']['id']).not_to be_nil
2158 expect(::Contacts::ContactDocumentCollection.last.document_next_step_code).to eq "25"
2159 end
2160 end
2161
2162 context "when using form_type with next_step nil and possible_next_step not nil" do
2163 before do
2164 allow_any_instance_of(::Contacts::DocumentType).to receive(:next_step).and_return(nil)
2165 allow_any_instance_of(::Contacts::DocumentType).to receive(:possible_next_steps).and_return(['0', '25'])
2166 expect(AccountOpening::FormsAPI).to receive(:new).and_return(
2167 double(update_form_pdf: "Updated successfully", show_form: nil)
2168 )
2169 jpost :upload,
2170 params: default_params,
2171 session: { user_session_id: current_user_session.id }
2172 end
2173
2174 it "creates a new Attachment using default possible next_steps" do
2175 expect(json['message']).to eq("Document uploaded successfully.")
2176 expect(json['object']['next_step']).to eq("Preview")
2177 expect(json['object']['id']).not_to be_nil
2178 expect(::Contacts::ContactDocumentCollection.last.document_next_step_code).to eq "0"
2179 end
2180 end
2181
2182 context "when using predefined attributes from a form" do
2183 let!(:document_type) do
2184 create(
2185 :contact_document_type,
2186 form_type_ids: [999],
2187 classic_urn: "DocumentType:cfs:666",
2188 realm: create(:org_realm, :cfs_front_office, code: 'cfs',)
2189 )
2190 end
2191 before do
2192 expect(AccountOpening::FormsAPI).to receive(:new).and_return(
2193 double(
2194 update_form_pdf: "Updated successfully",
2195 show_form: file_fixture('ao/form.json').read
2196 )
2197 )
2198 jpost :upload,
2199 params: default_params.merge(form_id: 73726),
2200 session: { user_session_id: current_user_session.id }
2201 end
2202
2203 it "creates a new document based on predefined values" do
2204 expect(::Contacts::ContactDocumentCollection.last.document_type).to eq(document_type)
2205 expect(json['message']).to eq("Document uploaded successfully.")
2206 expect(json['object']['next_step']).to eq("Muni Supervisor")
2207 expect(json['object']['comments']).to eq('Form comment')
2208 end
2209 end
2210
2211 context "updates account_numbers when docusign uploads a document" do
2212 let(:account) { create(:accounts_account) }
2213 let(:update_form_pdf_response) { double(update_form_pdf: 'Updated successfully') }
2214 let(:bundle_response) { { forms: [{ acct_number: nil }, { acct_number: account.account_number }] }.to_json }
2215 let(:forms_api) { double(update_form_pdf: update_form_pdf_response, show_bundle: bundle_response, show_form: nil) }
2216 let(:params) { default_params.merge(docusign: true) }
2217
2218 before do
2219 allow(AccountOpening::FormsAPI).to receive(:new) { forms_api }
2220 jpost :upload, params: params, session: { user_session_id: current_user_session.id }
2221 end
2222
2223 context 'and the bunlde_id param is present' do
2224 let(:params) { default_params.merge(docusign: true, bundle_id: 12345) }
2225 let(:bundle_response) { { forms: [{ acct_number: nil }, { acct_number: account.account_number }] }.to_json }
2226 let(:forms_api) { double(update_form_pdf: update_form_pdf_response, show_bundle: bundle_response, show_form: nil) }
2227
2228 it 'creates a new Attachment with the right Account number' do
2229 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to match_array([[account.account_number, '0']])
2230 end
2231 end
2232
2233 context 'and the form has accounts in the config' do
2234 let(:accounts_form_config) { create_list(:accounts_account, 3) }
2235 let(:ao_form) do
2236 create(
2237 :ao_form,
2238 json_data: {
2239 config: {
2240 accounts: accounts_form_config.pluck(:account_number).to_a
2241 }
2242 }
2243 )
2244 end
2245 let(:params) { default_params.merge(docusign: true, bundle_id: 12345, form_id: ao_form.id) }
2246 let(:form_response) do
2247 { json_data: ao_form.json_data }.to_json
2248 end
2249 let(:forms_api) { double(update_form_pdf: update_form_pdf_response, show_bundle: bundle_response, show_form: form_response) }
2250
2251 it 'creates a new Attachment with the right Account number' do
2252 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to match_array(
2253 accounts_form_config.take(1).map {|acct| [acct.account_number, '0'] }
2254 )
2255 end
2256 end
2257
2258 context 'and the bunlde_id param is missing' do
2259 it 'creates a new Attachment with the right Account number' do
2260 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to be_nil
2261 end
2262 end
2263 end
2264
2265 context 'updates account_numbers when a document is manually uploaded' do
2266 let(:account) { create(:accounts_account) }
2267 let(:update_form_pdf_response) { double(update_form_pdf: 'Updated successfully') }
2268 let(:forms_api) { double(update_form_pdf: update_form_pdf_response, show_bundle: nil, show_form: nil) }
2269
2270 context 'and the form has an acct_number' do
2271 let(:ao_form) { create(:ao_form, acct_number: account.account_number) }
2272
2273 before do
2274 allow(AccountOpening::FormsAPI).to receive(:new) { forms_api }
2275 jpost :upload,
2276 params: default_params.merge(form_id: ao_form.id),
2277 session: { user_session_id: current_user_session.id }
2278 end
2279
2280 it 'creates a new Attachment with the right Account number' do
2281 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to match_array([[account.account_number, '0']])
2282 end
2283 end
2284
2285 context 'and the form does not have an acct_number' do
2286 let(:ao_form) { create(:ao_form, acct_number: nil) }
2287 let(:ao_form2) { create(:ao_form, acct_number: account.account_number) }
2288 let(:bundle_response) { { forms: [{ acct_number: nil }, { acct_number: account.account_number }] }.to_json }
2289 let(:forms_api) do
2290 double(update_form_pdf: update_form_pdf_response, show_bundle: bundle_response, show_form: nil)
2291 end
2292
2293 before do
2294 allow(AccountOpening::FormsAPI).to receive(:new) { forms_api }
2295 jpost :upload,
2296 params: default_params.merge(form_id: ao_form.id),
2297 session: { user_session_id: current_user_session.id }
2298 end
2299
2300 it 'creates a new Attachment with the right Account number' do
2301 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to match_array([[account.account_number, '0']])
2302 end
2303 end
2304
2305 context 'and Forms Api fails' do
2306 let(:ao_form) { create(:ao_form, acct_number: nil) }
2307
2308 before do
2309 allow(AccountOpening::FormsAPI).to receive(:new) { forms_api }
2310 jpost :upload,
2311 params: default_params.merge(form_id: ao_form.id),
2312 session: { user_session_id: current_user_session.id }
2313 end
2314
2315 it 'creates a new Attachment without Account number' do
2316 expect(::Contacts::ContactDocumentCollection.last.account_numbers).to be_nil
2317 end
2318 end
2319 end
2320
2321 context 'updates contact tasks' do
2322 let(:account) { create(:accounts_account) }
2323 let(:update_form_pdf_response) { double(update_form_pdf: 'Updated successfully') }
2324 let(:forms_api) { double(update_form_pdf: update_form_pdf_response, show_bundle: nil, show_form: nil) }
2325
2326 before do
2327 allow(AccountOpening::FormsAPI).to receive(:new) { forms_api }
2328 jpost :upload, params: params, session: { user_session_id: current_user_session.id }
2329 end
2330
2331 context 'when it is required create a task' do
2332 let(:form_type_id) { '138' }
2333
2334 context 'and the document is uploaded with Docusign' do
2335 let(:params) { default_params.merge(docusign: true, form_type_id: form_type_id) }
2336
2337 it 'should create a contact task' do
2338 expect(::Contacts::ContactDocumentCollection.last.contact.tasks.count).to eq(1)
2339 end
2340 end
2341
2342 context 'and the document is uploaded by attaching a file' do
2343 let(:params) { default_params.merge(form_type_id: form_type_id) }
2344
2345 it 'should create a contact task' do
2346 expect(::Contacts::ContactDocumentCollection.last.contact.tasks.count).to eq(1)
2347 end
2348 end
2349 end
2350
2351 context 'when it is not required create a task' do
2352 context 'and the document is uploaded with Docusign' do
2353 let(:params) { default_params.merge(docusign: true) }
2354
2355 it 'should create a contact task' do
2356 expect(::Contacts::ContactDocumentCollection.last.contact.tasks.count).to eq(0)
2357 end
2358 end
2359
2360 context 'and the document is uploaded by attaching a file' do
2361 let(:params) { default_params }
2362
2363 it 'should create a contact task' do
2364 expect(::Contacts::ContactDocumentCollection.last.contact.tasks.count).to eq(0)
2365 end
2366 end
2367 end
2368 end
2369 end
2370
2371 describe '#download' do
2372 context "with no session" do
2373 before { get :download, params: { id: document.contact_document_collection.external_id } }
2374 it_behaves_like "an unauthorized api request"
2375 end
2376
2377 context "when logged in" do
2378 context "with valid attachment id" do
2379 before { get :download, params: { id: document.contact_document_collection.external_id }, session: { user_session_id: current_user_session.id } }
2380 it "downloads the attachment" do
2381 expect(response.headers['Content-Type']).to match 'image/png'
2382 expect(response.body).to match 'hello world'
2383 end
2384 end
2385
2386 context 'for multiple jpg attachment' do
2387 before do
2388 4.times do
2389 create(:contact_document,
2390 document_name: "firework.jpg",
2391 contact_document_collection: cdc_grid_only) end
2392 end
2393
2394 it "downloads the combined pdf attachment when document id is not passed" do
2395 get :download, params: { id: cdc_grid_only.external_id }, session: { user_session_id: current_user_session.id }
2396 expect(response.headers['Content-Type']).to match 'application/pdf'
2397 end
2398
2399 it "downloads individual document as image when document id is passed" do
2400 get :download, params: {
2401 id: cdc_grid_only.external_id,
2402 document_id: cdc_grid_only.contact_documents.first.id,
2403 },
2404 session: { user_session_id: current_user_session.id }
2405 expect(response.headers['Content-Type']).to match 'image/jpeg'
2406 end
2407 end
2408 end
2409 end
2410
2411 describe "POST #move" do
2412 context "with no session" do
2413 before { jpost :move, params: { id: cdc_grid_only.external_id, contact_id: contact.external_id } }
2414 it_behaves_like "an unauthorized api request"
2415 end
2416
2417 context "when logged in" do
2418 context "without scanner" do
2419 it "moves document to other contact" do
2420 expect(cdc_move_contact.contact.external_id).to eq move_from_contact.external_id
2421 jpost :move, params: { id: cdc_move_contact.external_id, contact_id: move_to_contact.external_id }, session: { user_session_id: current_user_session.id }
2422 cdc_move_contact.reload
2423 expect(cdc_move_contact.contact.external_id).to eq move_to_contact.external_id
2424 end
2425 end
2426 context "with scanner" do
2427 it "moves document to other contact" do
2428 expect(cdc_move_contact_with_scanner.contact.external_id).to eq move_from_contact.external_id
2429 jpost :move, params: { id: cdc_move_contact_with_scanner.external_id, contact_id: move_to_contact.external_id }, session: { user_session_id: current_user_session.id }
2430 cdc_move_contact_with_scanner.reload
2431 expect(cdc_move_contact_with_scanner.contact.external_id).to eq move_to_contact.external_id
2432 expect(cdc_move_contact_with_scanner.scanner.contact.external_id).to eq move_to_contact.external_id
2433 end
2434 end
2435 end
2436 end
2437
2438 describe '#status' do
2439 let!(:mf_doc) { create(:contact_document_collection, contact: contact, document_type: contact_document_type, document_next_step_code: "10", realm: contact.realm, comments: "Mutual Fund Certificate") }
2440 context "with no session" do
2441 before { get :status, params: { id: document.contact_document_collection.external_id, action_name: 'accept' } }
2442 it_behaves_like "an unauthorized api request"
2443 end
2444
2445 context 'when logged in' do
2446 context 'approve sanity check' do
2447 before { get :status, params: { id: mf_doc.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id } }
2448 it_behaves_like "a successful api request"
2449
2450 it 'should have not have nil result' do
2451 expect(json['status']).not_to be_nil
2452 expect(json['next_step']).not_to be_nil
2453 end
2454 end
2455
2456 context 'approve is clicked' do
2457 context 'next_step rules' do
2458 context 'document\'s document type possible_next_steps includes 9 and current_next_step is between 50 and 74' do
2459 let(:document_type_sample) { create(:contact_document_type, description: "Document with 9 as possible next step", possible_next_steps: ["5", "10", "9", "15", "18", "55", "57", "60"]) }
2460 let(:accept_next_step_rule_1_document) { create(:contact_document_collection, document_next_step_code: '70', document_type: document_type_sample) }
2461 it 'should return next_step as 9' do
2462 get :status, params: { id: accept_next_step_rule_1_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2463 expect(json['next_step']).to eq('9')
2464 expect(json['status']).to eq('27')
2465 end
2466 end
2467
2468 context 'current next_step is between 0 to 14' do
2469 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["15", "18", "55", "57", "60"], possible_status_values: ['0','1','3','9','15','17','20','25','27','30','35','40','41','45','50','55','60']) }
2470 let(:accept_next_step_rule_2_document) { create(:contact_document_collection, document_next_step_code: '10', document_type: document_type_sample) }
2471 it 'should not change current next_step' do
2472 get :status, params: { id: accept_next_step_rule_2_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2473 expect(json['next_step']).to eq( '10')
2474 expect(json['status']).to eq( '35')
2475 end
2476 end
2477
2478 context 'current next_step is greater than 14' do
2479 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["40", "50", "70", "75"], possible_status_values: ['0','1','110','115']) }
2480 let(:accept_next_step_rule_3_document) { create(:contact_document_collection, document_next_step_code: '40', document_type: document_type_sample) }
2481 it 'should not change current next_step' do
2482 get :status, params: { id: accept_next_step_rule_3_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2483 expect(json['next_step']).to eq( '75')
2484 expect(json['status']).to eq( '115')
2485 end
2486 end
2487
2488 context 'none of the rules apply' do
2489 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["40", "50", "70"], possible_status_values: ['0','1','110','115']) }
2490 let(:accept_next_step_rule_4_document) { create(:contact_document_collection, document_next_step_code: '70', document_type: document_type_sample) }
2491 it 'should set next_step to current_step' do
2492 get :status, params: { id: accept_next_step_rule_4_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2493 expect(json['next_step']).to eq( '70')
2494 expect(json['status']).to eq( '1')
2495 end
2496 end
2497 end
2498
2499 context 'status rules' do
2500 context 'document has multiple choices for accept status and current status is one of them' do
2501 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["5", "10", "9", "15", "18", "55", "57", "60", "75"]) }
2502 let(:accept_status_rule_1_document) { create(:contact_document_collection, document_next_step_code: '15', document_status_level_code: '45', document_type: document_type_sample) }
2503 it 'should return the next status in the list' do
2504 get :status, params: { id: accept_status_rule_1_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2505 expect(json['next_step']).to eq('75')
2506 expect(json['status']).to eq('55')
2507 end
2508 end
2509
2510 context 'current next_step is 25' do
2511 context 'document type has allowed status value 81' do
2512 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "55", "60"], possible_status_values: ["1", "4", "8", "74", "81"]) }
2513 let(:accept_status_rule_2_document) { create(:contact_document_collection, document_next_step_code: '25', document_status_level_code: '8', document_type: document_type_sample) }
2514 it 'should return 81 as status' do
2515 get :status, params: { id: accept_status_rule_2_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2516 expect(json['next_step']).to eq('27')
2517 expect(json['status']).to eq('81')
2518 end
2519 end
2520
2521 context 'document type doesn\'t has allowed status value 85' do
2522 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "55", "60"], possible_status_values: ["0", "75", "80", "87", "88"]) }
2523 let(:accept_status_rule_3_document) { create(:contact_document_collection, document_next_step_code: '25', document_status_level_code: '75', document_type: document_type_sample) }
2524 it 'should return 80 as status' do
2525 get :status, params: { id: accept_status_rule_3_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2526 expect(json['next_step']).to eq('27')
2527 expect(json['status']).to eq('80')
2528 end
2529 end
2530
2531 context 'document type doesn\'t has allowed status value 80' do
2532 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "55", "60"], possible_status_values: ["0", "21", "22", "23", "75", "85"]) }
2533 let(:accept_status_rule_4_document) { create(:contact_document_collection, document_next_step_code: '25', document_status_level_code: '21', document_type: document_type_sample) }
2534 it 'should return 85 as status' do
2535 get :status, params: { id: accept_status_rule_4_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2536 expect(json['next_step']).to eq('27')
2537 expect(json['status']).to eq('85')
2538 end
2539 end
2540
2541 context 'contact\'s owner is current_user' do
2542 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "55", "60"], possible_status_values: ["1", "9", "21", "22", "23", "75", "80", "85"]) }
2543 let(:accept_status_rule_5_document) { create(:contact_document_collection, contact: contact, document_next_step_code: '25', document_status_level_code: '21', document_type: document_type_sample) }
2544 it 'should return 80 as status' do
2545 get :status, params: { id: accept_status_rule_5_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2546 expect(json['next_step']).to eq('27')
2547 expect(json['status']).to eq('80')
2548 end
2549 end
2550
2551 context 'none of the above case satisfies' do
2552 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "55", "60"], possible_status_values: ["1", "9", "21", "22", "23", "75", "80", "85"]) }
2553 let(:accept_status_rule_6_document) { create(:contact_document_collection, contact: create(:contacts_contact, owner: create(:org_classic_user)), document_next_step_code: '25', document_status_level_code: '21', document_type: document_type_sample) }
2554 it 'should return 85 as status' do
2555 get :status, params: { id: accept_status_rule_6_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2556 expect(json['next_step']).to eq('27')
2557 expect(json['status']).to eq('85')
2558 end
2559 end
2560 end
2561
2562 context 'document\'s document type possible_next_steps includes 9 and current_next_step is between 50 and 74' do
2563 let(:document_type_sample) { create(:contact_document_type, description: "Document with 9 as possible next step", possible_next_steps: ["5", "10", "9", "15", "18", "55", "57", "60"]) }
2564 let(:accept_status_rule_7_document) { create(:contact_document_collection, document_next_step_code: '70', document_type: document_type_sample) }
2565 it 'should return 27 as status' do
2566 get :status, params: { id: accept_status_rule_7_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2567 expect(json['next_step']).to eq('9')
2568 expect(json['status']).to eq('27')
2569 end
2570 end
2571
2572 context 'none of the rules apply' do
2573 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["40", "50", "70"], possible_status_values: ['0','1','110','115']) }
2574 let(:accept_status_rule_8_document) { create(:contact_document_collection, document_next_step_code: '70', document_type: document_type_sample) }
2575 it 'should not change current status' do
2576 get :status, params: { id: accept_status_rule_8_document.external_id, action_name: 'accept' }, session: { user_session_id: current_user_session.id }
2577 expect(json['next_step']).to eq('70')
2578 expect(json['status']).to eq('1')
2579 end
2580 end
2581 end
2582 end
2583
2584 context 'reject sanity check' do
2585 before { get :status, params: { id: mf_doc.external_id, action_name: 'reject' }, session: { user_session_id: current_user_session.id } }
2586 it_behaves_like "a successful api request"
2587
2588 it 'should have not have nil result' do
2589 expect(json['status']).not_to be_nil
2590 expect(json['next_step']).not_to be_nil
2591 end
2592 end
2593
2594 context 'reject is clicked' do
2595 context 'next_step rules' do
2596 context 'document current_step is beyond 25 and document possible_next_steps include 25' do
2597 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["25", "27", "28", "55"], possible_status_values: ["75", "85", "87", "88"]) }
2598 let(:reject_next_step_rule_1_document) { create(:contact_document_collection, document_next_step_code: '27', document_type: document_type_sample) }
2599 it 'should set next_step to 65' do
2600 get :status, params: { id: reject_next_step_rule_1_document.external_id, action_name: 'reject' }, session: { user_session_id: current_user_session.id }
2601 expect(json['next_step']).to eq('65')
2602 expect(json['status']).to eq('1')
2603 end
2604 end
2605
2606 context 'document current_step is below 25 or document possible_next_steps doesn\'t include 25' do
2607 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["5", "18", "55", "57"], possible_status_values: ["15", "17", "20", "50", "55", "60"]) }
2608 let(:reject_next_step_rule_2_document) { create(:contact_document_collection, document_next_step_code: '5', document_type: document_type_sample) }
2609 it 'should set next_step to 55' do
2610 get :status, params: { id: reject_next_step_rule_2_document.external_id, action_name: 'reject' }, session: { user_session_id: current_user_session.id }
2611 expect(json['next_step']).to eq('55')
2612 expect(json['status']).to eq('15')
2613 end
2614 end
2615 end
2616
2617 context 'status rules' do
2618 context 'document current_step is 25 or document possible status value include 74' do
2619 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["0", "25", "55"], possible_status_values: ["1", "4", "8", "74", "81"]) }
2620 let(:reject_status_rule_1_document) { create(:contact_document_collection, document_next_step_code: '25', document_type: document_type_sample) }
2621 it 'should set status to 74' do
2622 get :status, params: { id: reject_status_rule_1_document.external_id, action_name: 'reject' }, session: { user_session_id: current_user_session.id }
2623 expect(json['next_step']).to eq('55')
2624 expect(json['status']).to eq('74')
2625 end
2626 end
2627
2628 context 'document current_step is not 25 and has multiple choices for reject status' do
2629 let(:document_type_sample) { create(:contact_document_type, possible_next_steps: ["5", "10", "9", "15", "18", "55", "57", "60"], possible_status_values: ["3", "9", "15", "17", "20", "25", "27", "30", "35", "40", "41", "45", "50", "55", "60"]) }
2630 let(:reject_status_rule_2_document) { create(:contact_document_collection, document_next_step_code: '15', document_type: document_type_sample) }
2631 it 'should choose highest numbered status below user\'s status level' do
2632 get :status, params: { id: reject_status_rule_2_document.external_id, action_name: 'reject' }, session: { user_session_id: current_user_session.id }
2633 expect(json['next_step']).to eq('55')
2634 expect(json['status']).to eq('40')
2635 end
2636 end
2637 end
2638 end
2639
2640 context 'wrong parameter is sent for action_name' do
2641 before { get :status, params: { id: mf_doc.external_id, action_name: 'gibberish' }, session: { user_session_id: current_user_session.id } }
2642 it 'should return proper message' do
2643 expect(json["message"]).to match(/Please send only 'accept' or 'reject' as parameter/)
2644 end
2645 end
2646 end
2647 end
2648
2649 describe "DELETE #remove_my_scan" do
2650 context "with no session" do
2651 before { delete :remove_my_scan, params: { id: document.contact_document_collection.external_id } }
2652 it_behaves_like "an unauthorized api request"
2653 end
2654
2655 context 'when logged in' do
2656 context "for invalid document id" do
2657 before { delete :remove_my_scan, params: { id: "invalid_id" }, session: { user_session_id: current_user_session.id } }
2658 it_behaves_like "an invalid api request", :not_found
2659 end
2660
2661 context "for valid document id" do
2662 before do
2663 @doc1 = create(:contact_document_collection, contact_id: contact.id, scanner: create(:scanner, contact_id: contact.id))
2664 @doc2 = create(:contact_document_collection, scanner: create(:scanner, user_id: user.id))
2665 delete :remove_my_scan, params: { id: @doc1.external_id }, session: { user_session_id: current_user_session.id }
2666 end
2667
2668 it_behaves_like "a successful api request"
2669 end
2670 end
2671 end
2672end
2673