finapps 5.0.30 → 5.0.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yaml +37 -0
  3. data/.rubocop.yml +134 -61
  4. data/.rubocop_todo.yml +29 -0
  5. data/.tmuxinator.yml +1 -0
  6. data/.travis.yml +3 -1
  7. data/README.md +1 -0
  8. data/RELEASES.md +29 -0
  9. data/finapps.gemspec +4 -4
  10. data/lib/finapps/rest/alert_definitions.rb +1 -1
  11. data/lib/finapps/rest/alert_occurrences.rb +1 -1
  12. data/lib/finapps/rest/client.rb +6 -5
  13. data/lib/finapps/rest/consumers.rb +22 -6
  14. data/lib/finapps/rest/consumers_portfolios.rb +1 -1
  15. data/lib/finapps/rest/documents_orders.rb +43 -26
  16. data/lib/finapps/rest/operators.rb +5 -5
  17. data/lib/finapps/rest/operators_password_resets.rb +1 -1
  18. data/lib/finapps/rest/order_assignments.rb +1 -1
  19. data/lib/finapps/rest/order_reports.rb +1 -1
  20. data/lib/finapps/rest/orders.rb +33 -22
  21. data/lib/finapps/rest/plaid/plaid_consumer_institutions.rb +1 -1
  22. data/lib/finapps/rest/portfolio_reports.rb +1 -1
  23. data/lib/finapps/rest/portfolios.rb +1 -1
  24. data/lib/finapps/rest/portfolios_available_consumers.rb +1 -1
  25. data/lib/finapps/rest/portfolios_consumers.rb +1 -1
  26. data/lib/finapps/rest/sessions.rb +11 -9
  27. data/lib/finapps/rest/signed_documents_downloads.rb +3 -1
  28. data/lib/finapps/utils/query_builder.rb +13 -4
  29. data/lib/finapps/version.rb +1 -1
  30. data/spec/rest/alert_definitions_spec.rb +10 -6
  31. data/spec/rest/alert_occurrences_spec.rb +6 -1
  32. data/spec/rest/api_request.rb +1 -0
  33. data/spec/rest/client_spec.rb +33 -41
  34. data/spec/rest/consumers_portfolios_spec.rb +7 -2
  35. data/spec/rest/consumers_spec.rb +240 -192
  36. data/spec/rest/documents_orders_notifications_spec.rb +4 -2
  37. data/spec/rest/documents_orders_spec.rb +94 -17
  38. data/spec/rest/esign_templates_spec.rb +2 -1
  39. data/spec/rest/operators_password_resets_spec.rb +50 -52
  40. data/spec/rest/operators_spec.rb +181 -172
  41. data/spec/rest/order_assignments_spec.rb +6 -1
  42. data/spec/rest/order_notifications_spec.rb +4 -2
  43. data/spec/rest/order_refreshes_spec.rb +8 -5
  44. data/spec/rest/order_reports_spec.rb +21 -15
  45. data/spec/rest/order_statuses_spec.rb +14 -10
  46. data/spec/rest/order_tokens_spec.rb +37 -30
  47. data/spec/rest/orders_spec.rb +121 -73
  48. data/spec/rest/password_resets_spec.rb +46 -36
  49. data/spec/rest/plaid/plaid_account_permissions_spec.rb +5 -4
  50. data/spec/rest/plaid/plaid_accounts_spec.rb +9 -4
  51. data/spec/rest/plaid/plaid_consumer_institutions_spec.rb +11 -11
  52. data/spec/rest/plaid/plaid_institution_logos_spec.rb +1 -1
  53. data/spec/rest/plaid/plaid_webhooks_spec.rb +3 -1
  54. data/spec/rest/portfolio_reports_spec.rb +7 -2
  55. data/spec/rest/portfolios_alerts_spec.rb +9 -4
  56. data/spec/rest/portfolios_available_consumers_spec.rb +7 -2
  57. data/spec/rest/portfolios_consumers_spec.rb +15 -4
  58. data/spec/rest/portfolios_spec.rb +20 -17
  59. data/spec/rest/products_spec.rb +17 -14
  60. data/spec/rest/sessions_spec.rb +63 -58
  61. data/spec/rest/signed_documents_downloads_spec.rb +10 -6
  62. data/spec/rest/tenant_app_settings_spec.rb +9 -3
  63. data/spec/rest/tenant_settings_spec.rb +9 -3
  64. data/spec/rest/verix/verix_documents_spec.rb +15 -22
  65. data/spec/rest/verix/verix_metadata_spec.rb +1 -1
  66. data/spec/rest/verix/verix_pdf_documents_spec.rb +14 -19
  67. data/spec/rest/verix/verix_records_spec.rb +31 -10
  68. data/spec/rest/version_spec.rb +6 -4
  69. data/spec/spec_helper.rb +2 -2
  70. data/spec/support/fake_api.rb +9 -3
  71. data/spec/support/fixtures/documents_orders_none.json +6 -0
  72. data/spec/utils/query_builder_spec.rb +40 -14
  73. metadata +20 -17
@@ -6,10 +6,11 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
6
6
  include SpecHelpers::Client
7
7
 
8
8
  describe '#create' do
9
- subject(:notifications) { FinApps::REST::DocumentsOrdersNotifications.new(client) }
9
+ subject(:notifications) { described_class.new(client) }
10
10
 
11
11
  context 'when missing id' do
12
12
  let(:create) { subject.create(nil) }
13
+
13
14
  it('returns missing argument error') do
14
15
  expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
15
16
  end
@@ -22,12 +23,13 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
22
23
 
23
24
  it { expect { create }.not_to raise_error }
24
25
  it('results is nil') { expect(results).to be_nil }
26
+
25
27
  it('error messages array is populated') do
26
28
  expect(error_messages.first.downcase).to eq('order id is invalid')
27
29
  end
28
30
  end
29
31
 
30
- context 'for valid id' do
32
+ context 'with valid id' do
31
33
  let(:create) { subject.create(:valid_id) }
32
34
  let(:results) { create[RESULTS] }
33
35
  let(:error_messages) { create[ERROR_MESSAGES] }
@@ -15,7 +15,8 @@ RSpec.describe FinApps::REST::DocumentsOrders do
15
15
  end
16
16
 
17
17
  describe '#list' do
18
- subject(:list) { FinApps::REST::DocumentsOrders.new(client).list(params) }
18
+ subject(:list) { described_class.new(client).list(params) }
19
+
19
20
  let(:results) { list[0] }
20
21
  let(:error_messages) { list[1] }
21
22
 
@@ -31,12 +32,14 @@ RSpec.describe FinApps::REST::DocumentsOrders do
31
32
  end
32
33
 
33
34
  context 'without searchTerm' do
34
- let(:params) { { "searchTerm": nil, "page": 2 } }
35
+ let(:params) { {searchTerm: nil, page: 2} }
36
+
35
37
  it_behaves_like 'an API request'
36
38
  it_behaves_like 'a successful request'
37
39
  it 'performs a get and returns the response' do
38
40
  expect(results).to have_key(:records)
39
41
  end
42
+
40
43
  it 'builds query and sends proper request' do
41
44
  list
42
45
  url = "#{versioned_api_path}/documents/orders?page=2"
@@ -50,26 +53,72 @@ RSpec.describe FinApps::REST::DocumentsOrders do
50
53
  it 'performs a get and returns the response' do
51
54
  expect(results).to have_key(:records)
52
55
  end
56
+
53
57
  it 'builds query and sends proper request' do
54
58
  list
55
59
  url =
56
- "#{versioned_api_path}/documents/orders?filter=%7B%22$or%22:%5B%7B%22applicant.email%22:"\
57
- '%22term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,%7B%22applicant.last_name%22:'\
58
- '%22term%22%7D,%7B%22reference_no%22:%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,'\
59
- '%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=tag '
60
+ "#{versioned_api_path}/documents/orders?"\
61
+ 'filter=%7B%22$or%22:%5B%7B%22applicant.email%22:'\
62
+ '%22term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,'\
63
+ '%7B%22applicant.last_name%22:'\
64
+ '%22term%22%7D,%7B%22reference_no%22:%7B%22$regex%22:%22%5Eterm%22,'\
65
+ '%22$options%22:%22i%22%7D%7D%5D,'\
66
+ '%22consumer_id%22:%22valid_consumer_id%22%7D&'\
67
+ 'page=2&requested=25&sort=tag '
60
68
 
61
69
  expect(WebMock).to have_requested(:get, url)
62
70
  end
71
+
72
+ context 'with search term containing spaces' do
73
+ let(:params) { {"searchTerm": 'Blue Jay', "page": 2} }
74
+
75
+ it 'builds query and sends proper request' do
76
+ list
77
+ url =
78
+ "#{versioned_api_path}/documents/orders?"\
79
+ 'filter=%7B%22$or%22:%5B%7B%22applicant.email%22:'\
80
+ '%22Blue%20Jay%22%7D,'\
81
+ '%7B%22applicant.first_name%22:%22Blue%20Jay%22%7D,'\
82
+ '%7B%22applicant.last_name%22:'\
83
+ '%22Blue%20Jay%22%7D,'\
84
+ '%7B%22reference_no%22:%7B%22$regex%22:%22%5EBlue%20Jay%22,'\
85
+ '%22$options%22:'\
86
+ '%22i%22%7D%7D,%7B%22applicant.first_name%22:%22Blue%22%7D,'\
87
+ '%7B%22applicant.last_name%22:%22Blue%22%7D,'\
88
+ '%7B%22applicant.first_name%22:%22Jay%22%7D,'\
89
+ '%7B%22applicant.last_name%22:%22Jay%22%7D%5D%7D&page=2'
90
+
91
+ expect(WebMock).to have_requested(:get, url)
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'when filtering by open status ordes' do
97
+ let(:params) { {status: 1} }
98
+
99
+ it_behaves_like 'an API request'
100
+ it_behaves_like 'a successful request'
101
+ it { expect(list.first[:records]).not_to be_empty }
102
+ end
103
+
104
+ context 'when filtering by closed status ordes' do
105
+ let(:params) { {status: 2, searchTerm: 'term'} }
106
+
107
+ it_behaves_like 'an API request'
108
+ it_behaves_like 'a successful request'
109
+ it { expect(results[:records]).to be_empty }
63
110
  end
64
111
  end
65
112
 
66
113
  context 'with invalid params' do
67
114
  let(:params) { ['invalid array'] }
115
+
68
116
  it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
69
117
  end
70
118
 
71
119
  context 'with missing params' do
72
120
  let(:params) { nil }
121
+
73
122
  it_behaves_like 'an API request'
74
123
  it_behaves_like 'a successful request'
75
124
  it('performs a get and returns the response') do
@@ -79,15 +128,18 @@ RSpec.describe FinApps::REST::DocumentsOrders do
79
128
  end
80
129
 
81
130
  describe '#show' do
82
- subject(:show) { FinApps::REST::DocumentsOrders.new(client).show(id) }
131
+ subject(:show) { described_class.new(client).show(id) }
132
+
83
133
  let(:results) { show[0] }
84
134
  let(:error_messages) { show[1] }
85
135
 
86
136
  context 'with valid id' do
87
137
  let(:id) { :valid_order_id }
138
+
88
139
  it_behaves_like 'an API request'
89
140
  it_behaves_like 'a successful request'
90
141
  it('results is a Hash') { expect(results).to be_a(Hash) }
142
+
91
143
  it('performs a get and returns the response') do
92
144
  expect(results).to have_key(:order_id)
93
145
  end
@@ -95,18 +147,21 @@ RSpec.describe FinApps::REST::DocumentsOrders do
95
147
 
96
148
  context 'with invalid id' do
97
149
  let(:id) { :invalid_order_id }
150
+
98
151
  it { expect(results).to be_nil }
99
- it { expect(error_messages).to_not be_empty }
152
+ it { expect(error_messages).not_to be_empty }
100
153
  end
101
154
 
102
155
  context 'when missing id' do
103
156
  let(:id) { nil }
157
+
104
158
  it_behaves_like 'a request that raises an error'
105
159
  end
106
160
  end
107
161
 
108
162
  describe '#create' do
109
- subject(:create) { FinApps::REST::DocumentsOrders.new(client).create(params) }
163
+ subject(:create) { described_class.new(client).create(params) }
164
+
110
165
  let(:results) { create[0] }
111
166
  let(:error_messages) { create[1] }
112
167
 
@@ -126,9 +181,11 @@ RSpec.describe FinApps::REST::DocumentsOrders do
126
181
  "tag": 'new'
127
182
  }
128
183
  end
184
+
129
185
  it_behaves_like 'an API request'
130
186
  it_behaves_like 'a successful request'
131
187
  it('results is a Hash') { expect(results).to be_a(Hash) }
188
+
132
189
  it('performs a post and returns the response') do
133
190
  expect(results).to have_key(:order_id)
134
191
  end
@@ -146,8 +203,10 @@ RSpec.describe FinApps::REST::DocumentsOrders do
146
203
  "reference_no": 'REFNO'
147
204
  }
148
205
  end
206
+
149
207
  it { expect { create }.not_to raise_error }
150
208
  it('results is nil') { expect(results).to be_nil }
209
+
151
210
  it('error messages array is populated') do
152
211
  expect(error_messages.first.downcase).to eq('invalid request body')
153
212
  end
@@ -155,12 +214,14 @@ RSpec.describe FinApps::REST::DocumentsOrders do
155
214
 
156
215
  context 'with missing params' do
157
216
  let(:params) { nil }
217
+
158
218
  it_behaves_like 'a request that raises an error'
159
219
  end
160
220
  end
161
221
 
162
222
  describe '#update' do
163
- subject(:update) { FinApps::REST::DocumentsOrders.new(client).update(id, params) }
223
+ subject(:update) { described_class.new(client).update(id, params) }
224
+
164
225
  let(:params) { {} }
165
226
  let(:results) { update[0] }
166
227
  let(:error_messages) { update[1] }
@@ -169,16 +230,19 @@ RSpec.describe FinApps::REST::DocumentsOrders do
169
230
  let(:id) { :valid_order_id }
170
231
 
171
232
  context 'with valid params' do
172
- let(:params) { { "tag": 'pending' } }
233
+ let(:params) { {"tag": 'pending'} }
234
+
173
235
  it_behaves_like 'an API request'
174
236
  it_behaves_like 'a successful request'
175
237
  it('results is nil') { expect(results).to be_nil }
176
238
  end
177
239
 
178
240
  context 'with invalid params' do
179
- let(:params) { { "tag": 'invalid' } }
241
+ let(:params) { {"tag": 'invalid'} }
242
+
180
243
  it_behaves_like 'an API request'
181
244
  it('results is nil') { expect(results).to be_nil }
245
+
182
246
  it('error messages array is populated') do
183
247
  expect(error_messages.first.downcase).to eq('invalid request body')
184
248
  end
@@ -187,9 +251,11 @@ RSpec.describe FinApps::REST::DocumentsOrders do
187
251
 
188
252
  context 'with invalid id' do
189
253
  let(:id) { :invalid_order_id }
190
- let(:params) { { applicant: { first_name: 'Quasar' } } }
254
+ let(:params) { {applicant: {first_name: 'Quasar'}} }
255
+
191
256
  it_behaves_like 'an API request'
192
257
  it('results is nil') { expect(results).to be_nil }
258
+
193
259
  it('error messages array is populated') do
194
260
  expect(error_messages.first.downcase).to eq(
195
261
  'order id is invalid'
@@ -199,17 +265,20 @@ RSpec.describe FinApps::REST::DocumentsOrders do
199
265
 
200
266
  context 'with missing id' do
201
267
  let(:id) { nil }
268
+
202
269
  it_behaves_like 'a request that raises an error'
203
270
  end
204
271
  end
205
272
 
206
273
  describe '#destroy' do
207
- subject(:destroy) { FinApps::REST::DocumentsOrders.new(client).destroy(id) }
274
+ subject(:destroy) { described_class.new(client).destroy(id) }
275
+
208
276
  let(:results) { destroy[0] }
209
277
  let(:error_messages) { destroy[1] }
210
278
 
211
279
  context 'with valid id' do
212
280
  let(:id) { :valid_order_id }
281
+
213
282
  it_behaves_like 'an API request'
214
283
  it_behaves_like 'a successful request'
215
284
  it('results is nil') { expect(results).to be_nil }
@@ -217,8 +286,10 @@ RSpec.describe FinApps::REST::DocumentsOrders do
217
286
 
218
287
  context 'with invalid id' do
219
288
  let(:id) { :invalid_order_id }
289
+
220
290
  it_behaves_like 'an API request'
221
291
  it('results is nil') { expect(results).to be_nil }
292
+
222
293
  it('error messages array is populated') do
223
294
  expect(error_messages.first.downcase).to eq('resource not found')
224
295
  end
@@ -226,12 +297,14 @@ RSpec.describe FinApps::REST::DocumentsOrders do
226
297
 
227
298
  context 'with missing id' do
228
299
  let(:id) { nil }
300
+
229
301
  it_behaves_like 'a request that raises an error'
230
302
  end
231
303
  end
232
304
 
233
305
  describe '#show_signing_url' do
234
- subject(:sign_url) { FinApps::REST::DocumentsOrders.new(client).show_signing_url(order_id, signature_id) }
306
+ subject(:sign_url) { described_class.new(client).show_signing_url(order_id, signature_id) }
307
+
235
308
  let(:results) { sign_url[0] }
236
309
  let(:error_messages) { sign_url[1] }
237
310
  let(:order_id) { :valid_order_id }
@@ -248,24 +321,28 @@ RSpec.describe FinApps::REST::DocumentsOrders do
248
321
 
249
322
  context 'with invalid signature id' do
250
323
  let(:signature_id) { :invalid_signature_id }
324
+
251
325
  it { expect(results).to be_nil }
252
- it { expect(error_messages).to_not be_empty }
326
+ it { expect(error_messages).not_to be_empty }
253
327
  end
254
328
  end
255
329
 
256
330
  context 'with invalid order id' do
257
331
  let(:order_id) { :invalid_order_id }
332
+
258
333
  it { expect(results).to be_nil }
259
- it { expect(error_messages).to_not be_empty }
334
+ it { expect(error_messages).not_to be_empty }
260
335
  end
261
336
 
262
337
  context 'with missing order id' do
263
338
  let(:order_id) { nil }
339
+
264
340
  it_behaves_like 'a request that raises an error'
265
341
  end
266
342
 
267
343
  context 'with missing signature id' do
268
344
  let(:signature_id) { nil }
345
+
269
346
  it_behaves_like 'a request that raises an error'
270
347
  end
271
348
  end
@@ -5,7 +5,8 @@ require 'rest/api_request'
5
5
 
6
6
  RSpec.describe FinApps::REST::EsignTemplates do
7
7
  include SpecHelpers::Client
8
- subject(:templates) { FinApps::REST::EsignTemplates.new(client).list }
8
+ subject(:templates) { described_class.new(client).list }
9
+
9
10
  let(:results) { templates[0] }
10
11
 
11
12
  describe '#list' do
@@ -2,79 +2,77 @@
2
2
 
3
3
  require 'spec_helpers/client'
4
4
 
5
- RSpec.describe FinApps::REST::OperatorsPasswordResets,
6
- 'initialized with valid FinApps::Client object' do
7
- include SpecHelpers::Client
8
- subject(:operators_password_resets) do
9
- FinApps::REST::OperatorsPasswordResets.new(client)
10
- end
5
+ RSpec.describe FinApps::REST::OperatorsPasswordResets do
6
+ context 'when initialized with valid FinApps::Client object' do
7
+ include SpecHelpers::Client
8
+ subject(:operators_password_resets) do
9
+ described_class.new(client)
10
+ end
11
11
 
12
- describe '#create' do
13
- let(:results) { create[0] }
14
- let(:error_messages) { create[1] }
12
+ describe '#create' do
13
+ let(:results) { create[0] }
14
+ let(:error_messages) { create[1] }
15
15
 
16
- context 'when missing params' do
17
- let(:create) { subject.create(nil) }
16
+ context 'when missing params' do
17
+ let(:create) { subject.create(nil) }
18
18
 
19
- it do
20
- expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
19
+ it do
20
+ expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
21
+ end
21
22
  end
22
- end
23
23
 
24
- context 'for invalid params' do
25
- let(:create) { subject.create(params: 'invalid params') }
24
+ context 'with invalid params' do
25
+ let(:create) { subject.create(params: 'invalid params') }
26
26
 
27
- it do
28
- expect { create }.to raise_error(FinAppsCore::InvalidArgumentsError)
27
+ it do
28
+ expect { create }.to raise_error(FinAppsCore::InvalidArgumentsError)
29
+ end
29
30
  end
30
- end
31
31
 
32
- context 'for valid params' do
33
- let(:create) { subject.create(email: 'valid email') }
32
+ context 'with valid params' do
33
+ let(:create) { subject.create(email: 'valid email') }
34
34
 
35
- it { expect { create }.not_to raise_error }
36
- it('returns an array') { expect(create).to be_a(Array) }
37
- it('performs a post and returns the response') do
38
- expect(results).to have_key(:public_id)
39
- expect(results).to have_key(:token)
40
- expect(results).to have_key(:expiry_date)
35
+ it { expect { create }.not_to raise_error }
36
+ it('returns an array') { expect(create).to be_a(Array) }
37
+ it { expect(results).to have_key(:public_id) }
38
+ it { expect(results).to have_key(:token) }
39
+ it { expect(results).to have_key(:expiry_date) }
40
+ it('returns no error messages') { expect(error_messages).to be_empty }
41
41
  end
42
- it('returns no error messages') { expect(error_messages).to be_empty }
43
42
  end
44
- end
45
43
 
46
- describe '#update' do
47
- let(:results) { update[0] }
48
- let(:error_messages) { update[1] }
44
+ describe '#update' do
45
+ let(:results) { update[0] }
46
+ let(:error_messages) { update[1] }
49
47
 
50
- context 'when missing params' do
51
- let(:update) { subject.update(nil) }
48
+ context 'when missing params' do
49
+ let(:update) { subject.update(nil) }
52
50
 
53
- it do
54
- expect { update }.to raise_error(FinAppsCore::MissingArgumentsError)
51
+ it do
52
+ expect { update }.to raise_error(FinAppsCore::MissingArgumentsError)
53
+ end
55
54
  end
56
- end
57
55
 
58
- context 'for invalid params' do
59
- let(:update) { subject.update(params: 'invalid') }
56
+ context 'with invalid params' do
57
+ let(:update) { subject.update(params: 'invalid') }
60
58
 
61
- it { expect { update }.not_to raise_error }
62
- it('results is nil') { expect(results).to be_nil }
63
- it('error messages array is populated') do
64
- expect(error_messages.first.downcase).to eq('invalid request body')
59
+ it { expect { update }.not_to raise_error }
60
+ it('results is nil') { expect(results).to be_nil }
61
+
62
+ it('error messages array is populated') do
63
+ expect(error_messages.first.downcase).to eq('invalid request body')
64
+ end
65
65
  end
66
- end
67
66
 
68
- context 'for valid params' do
69
- let(:update) { subject.update(params: 'valid') }
67
+ context 'with valid params' do
68
+ let(:update) { subject.update(params: 'valid') }
70
69
 
71
- it { expect { update }.not_to raise_error }
72
- it('returns an array') { expect(update).to be_a(Array) }
73
- it('performs a post and returns the response') do
74
- expect(results).to have_key(:public_id)
75
- expect(results).to have_key(:role)
70
+ it { expect { update }.not_to raise_error }
71
+ it('returns an array') { expect(update).to be_a(Array) }
72
+ it { expect(results).to have_key(:public_id) }
73
+ it { expect(results).to have_key(:role) }
74
+ it('returns no error messages') { expect(error_messages).to be_empty }
76
75
  end
77
- it('returns no error messages') { expect(error_messages).to be_empty }
78
76
  end
79
77
  end
80
78
  end