finapps 5.0.46 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinApps
4
- VERSION = '5.0.46'
4
+ VERSION = '5.3.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
@@ -118,11 +118,14 @@ RSpec.describe FinApps::REST::Consumers do
118
118
 
119
119
  it 'builds query and sends proper request' do
120
120
  list
121
- url = "#{versioned_api_path}/consumers?"\
122
- 'filter=%7B%22$or%22:%5B%7B%22email%22:%22term%22%7D,' \
123
- '%7B%22first_name%22:%22term%22%7D,'\
124
- '%7B%22last_name%22:%22term%22%7D%5D%7D&page=2&requested=25' \
125
- '&sort=date_created'
121
+ filter = '{"$or":['\
122
+ '{"external_id":"term"},'\
123
+ '{"email":"term"},'\
124
+ '{"first_name":"term"},'\
125
+ '{"last_name":"term"}'\
126
+ ']}'
127
+ query = "?filter=#{filter}&page=2&requested=25&sort=date_created"
128
+ url = "#{versioned_api_path}/consumers#{query}"
126
129
  expect(WebMock).to have_requested(:get, url)
127
130
  end
128
131
 
@@ -138,13 +141,18 @@ RSpec.describe FinApps::REST::Consumers do
138
141
 
139
142
  it 'treats space as start of a new query for first and last name' do
140
143
  list
141
- url = "#{versioned_api_path}/consumers?"\
142
- 'filter=%7B%22$or%22:%5B%7B%22email%22:%22Two%20terms%22%7D,'\
143
- '%7B%22first_name%22:%22Two%20terms%22%7D,'\
144
- '%7B%22last_name%22:%22Two%20terms%22%7D,%7B%22first_name%22:'\
145
- '%22Two%22%7D,%7B%22last_name%22:%22Two%22%7D,'\
146
- '%7B%22first_name%22:%22terms%22%7D,%7B%22last_name%22:'\
147
- '%22terms%22%7D%5D%7D&page=2&requested=25&sort=date_created'
144
+ filter = '{"$or":['\
145
+ '{"external_id":"Two terms"},'\
146
+ '{"email":"Two terms"},'\
147
+ '{"first_name":"Two terms"},'\
148
+ '{"last_name":"Two terms"},'\
149
+ '{"first_name":"Two"},'\
150
+ '{"last_name":"Two"},'\
151
+ '{"first_name":"terms"},'\
152
+ '{"last_name":"terms"}'\
153
+ ']}'
154
+ query = "?filter=#{filter}&page=2&requested=25&sort=date_created"
155
+ url = "#{versioned_api_path}/consumers#{query}"
148
156
  expect(WebMock).to have_requested(:get, url)
149
157
  end
150
158
  end
@@ -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
 
@@ -60,33 +52,30 @@ RSpec.describe FinApps::REST::DocumentsOrders do
60
52
  "#{versioned_api_path}/documents/orders?"\
61
53
  'filter=%7B%22$or%22:%5B%7B%22applicant.email%22:'\
62
54
  '%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 '
55
+ '%7B%22applicant.last_name%22:%22term%22%7D,'\
56
+ '%7B%22applicant.external_id%22:%22term%22%7D,%7B%22reference_no%22:'\
57
+ '%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,'\
58
+ '%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=tag'
68
59
 
69
60
  expect(WebMock).to have_requested(:get, url)
70
61
  end
71
62
 
72
63
  context 'with search term containing spaces' do
73
- let(:params) { {"searchTerm": 'Blue Jay', "page": 2} }
64
+ let(:params) { {searchTerm: 'Blue Jay', page: 2} }
74
65
 
75
66
  it 'builds query and sends proper request' do
76
67
  list
77
68
  url =
78
69
  "#{versioned_api_path}/documents/orders?"\
79
70
  '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'
71
+ '%22Blue%20Jay%22%7D,%7B%22applicant.first_name%22:'\
72
+ '%22Blue%20Jay%22%7D,%7B%22applicant.last_name%22:'\
73
+ '%22Blue%20Jay%22%7D,%7B%22applicant.external_id%22:'\
74
+ '%22Blue%20Jay%22%7D,%7B%22reference_no%22:%7B%22$regex%22:'\
75
+ '%22%5EBlue%20Jay%22,%22$options%22:%22i%22%7D%7D,'\
76
+ '%7B%22applicant.first_name%22:%22Blue%22%7D,%7B%22'\
77
+ 'applicant.last_name%22:%22Blue%22%7D,%7B%22applicant.first_name%22:'\
78
+ '%22Jay%22%7D,%7B%22applicant.last_name%22:%22Jay%22%7D%5D%7D&page=2'
90
79
 
91
80
  expect(WebMock).to have_requested(:get, url)
92
81
  end
@@ -182,17 +171,17 @@ RSpec.describe FinApps::REST::DocumentsOrders do
182
171
  context 'with valid params' do
183
172
  let(:params) do
184
173
  {
185
- "applicant": {
186
- "email": 'validemail@financialapps.com',
187
- "first_name": 'Emily',
188
- "last_name": 'Macs',
189
- "role": 'patient'
174
+ applicant: {
175
+ email: 'validemail@financialapps.com',
176
+ first_name: 'Emily',
177
+ last_name: 'Macs',
178
+ role: 'patient'
190
179
  },
191
- "esign_documents": [
180
+ esign_documents: [
192
181
  'temp-id'
193
182
  ],
194
- "reference_no": 'REFNO',
195
- "tag": 'new'
183
+ reference_no: 'REFNO',
184
+ tag: 'new'
196
185
  }
197
186
  end
198
187
 
@@ -208,13 +197,13 @@ RSpec.describe FinApps::REST::DocumentsOrders do
208
197
  context 'with invalid params' do
209
198
  let(:params) do
210
199
  {
211
- "applicant": {
212
- "email": 'validemail@financialapps.com',
213
- "first_name": 'Emily',
214
- "last_name": 'Macs',
215
- "role": 'patient'
200
+ applicant: {
201
+ email: 'validemail@financialapps.com',
202
+ first_name: 'Emily',
203
+ last_name: 'Macs',
204
+ role: 'patient'
216
205
  },
217
- "reference_no": 'REFNO'
206
+ reference_no: 'REFNO'
218
207
  }
219
208
  end
220
209
 
@@ -244,7 +233,7 @@ RSpec.describe FinApps::REST::DocumentsOrders do
244
233
  let(:id) { :valid_order_id }
245
234
 
246
235
  context 'with valid params' do
247
- let(:params) { {"tag": 'pending'} }
236
+ let(:params) { {tag: 'pending'} }
248
237
 
249
238
  it_behaves_like 'an API request'
250
239
  it_behaves_like 'a successful request'
@@ -252,7 +241,7 @@ RSpec.describe FinApps::REST::DocumentsOrders do
252
241
  end
253
242
 
254
243
  context 'with invalid params' do
255
- let(:params) { {"tag": 'invalid'} }
244
+ let(:params) { {tag: 'invalid'} }
256
245
 
257
246
  it_behaves_like 'an API request'
258
247
  it('results is nil') { expect(results).to be_nil }
@@ -0,0 +1,251 @@
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
+ let(:results) { subject[0] }
10
+ let(:error_messages) { subject[1] }
11
+
12
+ describe '#list' do
13
+ subject(:list) { described_class.new(client).list(params) }
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
+ context 'with valid id' do
83
+ let(:id) { :valid_id }
84
+
85
+ it_behaves_like 'an API request'
86
+ it_behaves_like 'a successful request'
87
+ it('performs a get and returns the response') do
88
+ expect(results).to have_key(:session)
89
+ end
90
+ end
91
+
92
+ context 'with invalid id' do
93
+ let(:id) { :invalid_id }
94
+
95
+ it { expect(results).to be_nil }
96
+ it { expect(error_messages).not_to be_empty }
97
+ end
98
+
99
+ context 'when missing id' do
100
+ let(:id) { nil }
101
+
102
+ it_behaves_like 'a request that raises an error'
103
+ end
104
+ end
105
+
106
+ describe '#last' do
107
+ subject(:last) { described_class.new(client).last(consumer_id) }
108
+
109
+ context 'with valid consumer_id' do
110
+ let(:consumer_id) { :valid_consumer_id }
111
+
112
+ it_behaves_like 'an API request'
113
+ it_behaves_like 'a successful request'
114
+ it('results have an :s_id node') do
115
+ expect(results).to have_key(:s_id)
116
+ end
117
+ end
118
+
119
+ context 'with invalid consumer_id' do
120
+ let(:consumer_id) { :invalid_consumer_id }
121
+
122
+ it { expect(results).to be_nil }
123
+ it { expect(error_messages).not_to be_empty }
124
+ end
125
+
126
+ context 'when missing consumer_id' do
127
+ let(:consumer_id) { nil }
128
+
129
+ it_behaves_like 'a request that raises an error'
130
+ end
131
+ end
132
+
133
+ describe '#create' do
134
+ subject(:create) { described_class.new(client).create(params) }
135
+
136
+ context 'with valid params' do
137
+ let(:params) do
138
+ {
139
+ email: 'validemail@financialapps.com',
140
+ first_name: 'Geo',
141
+ last_name: 'Metric',
142
+ public_id: '1234'
143
+ }
144
+ end
145
+
146
+ it_behaves_like 'an API request'
147
+ it_behaves_like 'a successful request'
148
+ it('results is a Hash') { expect(results).to be_a(Hash) }
149
+
150
+ it('performs a post and returns the response') do
151
+ expect(results).to have_key(:question)
152
+ end
153
+ end
154
+
155
+ context 'with invalid params' do
156
+ let(:params) { {params: 'invalid'} }
157
+
158
+ it { expect { create }.not_to raise_error }
159
+ it('results is nil') { expect(results).to be_nil }
160
+
161
+ it('error messages array is populated') do
162
+ expect(error_messages.first.downcase).to eq('invalid request body')
163
+ end
164
+ end
165
+
166
+ context 'with missing params' do
167
+ let(:params) { nil }
168
+
169
+ it_behaves_like 'a request that raises an error'
170
+ end
171
+ end
172
+
173
+ describe '#update' do
174
+ subject(:update) { described_class.new(client).update(id, params) }
175
+
176
+ let(:params) { {} }
177
+
178
+ context 'with valid session id' do
179
+ let(:id) { :valid_id }
180
+
181
+ context 'with valid params' do
182
+ let(:params) { {question_id: '1234'} }
183
+
184
+ it_behaves_like 'an API request'
185
+ it_behaves_like 'a successful request'
186
+ it('returns the next question') do
187
+ expect(results).to have_key(:question)
188
+ end
189
+ end
190
+
191
+ context 'with invalid params' do
192
+ let(:params) { {question_id: 'invalid'} }
193
+
194
+ it_behaves_like 'an API request'
195
+ it('results is nil') { expect(results).to be_nil }
196
+
197
+ it('error messages array is populated') do
198
+ expect(error_messages.first.downcase).to eq('question with id (invalid) not found ')
199
+ end
200
+ end
201
+ end
202
+
203
+ context 'with invalid session id' do
204
+ let(:id) { :invalid_id }
205
+ let(:params) { {question_id: '1234'} }
206
+
207
+ it_behaves_like 'an API request'
208
+ it('results is nil') { expect(results).to be_nil }
209
+
210
+ it('error messages array is populated') do
211
+ expect(error_messages.first.downcase).to eq(
212
+ 'resource not found'
213
+ )
214
+ end
215
+ end
216
+ end
217
+
218
+ describe '#destroy' do
219
+ subject(:destroy) { described_class.new(client).destroy(id) }
220
+
221
+ context 'with valid session id' do
222
+ let(:id) { :valid_id }
223
+
224
+ it_behaves_like 'an API request'
225
+ it_behaves_like 'a successful request'
226
+ it('results is nil') { expect(results).to be_nil }
227
+ it('error_messages is empty') { expect(error_messages).to be_empty }
228
+ end
229
+
230
+ context 'when missing session id' do
231
+ let(:id) { nil }
232
+
233
+ it_behaves_like 'a request that raises an error'
234
+ end
235
+
236
+ context 'with invalid session id' do
237
+ let(:id) { :invalid_id }
238
+
239
+ it_behaves_like 'an API request'
240
+ it('results is nil') { expect(results).to be_nil }
241
+
242
+ it('error_messages is not empty') do
243
+ expect(error_messages).not_to be_empty
244
+ end
245
+
246
+ it('error messages array is populated') do
247
+ expect(error_messages.first.downcase).to eq('session not found')
248
+ end
249
+ end
250
+ end
251
+ end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'sinatra/base'
4
4
  require_relative 'documents_uploads_routes'
5
+ require_relative 'screenings_routes'
6
+
5
7
  module Fake
6
8
  # the FakeApi class is used to mock API requests while testing.
7
9
  class FakeApi < Sinatra::Base
@@ -275,6 +277,9 @@ module Fake
275
277
  # document_upload_types
276
278
  get("/#{version}/documents/upload_types") { json_response 200, 'upload_types.json' }
277
279
 
280
+ # screenings
281
+ include ScreeningsRoutes
282
+
278
283
  # consumers
279
284
  get("/#{version}/consumers") do
280
285
  json_response 200, 'users.json'
@@ -497,6 +502,10 @@ module Fake
497
502
 
498
503
  private
499
504
 
505
+ def resource_not_found
506
+ json_response 404, 'resource_not_found.json'
507
+ end
508
+
500
509
  def json_response(response_code, file_name)
501
510
  http_response :json, response_code, file_name
502
511
  end