finapps 5.0.43 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yaml +47 -0
  3. data/.github/workflows/release.yml +42 -42
  4. data/.rubocop.yml +1 -1
  5. data/.ruby-version +1 -1
  6. data/Guardfile +1 -1
  7. data/README.md +6 -4
  8. data/finapps.gemspec +8 -7
  9. data/lib/finapps.rb +1 -0
  10. data/lib/finapps/rest/client.rb +2 -1
  11. data/lib/finapps/rest/consumers.rb +5 -5
  12. data/lib/finapps/rest/documents_orders.rb +23 -4
  13. data/lib/finapps/rest/documents_orders_notifications.rb +2 -2
  14. data/lib/finapps/rest/documents_uploads.rb +8 -0
  15. data/lib/finapps/rest/operators.rb +3 -3
  16. data/lib/finapps/rest/orders.rb +6 -6
  17. data/lib/finapps/rest/screenings.rb +64 -0
  18. data/lib/finapps/version.rb +1 -1
  19. data/spec/rest/api_request.rb +8 -0
  20. data/spec/rest/documents_orders_notifications_spec.rb +2 -2
  21. data/spec/rest/documents_orders_spec.rb +37 -31
  22. data/spec/rest/documents_uploads_spec.rb +53 -0
  23. data/spec/rest/screenings_spec.rb +235 -0
  24. data/spec/rest/signed_documents_downloads_spec.rb +4 -7
  25. data/spec/rest/verix/verix_documents_spec.rb +4 -4
  26. data/spec/spec_helper.rb +1 -1
  27. data/spec/support/documents_uploads_routes.rb +39 -0
  28. data/spec/support/fake_api.rb +457 -456
  29. data/spec/support/fixtures/documents/retrieve_order.json +97 -0
  30. data/spec/support/fixtures/screening.json +26 -0
  31. data/spec/support/fixtures/screening_invalid_update.json +5 -0
  32. data/spec/support/fixtures/screening_list.json +25 -0
  33. data/spec/support/fixtures/session_not_found.json +5 -0
  34. data/spec/support/screenings_routes.rb +73 -0
  35. metadata +111 -79
  36. data/.github/workflows/main.yaml +0 -38
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinApps
4
- VERSION = '5.0.43'
4
+ VERSION = '5.1.0'
5
5
  end
@@ -16,3 +16,11 @@ RSpec.shared_examples 'a successful request' do |_parameter|
16
16
  expect(subject[ERROR_MESSAGES]).to be_empty
17
17
  end
18
18
  end
19
+
20
+ RSpec.shared_examples 'a request that raises an error' do |_parameter|
21
+ it do
22
+ expect { subject }.to raise_error(
23
+ FinAppsCore::MissingArgumentsError
24
+ )
25
+ end
26
+ end
@@ -17,7 +17,7 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
17
17
  end
18
18
 
19
19
  context 'when invalid id is provided' do
20
- let(:create) { subject.create(:invalid_id) }
20
+ let(:create) { subject.create(:invalid_id, ['1234']) }
21
21
  let(:results) { create[RESULTS] }
22
22
  let(:error_messages) { create[ERROR_MESSAGES] }
23
23
 
@@ -30,7 +30,7 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
30
30
  end
31
31
 
32
32
  context 'with valid id' do
33
- let(:create) { subject.create(:valid_id) }
33
+ let(:create) { subject.create(:valid_id, ['1234']) }
34
34
  let(:results) { create[RESULTS] }
35
35
  let(:error_messages) { create[ERROR_MESSAGES] }
36
36
 
@@ -6,14 +6,6 @@ require 'rest/api_request'
6
6
  RSpec.describe FinApps::REST::DocumentsOrders do
7
7
  include SpecHelpers::Client
8
8
 
9
- RSpec.shared_examples 'a request that raises an error' do |_parameter|
10
- it do
11
- expect { subject }.to raise_error(
12
- FinAppsCore::MissingArgumentsError
13
- )
14
- end
15
- end
16
-
17
9
  describe '#list' do
18
10
  subject(:list) { described_class.new(client).list(params) }
19
11
 
@@ -70,7 +62,7 @@ RSpec.describe FinApps::REST::DocumentsOrders do
70
62
  end
71
63
 
72
64
  context 'with search term containing spaces' do
73
- let(:params) { {"searchTerm": 'Blue Jay', "page": 2} }
65
+ let(:params) { {searchTerm: 'Blue Jay', page: 2} }
74
66
 
75
67
  it 'builds query and sends proper request' do
76
68
  list
@@ -134,14 +126,28 @@ RSpec.describe FinApps::REST::DocumentsOrders do
134
126
  let(:error_messages) { show[1] }
135
127
 
136
128
  context 'with valid id' do
137
- let(:id) { :valid_order_id }
129
+ context 'when id is an identifier' do
130
+ let(:id) { :valid_order_id }
138
131
 
139
- it_behaves_like 'an API request'
140
- it_behaves_like 'a successful request'
141
- it('results is a Hash') { expect(results).to be_a(Hash) }
132
+ it_behaves_like 'an API request'
133
+ it_behaves_like 'a successful request'
134
+ it('has an order_id node in the response') do
135
+ expect(results).to have_key(:order_id)
136
+ end
137
+ end
142
138
 
143
- it('performs a get and returns the response') do
144
- expect(results).to have_key(:order_id)
139
+ context 'when id is a token' do
140
+ let(:id) { '0123456abc.0123456abc.0123456abc' }
141
+
142
+ it_behaves_like 'an API request'
143
+ it_behaves_like 'a successful request'
144
+ it('has an order node in the response') do
145
+ expect(results).to have_key(:order)
146
+ end
147
+
148
+ it('has a consumer node in the response') do
149
+ expect(results).to have_key(:consumer)
150
+ end
145
151
  end
146
152
  end
147
153
 
@@ -168,17 +174,17 @@ RSpec.describe FinApps::REST::DocumentsOrders do
168
174
  context 'with valid params' do
169
175
  let(:params) do
170
176
  {
171
- "applicant": {
172
- "email": 'validemail@financialapps.com',
173
- "first_name": 'Emily',
174
- "last_name": 'Macs',
175
- "role": 'patient'
177
+ applicant: {
178
+ email: 'validemail@financialapps.com',
179
+ first_name: 'Emily',
180
+ last_name: 'Macs',
181
+ role: 'patient'
176
182
  },
177
- "esign_documents": [
183
+ esign_documents: [
178
184
  'temp-id'
179
185
  ],
180
- "reference_no": 'REFNO',
181
- "tag": 'new'
186
+ reference_no: 'REFNO',
187
+ tag: 'new'
182
188
  }
183
189
  end
184
190
 
@@ -194,13 +200,13 @@ RSpec.describe FinApps::REST::DocumentsOrders do
194
200
  context 'with invalid params' do
195
201
  let(:params) do
196
202
  {
197
- "applicant": {
198
- "email": 'validemail@financialapps.com',
199
- "first_name": 'Emily',
200
- "last_name": 'Macs',
201
- "role": 'patient'
203
+ applicant: {
204
+ email: 'validemail@financialapps.com',
205
+ first_name: 'Emily',
206
+ last_name: 'Macs',
207
+ role: 'patient'
202
208
  },
203
- "reference_no": 'REFNO'
209
+ reference_no: 'REFNO'
204
210
  }
205
211
  end
206
212
 
@@ -230,7 +236,7 @@ RSpec.describe FinApps::REST::DocumentsOrders do
230
236
  let(:id) { :valid_order_id }
231
237
 
232
238
  context 'with valid params' do
233
- let(:params) { {"tag": 'pending'} }
239
+ let(:params) { {tag: 'pending'} }
234
240
 
235
241
  it_behaves_like 'an API request'
236
242
  it_behaves_like 'a successful request'
@@ -238,7 +244,7 @@ RSpec.describe FinApps::REST::DocumentsOrders do
238
244
  end
239
245
 
240
246
  context 'with invalid params' do
241
- let(:params) { {"tag": 'invalid'} }
247
+ let(:params) { {tag: 'invalid'} }
242
248
 
243
249
  it_behaves_like 'an API request'
244
250
  it('results is nil') { expect(results).to be_nil }
@@ -101,4 +101,57 @@ RSpec.describe FinApps::REST::DocumentsUploads do
101
101
  end
102
102
  end
103
103
  end
104
+
105
+ describe '#destroy_by_consumer' do
106
+ subject(:destroy_by_consumer) do
107
+ described_class.new(client).destroy_by_consumer(consumer_id, document_id)
108
+ end
109
+
110
+ let(:results) { destroy_by_consumer[0] }
111
+ let(:error_messages) { destroy_by_consumer[1] }
112
+
113
+ context 'with valid params' do
114
+ let(:consumer_id) { :valid_consumer_id }
115
+ let(:document_id) { :valid_document_id }
116
+
117
+ it_behaves_like 'an API request'
118
+ it_behaves_like 'a successful request'
119
+ it('results is nil') { expect(results).to be_nil }
120
+ end
121
+
122
+ context 'with invalid consumer_id' do
123
+ let(:consumer_id) { :invalid_consumer_id }
124
+ let(:document_id) { :valid_document_id }
125
+
126
+ it_behaves_like 'an API request'
127
+ it('results is nil') { expect(results).to be_nil }
128
+
129
+ it('error messages array is populated') do
130
+ expect(error_messages.first.downcase).to eq('resource not found')
131
+ end
132
+ end
133
+
134
+ context 'with invalid document id' do
135
+ let(:consumer_id) { :valid_consumer_id }
136
+ let(:document_id) { :invalid_document_id }
137
+
138
+ it_behaves_like 'an API request'
139
+ it('results is nil') { expect(results).to be_nil }
140
+
141
+ it('error messages array is populated') do
142
+ expect(error_messages.first.downcase).to eq('resource not found')
143
+ end
144
+ end
145
+
146
+ context 'with missing id' do
147
+ let(:consumer_id) { nil }
148
+ let(:document_id) { nil }
149
+
150
+ it do
151
+ expect { destroy_by_consumer }.to raise_error(
152
+ FinAppsCore::MissingArgumentsError
153
+ )
154
+ end
155
+ end
156
+ end
104
157
  end
@@ -0,0 +1,235 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+ require 'rest/api_request'
5
+
6
+ RSpec.describe FinApps::REST::Screenings do
7
+ include SpecHelpers::Client
8
+
9
+ describe '#list' do
10
+ subject(:list) { described_class.new(client).list(params) }
11
+
12
+ let(:results) { list[0] }
13
+ let(:error_messages) { list[1] }
14
+
15
+ context 'with valid params' do
16
+ let(:params) do
17
+ {
18
+ page: 2,
19
+ sort: 'date_created',
20
+ requested: 25,
21
+ searchTerm: 'term'
22
+ }
23
+ end
24
+
25
+ context 'without searchTerm' do
26
+ let(:params) { {searchTerm: nil, page: 2} }
27
+
28
+ it_behaves_like 'an API request'
29
+ it_behaves_like 'a successful request'
30
+ it 'performs a get and returns the response' do
31
+ expect(results).to have_key(:records)
32
+ end
33
+
34
+ it 'builds query and sends proper request' do
35
+ list
36
+ url = "#{versioned_api_path}/screenings?page=2"
37
+ expect(WebMock).to have_requested(:get, url)
38
+ end
39
+ end
40
+
41
+ # rubocop:disable RSpec/ExampleLength
42
+ context 'with searchTerm' do
43
+ it_behaves_like 'an API request'
44
+ it_behaves_like 'a successful request'
45
+ it 'performs a get and returns the response' do
46
+ expect(results).to have_key(:records)
47
+ end
48
+
49
+ it 'builds query and sends proper request' do
50
+ list
51
+ url =
52
+ "#{versioned_api_path}/screenings?filter=%7B%22$or%22:%5B%7B%22" \
53
+ 'consumer.public_id%22:%22term%22%7D,%7B%22consumer.email%22:%22' \
54
+ 'term%22%7D%5D%7D&page=2&requested=25&sort=date_created'
55
+
56
+ expect(WebMock).to have_requested(:get, url)
57
+ end
58
+ end
59
+ # rubocop:enable RSpec/ExampleLength
60
+ end
61
+
62
+ context 'with invalid params' do
63
+ let(:params) { ['invalid array'] }
64
+
65
+ it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
66
+ end
67
+
68
+ context 'with missing params' do
69
+ let(:params) { nil }
70
+
71
+ it_behaves_like 'an API request'
72
+ it_behaves_like 'a successful request'
73
+ it('performs a get and returns the response') do
74
+ expect(results).to have_key(:records)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#show' do
80
+ subject(:show) { described_class.new(client).show(id) }
81
+
82
+ let(:results) { show[0] }
83
+ let(:error_messages) { show[1] }
84
+
85
+ context 'with valid id' do
86
+ let(:id) { :valid_id }
87
+
88
+ it_behaves_like 'an API request'
89
+ it_behaves_like 'a successful request'
90
+ it('performs a get and returns the response') do
91
+ expect(results).to have_key(:session)
92
+ end
93
+ end
94
+
95
+ context 'with invalid id' do
96
+ let(:id) { :invalid_id }
97
+
98
+ it { expect(results).to be_nil }
99
+ it { expect(error_messages).not_to be_empty }
100
+ end
101
+
102
+ context 'when missing id' do
103
+ let(:id) { nil }
104
+
105
+ it_behaves_like 'a request that raises an error'
106
+ end
107
+ end
108
+
109
+ describe '#create' do
110
+ subject(:create) { described_class.new(client).create(params) }
111
+
112
+ let(:results) { create[0] }
113
+ let(:error_messages) { create[1] }
114
+
115
+ context 'with valid params' do
116
+ let(:params) do
117
+ {
118
+ email: 'validemail@financialapps.com',
119
+ first_name: 'Geo',
120
+ last_name: 'Metric',
121
+ public_id: '1234'
122
+ }
123
+ end
124
+
125
+ it_behaves_like 'an API request'
126
+ it_behaves_like 'a successful request'
127
+ it('results is a Hash') { expect(results).to be_a(Hash) }
128
+
129
+ it('performs a post and returns the response') do
130
+ expect(results).to have_key(:question)
131
+ end
132
+ end
133
+
134
+ context 'with invalid params' do
135
+ let(:params) { {params: 'invalid'} }
136
+
137
+ it { expect { create }.not_to raise_error }
138
+ it('results is nil') { expect(results).to be_nil }
139
+
140
+ it('error messages array is populated') do
141
+ expect(error_messages.first.downcase).to eq('invalid request body')
142
+ end
143
+ end
144
+
145
+ context 'with missing params' do
146
+ let(:params) { nil }
147
+
148
+ it_behaves_like 'a request that raises an error'
149
+ end
150
+ end
151
+
152
+ describe '#update' do
153
+ subject(:update) { described_class.new(client).update(id, params) }
154
+
155
+ let(:params) { {} }
156
+ let(:results) { update[0] }
157
+ let(:error_messages) { update[1] }
158
+
159
+ context 'with valid session id' do
160
+ let(:id) { :valid_id }
161
+
162
+ context 'with valid params' do
163
+ let(:params) { {question_id: '1234'} }
164
+
165
+ it_behaves_like 'an API request'
166
+ it_behaves_like 'a successful request'
167
+ it('returns the next question') do
168
+ expect(results).to have_key(:question)
169
+ end
170
+ end
171
+
172
+ context 'with invalid params' do
173
+ let(:params) { {question_id: 'invalid'} }
174
+
175
+ it_behaves_like 'an API request'
176
+ it('results is nil') { expect(results).to be_nil }
177
+
178
+ it('error messages array is populated') do
179
+ expect(error_messages.first.downcase).to eq('question with id (invalid) not found ')
180
+ end
181
+ end
182
+ end
183
+
184
+ context 'with invalid session id' do
185
+ let(:id) { :invalid_id }
186
+ let(:params) { {question_id: '1234'} }
187
+
188
+ it_behaves_like 'an API request'
189
+ it('results is nil') { expect(results).to be_nil }
190
+
191
+ it('error messages array is populated') do
192
+ expect(error_messages.first.downcase).to eq(
193
+ 'resource not found'
194
+ )
195
+ end
196
+ end
197
+ end
198
+
199
+ describe '#destroy' do
200
+ subject(:destroy) { described_class.new(client).destroy(id) }
201
+
202
+ let(:results) { destroy[0] }
203
+ let(:error_messages) { destroy[1] }
204
+
205
+ context 'with valid session id' do
206
+ let(:id) { :valid_id }
207
+
208
+ it_behaves_like 'an API request'
209
+ it_behaves_like 'a successful request'
210
+ it('results is nil') { expect(results).to be_nil }
211
+ it('error_messages is empty') { expect(error_messages).to be_empty }
212
+ end
213
+
214
+ context 'when missing session id' do
215
+ let(:id) { nil }
216
+
217
+ it_behaves_like 'a request that raises an error'
218
+ end
219
+
220
+ context 'with invalid session id' do
221
+ let(:id) { :invalid_id }
222
+
223
+ it_behaves_like 'an API request'
224
+ it('results is nil') { expect(results).to be_nil }
225
+
226
+ it('error_messages is not empty') do
227
+ expect(error_messages).not_to be_empty
228
+ end
229
+
230
+ it('error messages array is populated') do
231
+ expect(error_messages.first.downcase).to eq('session not found')
232
+ end
233
+ end
234
+ end
235
+ end