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::OrderNotifications do
6
6
  include SpecHelpers::Client
7
7
 
8
8
  describe '#update' do
9
- subject(:orders) { FinApps::REST::OrderNotifications.new(client) }
9
+ subject(:orders) { described_class.new(client) }
10
10
 
11
11
  context 'when missing id' do
12
12
  let(:update) { subject.update(nil) }
13
+
13
14
  it('returns missing argument error') do
14
15
  expect { update }.to raise_error(FinAppsCore::MissingArgumentsError)
15
16
  end
@@ -22,12 +23,13 @@ RSpec.describe FinApps::REST::OrderNotifications do
22
23
 
23
24
  it { expect { update }.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('resource not found')
27
29
  end
28
30
  end
29
31
 
30
- context 'for valid id' do
32
+ context 'with valid id' do
31
33
  let(:update) { subject.update(:valid_id) }
32
34
  let(:results) { update[RESULTS] }
33
35
  let(:error_messages) { update[ERROR_MESSAGES] }
@@ -4,11 +4,12 @@ require 'spec_helpers/client'
4
4
 
5
5
  RSpec.describe FinApps::REST::OrderRefreshes do
6
6
  include SpecHelpers::Client
7
- subject { FinApps::REST::OrderRefreshes.new(client) }
7
+ subject { described_class.new(client) }
8
8
 
9
9
  describe '#create' do
10
10
  context 'when missing id' do
11
11
  let(:create) { subject.create(nil) }
12
+
12
13
  it do
13
14
  expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
14
15
  end
@@ -16,12 +17,12 @@ RSpec.describe FinApps::REST::OrderRefreshes do
16
17
 
17
18
  context 'when valid id is provided' do
18
19
  let(:create) { subject.create(:valid_id) }
20
+
19
21
  it { expect { create }.not_to raise_error }
20
22
  it('returns an array') { expect(create).to be_a(Array) }
21
- it('performs a post and returns new refreshed order response') do
22
- expect(create[RESULTS]).to have_key(:public_id)
23
- expect(create[RESULTS]).to have_key(:original_order_id)
24
- end
23
+ it { expect(create[RESULTS]).to have_key(:public_id) }
24
+ it { expect(create[RESULTS]).to have_key(:original_order_id) }
25
+
25
26
  it('returns no error messages') do
26
27
  expect(create[ERROR_MESSAGES]).to be_empty
27
28
  end
@@ -29,9 +30,11 @@ RSpec.describe FinApps::REST::OrderRefreshes do
29
30
 
30
31
  context 'when invalid id is provided' do
31
32
  let(:create) { subject.create(:invalid_id) }
33
+
32
34
  it { expect { create }.not_to raise_error }
33
35
  it('returns an array') { expect(create).to be_a(Array) }
34
36
  it('results is nil') { expect(create[RESULTS]).to be_nil }
37
+
35
38
  it('error messages array is populated') do
36
39
  expect(create[ERROR_MESSAGES].first.downcase).to eq(
37
40
  'resource not found'
@@ -5,47 +5,53 @@ require 'spec_helpers/client'
5
5
  RSpec.describe FinApps::REST::OrderReports do
6
6
  include SpecHelpers::Client
7
7
 
8
- let(:order_report) { FinApps::REST::OrderReports.new client }
8
+ let(:order_report) { described_class.new client }
9
9
 
10
10
  describe '#show' do
11
11
  context 'when missing id' do
12
- subject { order_report.show(nil, :pdf) }
12
+ subject(:show) { order_report.show(nil, :pdf) }
13
+
13
14
  it do
14
- expect { subject }.to raise_error(FinAppsCore::MissingArgumentsError)
15
+ expect { show }.to raise_error(FinAppsCore::MissingArgumentsError)
15
16
  end
16
17
  end
17
18
 
18
19
  context 'when missing format' do
19
- subject { order_report.show(:valid_id, nil) }
20
+ subject(:show) { order_report.show(:valid_id, nil) }
21
+
20
22
  it do
21
- expect { subject }.to raise_error(FinAppsCore::MissingArgumentsError)
23
+ expect { show }.to raise_error(FinAppsCore::MissingArgumentsError)
22
24
  end
23
25
  end
24
26
 
25
27
  context 'when invalid format is provided' do
26
- subject { order_report.show(:valid_id, :xml) }
28
+ subject(:show) { order_report.show(:valid_id, :xml) }
29
+
27
30
  it do
28
- expect { subject }.to raise_error(FinAppsCore::InvalidArgumentsError)
31
+ expect { show }.to raise_error(FinAppsCore::InvalidArgumentsError)
29
32
  end
30
33
  end
31
34
 
32
35
  context 'when valid params are provided' do
33
- subject { order_report.show(:valid_id, :json) }
36
+ subject(:show) { order_report.show(:valid_id, :json) }
37
+
38
+ it { expect { show }.not_to raise_error }
34
39
 
35
- it { expect { subject }.not_to raise_error }
36
40
  it('performs a get and returns the response') do
37
- expect(subject[0]).to have_key(:days_requested)
41
+ expect(show[0]).to have_key(:days_requested)
38
42
  end
39
- it('returns no error messages') { expect(subject[1]).to be_empty }
43
+
44
+ it('returns no error messages') { expect(show[1]).to be_empty }
40
45
  end
41
46
 
42
47
  context 'when invalid id is provided' do
43
- subject { order_report.show(:invalid_id, :json) }
48
+ subject(:show) { order_report.show(:invalid_id, :json) }
49
+
50
+ it { expect { show }.not_to raise_error }
51
+ it('results is nil') { expect(show[0]).to be_nil }
44
52
 
45
- it { expect { subject }.not_to raise_error }
46
- it('results is nil') { expect(subject[0]).to be_nil }
47
53
  it('error messages array is populated') do
48
- expect(subject[1].first.downcase).to eq('resource not found')
54
+ expect(show[1].first.downcase).to eq('resource not found')
49
55
  end
50
56
  end
51
57
  end
@@ -5,31 +5,35 @@ RSpec.describe FinApps::REST::OrderStatuses do
5
5
 
6
6
  describe '#show' do
7
7
  context 'when missing id' do
8
- subject { FinApps::REST::OrderStatuses.new(client).show(nil) }
8
+ subject(:show) { described_class.new(client).show(nil) }
9
+
9
10
  it do
10
- expect { subject }.to raise_error(FinAppsCore::MissingArgumentsError)
11
+ expect { show }.to raise_error(FinAppsCore::MissingArgumentsError)
11
12
  end
12
13
  end
13
14
 
14
15
  context 'when valid id is provided' do
15
- subject { FinApps::REST::OrderStatuses.new(client).show(:valid_id) }
16
+ subject(:show) { described_class.new(client).show(:valid_id) }
17
+
18
+ it { expect { show }.not_to raise_error }
16
19
 
17
- it { expect { subject }.not_to raise_error }
18
20
  it('performs a get and returns the response') do
19
- expect(subject[RESULTS]).to have_key(:status)
21
+ expect(show[RESULTS]).to have_key(:status)
20
22
  end
23
+
21
24
  it('returns no error messages') do
22
- expect(subject[ERROR_MESSAGES]).to be_empty
25
+ expect(show[ERROR_MESSAGES]).to be_empty
23
26
  end
24
27
  end
25
28
 
26
29
  context 'when invalid id is provided' do
27
- subject { FinApps::REST::OrderStatuses.new(client).show(:invalid_id) }
30
+ subject(:show) { described_class.new(client).show(:invalid_id) }
31
+
32
+ it { expect { show }.not_to raise_error }
33
+ it('results is nil') { expect(show[RESULTS]).to be_nil }
28
34
 
29
- it { expect { subject }.not_to raise_error }
30
- it('results is nil') { expect(subject[RESULTS]).to be_nil }
31
35
  it('error messages array is populated') do
32
- expect(subject[ERROR_MESSAGES].first.downcase).to eq(
36
+ expect(show[ERROR_MESSAGES].first.downcase).to eq(
33
37
  'resource not found'
34
38
  )
35
39
  end
@@ -2,40 +2,47 @@
2
2
 
3
3
  require 'spec_helpers/client'
4
4
 
5
- RSpec.describe FinApps::REST::OrderTokens,
6
- 'initialized with valid FinApps::Client object' do
7
- include SpecHelpers::Client
8
-
9
- describe '#show' do
10
- subject(:order_tokens) { FinApps::REST::OrderTokens.new(client) }
11
- let(:results) { show[RESULTS] }
12
- let(:error_messages) { show[ERROR_MESSAGES] }
13
-
14
- context 'when missing token' do
15
- it do
16
- expect { subject.show(nil) }.to raise_error(
17
- FinAppsCore::MissingArgumentsError,
18
- ': token'
19
- )
5
+ RSpec.describe FinApps::REST::OrderTokens do
6
+ context 'when initialized with valid FinApps::Client object' do
7
+ include SpecHelpers::Client
8
+
9
+ describe '#show' do
10
+ subject(:order_tokens) { described_class.new(client) }
11
+
12
+ let(:results) { show[RESULTS] }
13
+ let(:error_messages) { show[ERROR_MESSAGES] }
14
+
15
+ context 'when missing token' do
16
+ it do
17
+ expect { order_tokens.show(nil) }.to raise_error(
18
+ FinAppsCore::MissingArgumentsError,
19
+ ': token'
20
+ )
21
+ end
20
22
  end
21
- end
22
23
 
23
- context 'for valid token' do
24
- let(:show) { subject.show(:valid_token) }
25
- it { expect { show }.not_to raise_error }
26
- it('results is a Hash') { expect(results).to be_a(Hash) }
27
- it('results contains a consumer_id') do
28
- expect(results).to have_key(:consumer_id)
24
+ context 'with valid token' do
25
+ let(:show) { subject.show(:valid_token) }
26
+
27
+ it { expect { show }.not_to raise_error }
28
+ it('results is a Hash') { expect(results).to be_a(Hash) }
29
+
30
+ it('results contains a consumer_id') do
31
+ expect(results).to have_key(:consumer_id)
32
+ end
33
+
34
+ it('error_messages array is empty') { expect(error_messages).to eq([]) }
29
35
  end
30
- it('error_messages array is empty') { expect(error_messages).to eq([]) }
31
- end
32
36
 
33
- context 'for invalid token' do
34
- let(:show) { subject.show(:invalid_token) }
35
- it { expect { show }.not_to raise_error }
36
- it('results is nil') { expect(results).to be_nil }
37
- it('error messages array is populated') do
38
- expect(error_messages.first.downcase).to eq('resource not found')
37
+ context 'with invalid token' do
38
+ let(:show) { subject.show(:invalid_token) }
39
+
40
+ it { expect { show }.not_to raise_error }
41
+ it('results is nil') { expect(results).to be_nil }
42
+
43
+ it('error messages array is populated') do
44
+ expect(error_messages.first.downcase).to eq('resource not found')
45
+ end
39
46
  end
40
47
  end
41
48
  end
@@ -7,60 +7,63 @@ RSpec.describe FinApps::REST::Orders do
7
7
 
8
8
  describe '#show' do
9
9
  context 'when missing params' do
10
- subject { FinApps::REST::Orders.new(client).show(nil) }
10
+ subject(:show) { described_class.new(client).show(nil) }
11
+
11
12
  it do
12
- expect { subject }.to raise_error(FinAppsCore::MissingArgumentsError)
13
+ expect { show }.to raise_error(FinAppsCore::MissingArgumentsError)
13
14
  end
14
15
  end
15
16
 
16
17
  context 'when valid params are provided' do
17
- subject { FinApps::REST::Orders.new(client).show(:valid_id) }
18
+ subject(:show) { described_class.new(client).show(:valid_id) }
19
+
20
+ it { expect { show }.not_to raise_error }
21
+ it('returns an array') { expect(show).to be_a(Array) }
22
+ it { expect(show[RESULTS]).to have_key(:public_id) }
23
+ it { expect(show[RESULTS]).to have_key(:consumer_id) }
18
24
 
19
- it { expect { subject }.not_to raise_error }
20
- it('returns an array') { expect(subject).to be_a(Array) }
21
- it('performs a get and returns the response') do
22
- expect(subject[RESULTS]).to have_key(:public_id)
23
- expect(subject[RESULTS]).to have_key(:consumer_id)
24
- end
25
25
  it('returns no error messages') do
26
- expect(subject[ERROR_MESSAGES]).to be_empty
26
+ expect(show[ERROR_MESSAGES]).to be_empty
27
27
  end
28
28
  end
29
29
  end
30
30
 
31
31
  describe '#create' do
32
32
  context 'when missing params' do
33
- subject { FinApps::REST::Orders.new(client).create(nil) }
33
+ subject(:create) { described_class.new(client).create(nil) }
34
+
34
35
  it do
35
- expect { subject }.to raise_error(FinAppsCore::MissingArgumentsError)
36
+ expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
36
37
  end
37
38
  end
38
39
 
39
40
  context 'when valid params are provided' do
40
- subject { FinApps::REST::Orders.new(client).create(valid_params) }
41
+ subject(:create) { described_class.new(client).create(valid_params) }
42
+
41
43
  let(:valid_params) do
42
- { applicant: 'valid', institutions: 'valid', product: 'valid' }
44
+ {applicant: 'valid', institutions: 'valid', product: 'valid'}
43
45
  end
44
46
 
45
- it { expect { subject }.not_to raise_error }
46
- it('returns an array') { expect(subject).to be_a(Array) }
47
- it('performs a post and returns the response') do
48
- expect(subject[RESULTS]).to have_key(:public_id)
49
- expect(subject[RESULTS]).to have_key(:consumer_id)
50
- end
47
+ it { expect { create }.not_to raise_error }
48
+ it('returns an array') { expect(create).to be_a(Array) }
49
+ it { expect(create[RESULTS]).to have_key(:public_id) }
50
+ it { expect(create[RESULTS]).to have_key(:consumer_id) }
51
+
51
52
  it('returns no error messages') do
52
- expect(subject[ERROR_MESSAGES]).to be_empty
53
+ expect(create[ERROR_MESSAGES]).to be_empty
53
54
  end
54
55
  end
55
56
 
56
57
  context 'when invalid params are provided' do
57
- subject { FinApps::REST::Orders.new(client).create(invalid_params) }
58
- let(:invalid_params) { { applicant: 'valid' } }
58
+ subject(:create) { described_class.new(client).create(invalid_params) }
59
+
60
+ let(:invalid_params) { {applicant: 'valid'} }
61
+
62
+ it { expect { create }.not_to raise_error }
63
+ it('results is nil') { expect(create[RESULTS]).to be_nil }
59
64
 
60
- it { expect { subject }.not_to raise_error }
61
- it('results is nil') { expect(subject[RESULTS]).to be_nil }
62
65
  it('error messages array is populated') do
63
- expect(subject[ERROR_MESSAGES].first.downcase).to eq(
66
+ expect(create[ERROR_MESSAGES].first.downcase).to eq(
64
67
  'invalid request body'
65
68
  )
66
69
  end
@@ -71,29 +74,34 @@ RSpec.describe FinApps::REST::Orders do
71
74
  context 'when missing params' do
72
75
  # use defaults
73
76
 
74
- subject { FinApps::REST::Orders.new(client).list }
75
- it { expect { subject }.not_to raise_error }
77
+ subject(:list) { described_class.new(client).list }
78
+
79
+ it { expect { list }.not_to raise_error }
80
+
81
+ it('returns an array') { expect(list).to be_a(Array) }
76
82
 
77
- it('returns an array') { expect(subject).to be_a(Array) }
78
83
  it('performs a get and returns the response') do
79
- expect(subject[RESULTS]).to have_key(:orders)
84
+ expect(list[RESULTS]).to have_key(:orders)
80
85
  end
86
+
81
87
  it('returns no error messages') do
82
- expect(subject[ERROR_MESSAGES]).to be_empty
88
+ expect(list[ERROR_MESSAGES]).to be_empty
83
89
  end
84
90
  end
85
91
 
86
92
  context 'when invalid params are provided' do
87
- subject { FinApps::REST::Orders.new(client).list(invalid_params) }
93
+ subject(:list) { described_class.new(client).list(invalid_params) }
94
+
88
95
  let(:invalid_params) { %w[this is an array] }
89
96
 
90
97
  it do
91
- expect { subject }.to raise_error(FinAppsCore::InvalidArgumentsError)
98
+ expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError)
92
99
  end
93
100
  end
94
101
 
95
102
  context 'when including valid params' do
96
- subject { FinApps::REST::Orders.new(client).list(params) }
103
+ subject(:list) { described_class.new(client).list(params) }
104
+
97
105
  let(:params) do
98
106
  {
99
107
  page: 2,
@@ -107,61 +115,88 @@ RSpec.describe FinApps::REST::Orders do
107
115
  }
108
116
  end
109
117
 
110
- it { expect { subject }.not_to raise_error }
111
- it('returns an array') { expect(subject).to be_a(Array) }
118
+ it { expect { list }.not_to raise_error }
119
+ it('returns an array') { expect(list).to be_a(Array) }
120
+
112
121
  it('performs a get and returns the response') do
113
- expect(subject[RESULTS]).to have_key(:orders)
122
+ expect(list[RESULTS]).to have_key(:orders)
114
123
  end
124
+
115
125
  it('each order contains a consumer_id') do
116
- expect(subject[RESULTS][:orders]).to all(have_key(:consumer_id))
126
+ expect(list[RESULTS][:orders]).to all(have_key(:consumer_id))
117
127
  end
128
+
118
129
  it('returns no error messages') do
119
- expect(subject[ERROR_MESSAGES]).to be_empty
130
+ expect(list[ERROR_MESSAGES]).to be_empty
120
131
  end
132
+
121
133
  it 'builds query and sends proper request' do
122
- subject
123
- url =
124
- "#{versioned_api_path}/orders?filter=%7B%22$or%22:%5B%7B%22public_id%22:" \
125
- '%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D,%7B%22applicant.last_name%22:%22' \
126
- 'term%22%7D,%7B%22assignment.last_name%22:%22term%22%7D,%7B%22requestor.reference_no%22:%7B%22' \
127
- '$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,%22status%22:%7B%22$in%22:%5B1,7%5D%7D,' \
128
- '%22assignment.operator_id%22:%22valid_operator%22,%22consumer_id%22:%22valid_consumer_id%22%7D' \
129
- '&page=2&requested=25&sort=status'
134
+ list
135
+ url = "#{versioned_api_path}/orders?"\
136
+ 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
137
+ 'term%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name%22:%22'\
138
+ 'term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,%7B%22'\
139
+ 'applicant.last_name%22:%22term%22%7D,%7B%22requestor.reference_no'\
140
+ '%22:%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,%22'\
141
+ 'status%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22'\
142
+ 'valid_operator%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
130
143
  expect(WebMock).to have_requested(:get, url)
131
144
  end
145
+
132
146
  it 'builds query and sends proper request with searchTerm/relation exclusivity' do
133
147
  params[:searchTerm] = nil
134
- subject
135
- url =
136
- "#{versioned_api_path}/orders?filter=%7B%22status%22:%7B%22$in%22:%5B1,7%5D%7D," \
137
- '%22assignment.operator_id%22:%22valid_operator%22,%22consumer_id%22:%22valid_consumer_id%22,' \
138
- '%22$or%22:%5B%7B%22public_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D,%7B%22original_order_id%22:' \
139
- '%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D%5D%7D&page=2&requested=25&sort=status'
148
+ list
149
+ url = "#{versioned_api_path}/orders?"\
150
+ 'filter=%7B%22status%22:%7B%22$in%22:%5B1,7%5D%7D,' \
151
+ '%22assignment.operator_id%22:%22valid_operator%22,'\
152
+ '%22consumer_id%22:%22valid_consumer_id%22,' \
153
+ '%22$or%22:%5B%7B%22public_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D,'\
154
+ '%7B%22original_order_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D%5D%7D&'\
155
+ 'page=2&requested=25&sort=status'
156
+ expect(WebMock).to have_requested(:get, url)
157
+ end
158
+
159
+ it 'handles space in search term for consumer' do
160
+ params[:searchTerm] = 'Spacing Out'
161
+ list
162
+ url = "#{versioned_api_path}/orders?"\
163
+ 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
164
+ 'Spacing%20Out%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name'\
165
+ '%22:%22Spacing%20Out%22%7D,%7B%22applicant.first_name%22:%22'\
166
+ 'Spacing%20Out%22%7D,%7B%22applicant.last_name%22:%22Spacing%20Out'\
167
+ '%22%7D,%7B%22requestor.reference_no%22:%7B%22$regex%22:%22%5ESpacing%20Out'\
168
+ '%22,%22$options%22:%22i%22%7D%7D,%7B%22applicant.first_name%22:%22Spacing'\
169
+ '%22%7D,%7B%22applicant.last_name%22:%22Spacing%22%7D,%7B%22applicant.first_name'\
170
+ '%22:%22Out%22%7D,%7B%22applicant.last_name%22:%22Out%22%7D%5D,%22status'\
171
+ '%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22valid_operator'\
172
+ '%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
140
173
  expect(WebMock).to have_requested(:get, url)
141
174
  end
175
+
142
176
  it 'builds null assignment query properly when supplied w/ empty string' do
143
- FinApps::REST::Orders.new(client).list(assignment: '')
177
+ described_class.new(client).list(assignment: '')
144
178
 
145
- url =
146
- "#{versioned_api_path}/orders?filter=%7B%22assignment.operator_id%22:null%7D"
179
+ url = "#{versioned_api_path}/orders?"\
180
+ 'filter=%7B%22assignment.operator_id%22:null%7D'
147
181
  expect(WebMock).to have_requested(:get, url)
148
182
  end
149
183
  end
150
184
  end
151
185
 
152
186
  describe '#update' do
153
- subject(:orders) { FinApps::REST::Orders.new(client) }
187
+ subject(:orders) { described_class.new(client) }
154
188
 
155
189
  context 'with nil params' do
156
190
  context 'when missing id' do
157
- let(:update) { subject.update(nil) }
191
+ let(:update) { orders.update(nil) }
192
+
158
193
  it('returns missing argument error') do
159
194
  expect { update }.to raise_error(FinAppsCore::MissingArgumentsError)
160
195
  end
161
196
  end
162
197
 
163
198
  context 'when valid id is provided' do
164
- let(:update) { subject.update('valid_id') } # how to stub params
199
+ let(:update) { orders.update('valid_id') } # how to stub params
165
200
  let(:results) { update[RESULTS] }
166
201
  let(:error_messages) { update[ERROR_MESSAGES] }
167
202
 
@@ -171,12 +206,13 @@ RSpec.describe FinApps::REST::Orders do
171
206
  end
172
207
 
173
208
  context 'when invalid id is provided' do
174
- let(:update) { subject.update('invalid_id') }
209
+ let(:update) { orders.update('invalid_id') }
175
210
  let(:results) { update[RESULTS] }
176
211
  let(:error_messages) { update[ERROR_MESSAGES] }
177
212
 
178
213
  it { expect { update }.not_to raise_error }
179
214
  it('results is nil') { expect(results).to be_nil }
215
+
180
216
  it('error messages array is populated') do
181
217
  expect(error_messages.first.downcase).to eq('resource not found')
182
218
  end
@@ -185,14 +221,15 @@ RSpec.describe FinApps::REST::Orders do
185
221
 
186
222
  context 'with params' do
187
223
  context 'when missing id' do
188
- let(:update) { subject.update(nil, params: 'valid') }
224
+ let(:update) { orders.update(nil, params: 'valid') }
225
+
189
226
  it('does not raise error') do
190
227
  expect { update }.not_to raise_error
191
228
  end
192
229
  end
193
230
 
194
231
  context 'when valid params are provided' do
195
- let(:update) { subject.update(nil, params: 'valid') }
232
+ let(:update) { orders.update(nil, params: 'valid') }
196
233
  let(:results) { update[RESULTS] }
197
234
  let(:error_messages) { update[ERROR_MESSAGES] }
198
235
 
@@ -202,12 +239,13 @@ RSpec.describe FinApps::REST::Orders do
202
239
  end
203
240
 
204
241
  context 'when invalid params are provided' do
205
- let(:update) { subject.update(nil, params: 'invalid') }
242
+ let(:update) { orders.update(nil, params: 'invalid') }
206
243
  let(:results) { update[RESULTS] }
207
244
  let(:error_messages) { update[ERROR_MESSAGES] }
208
245
 
209
246
  it { expect { update }.not_to raise_error }
210
247
  it('results is nil') { expect(results).to be_nil }
248
+
211
249
  it('error messages array is populated') do
212
250
  expect(error_messages.first.downcase).to eq('invalid request body')
213
251
  end
@@ -215,39 +253,49 @@ RSpec.describe FinApps::REST::Orders do
215
253
  end
216
254
  end
217
255
 
256
+ # Test it calls update while making rubocop happy
218
257
  describe '#create_and_submit' do
219
- subject(:orders) { FinApps::REST::Orders.new(client) }
220
- let(:params) { { params: 'valid' } }
221
- it('calls #update') do
222
- expect(subject).to receive(:update).with(nil, params)
223
- subject.create_and_submit(params)
258
+ subject(:orders) { described_class.new(client) }
259
+
260
+ let(:create_submit) { orders.create_and_submit(params) }
261
+ let(:params) { {params: 'valid'} }
262
+ let(:results) { create_submit[RESULTS] }
263
+ let(:error_messages) { create_submit[ERROR_MESSAGES] }
264
+
265
+ it { expect { create_submit }.not_to raise_error }
266
+ it('results is nil') { expect(results).to be_nil }
267
+
268
+ it('error messages array is empty') do
269
+ expect(error_messages).to eq([])
224
270
  end
225
271
  end
226
272
 
227
273
  describe '#destroy' do
228
- subject(:orders) { FinApps::REST::Orders.new(client) }
274
+ subject(:orders) { described_class.new(client) }
229
275
 
230
276
  context 'when missing id' do
231
- let(:destroy) { subject.destroy(nil) }
277
+ let(:destroy) { orders.destroy(nil) }
278
+
232
279
  it('returns missing argument error') do
233
280
  expect { destroy }.to raise_error(FinAppsCore::MissingArgumentsError)
234
281
  end
235
282
  end
236
283
 
237
284
  context 'when invalid id is provided' do
238
- let(:destroy) { subject.destroy(:invalid_id) }
285
+ let(:destroy) { orders.destroy(:invalid_id) }
239
286
  let(:results) { destroy[RESULTS] }
240
287
  let(:error_messages) { destroy[ERROR_MESSAGES] }
241
288
 
242
289
  it { expect { destroy }.not_to raise_error }
243
290
  it('results is nil') { expect(results).to be_nil }
291
+
244
292
  it('error messages array is populated') do
245
293
  expect(error_messages.first.downcase).to eq('resource not found')
246
294
  end
247
295
  end
248
296
 
249
- context 'for valid id' do
250
- let(:destroy) { subject.destroy(:valid_id) }
297
+ context 'with valid id' do
298
+ let(:destroy) { orders.destroy(:valid_id) }
251
299
  let(:results) { destroy[RESULTS] }
252
300
  let(:error_messages) { destroy[ERROR_MESSAGES] }
253
301