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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yaml +47 -0
- data/.github/workflows/release.yml +42 -42
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/Guardfile +1 -1
- data/README.md +6 -4
- data/finapps.gemspec +8 -7
- data/lib/finapps.rb +1 -0
- data/lib/finapps/rest/client.rb +2 -1
- data/lib/finapps/rest/consumers.rb +5 -5
- data/lib/finapps/rest/documents_orders.rb +23 -4
- data/lib/finapps/rest/documents_orders_notifications.rb +2 -2
- data/lib/finapps/rest/documents_uploads.rb +8 -0
- data/lib/finapps/rest/operators.rb +3 -3
- data/lib/finapps/rest/orders.rb +6 -6
- data/lib/finapps/rest/screenings.rb +64 -0
- data/lib/finapps/version.rb +1 -1
- data/spec/rest/api_request.rb +8 -0
- data/spec/rest/documents_orders_notifications_spec.rb +2 -2
- data/spec/rest/documents_orders_spec.rb +37 -31
- data/spec/rest/documents_uploads_spec.rb +53 -0
- data/spec/rest/screenings_spec.rb +235 -0
- data/spec/rest/signed_documents_downloads_spec.rb +4 -7
- data/spec/rest/verix/verix_documents_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/support/documents_uploads_routes.rb +39 -0
- data/spec/support/fake_api.rb +457 -456
- data/spec/support/fixtures/documents/retrieve_order.json +97 -0
- data/spec/support/fixtures/screening.json +26 -0
- data/spec/support/fixtures/screening_invalid_update.json +5 -0
- data/spec/support/fixtures/screening_list.json +25 -0
- data/spec/support/fixtures/session_not_found.json +5 -0
- data/spec/support/screenings_routes.rb +73 -0
- metadata +111 -79
- data/.github/workflows/main.yaml +0 -38
@@ -10,6 +10,10 @@ RSpec.describe FinApps::REST::SignedDocumentsDownloads do
|
|
10
10
|
let(:document) { described_class.new(api_client) }
|
11
11
|
|
12
12
|
describe '#show' do
|
13
|
+
subject(:show) do
|
14
|
+
document.show(:consumer_id, :signature_request_id)
|
15
|
+
end
|
16
|
+
|
13
17
|
context 'when missing signature request id' do
|
14
18
|
subject(:show) { document.show(:consumer_id, nil) }
|
15
19
|
|
@@ -26,13 +30,6 @@ RSpec.describe FinApps::REST::SignedDocumentsDownloads do
|
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
|
-
subject(:show) do
|
30
|
-
document.show(
|
31
|
-
:consumer_id,
|
32
|
-
:signature_request_id
|
33
|
-
)
|
34
|
-
end
|
35
|
-
|
36
33
|
it_behaves_like 'an API request'
|
37
34
|
it_behaves_like 'a successful request'
|
38
35
|
end
|
@@ -10,6 +10,8 @@ RSpec.describe FinApps::REST::VerixDocuments do
|
|
10
10
|
let(:document) { described_class.new(api_client) }
|
11
11
|
|
12
12
|
describe '#list' do
|
13
|
+
subject { document.list(:record_id) }
|
14
|
+
|
13
15
|
context 'when missing parameters' do
|
14
16
|
subject(:list) { document.list(nil) }
|
15
17
|
|
@@ -18,13 +20,13 @@ RSpec.describe FinApps::REST::VerixDocuments do
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
subject { document.list(:record_id) }
|
22
|
-
|
23
23
|
it_behaves_like 'an API request'
|
24
24
|
it_behaves_like 'a successful request'
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '#show' do
|
28
|
+
subject { document.show(:record_id, :document_id) }
|
29
|
+
|
28
30
|
context 'when missing record_id' do
|
29
31
|
subject(:show) { document.show(nil, :document_id) }
|
30
32
|
|
@@ -37,8 +39,6 @@ RSpec.describe FinApps::REST::VerixDocuments do
|
|
37
39
|
it { expect { show }.to raise_error(FinAppsCore::MissingArgumentsError) }
|
38
40
|
end
|
39
41
|
|
40
|
-
subject { document.show(:record_id, :document_id) }
|
41
|
-
|
42
42
|
it_behaves_like 'an API request'
|
43
43
|
it_behaves_like 'a successful request'
|
44
44
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -32,7 +32,7 @@ RSpec.configure do |config|
|
|
32
32
|
config.before do
|
33
33
|
base_url =
|
34
34
|
"#{FinAppsCore::REST::Defaults::DEFAULTS[:host]}/v#{FinAppsCore::REST::Defaults::API_VERSION}/"
|
35
|
-
stub_request(:any, /#{base_url}/).to_rack(::FakeApi)
|
35
|
+
stub_request(:any, /#{base_url}/).to_rack(::Fake::FakeApi)
|
36
36
|
end
|
37
37
|
WebMock.disable_net_connect!(allow: 'codeclimate.com')
|
38
38
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fake
|
4
|
+
module DocumentsUploadsRoutes
|
5
|
+
class << self
|
6
|
+
def included(base)
|
7
|
+
base.get("/#{base.version}/consumers/:consumer_id/documents/:doc_id?thumbnail=false") do
|
8
|
+
pdf_response 'signed_document.pdf'
|
9
|
+
end
|
10
|
+
destroy_routes(base)
|
11
|
+
destroy_by_consumer_routes(base)
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def destroy_routes(base)
|
16
|
+
base.delete("/#{base.version}/documents/orders/valid_order_id/valid_doc_id") { status 204 }
|
17
|
+
base.delete("/#{base.version}/documents/orders/valid_order_id/invalid_doc_id") do
|
18
|
+
json_response 404, 'resource_not_found.json'
|
19
|
+
end
|
20
|
+
base.delete("/#{base.version}/documents/orders/invalid_order_id/valid_doc_id") do
|
21
|
+
json_response 404, 'resource_not_found.json'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def destroy_by_consumer_routes(base)
|
26
|
+
base.delete("/#{base.version}/consumers/valid_consumer_id/documents/valid_document_id") { status 204 }
|
27
|
+
base.delete("/#{base.version}/consumers/invalid_consumer_id/documents/invalid_document_id") do
|
28
|
+
json_response 404, 'resource_not_found.json'
|
29
|
+
end
|
30
|
+
base.delete("/#{base.version}/consumers/invalid_consumer_id/documents/valid_document_id") do
|
31
|
+
json_response 404, 'resource_not_found.json'
|
32
|
+
end
|
33
|
+
base.delete("/#{base.version}/consumers/valid_consumer_id/documents/invalid_document_id") do
|
34
|
+
json_response 404, 'resource_not_found.json'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/support/fake_api.rb
CHANGED
@@ -1,522 +1,523 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'sinatra/base'
|
4
|
+
require_relative 'documents_uploads_routes'
|
5
|
+
require_relative 'screenings_routes'
|
6
|
+
|
7
|
+
module Fake
|
8
|
+
# the FakeApi class is used to mock API requests while testing.
|
9
|
+
class FakeApi < Sinatra::Base
|
10
|
+
def self.version
|
11
|
+
"v#{FinAppsCore::REST::Defaults::API_VERSION}"
|
12
|
+
end
|
4
13
|
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
"
|
9
|
-
|
10
|
-
|
11
|
-
# resource
|
12
|
-
post("/#{version}/resources") { json_response 201, 'resource.json' }
|
13
|
-
get("/#{version}/resources/:id") { json_response 200, 'resource.json' }
|
14
|
-
get("/#{version}/resources") { json_response 200, 'resources.json' }
|
15
|
-
put("/#{version}/resources") { json_response 201, 'resource.json' }
|
16
|
-
delete("/#{version}/resources/:id") { status 202 }
|
14
|
+
# resource
|
15
|
+
post("/#{version}/resources") { json_response 201, 'resource.json' }
|
16
|
+
get("/#{version}/resources/:id") { json_response 200, 'resource.json' }
|
17
|
+
get("/#{version}/resources") { json_response 200, 'resources.json' }
|
18
|
+
put("/#{version}/resources") { json_response 201, 'resource.json' }
|
19
|
+
delete("/#{version}/resources/:id") { status 202 }
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
# verix_metadata
|
22
|
+
get("/#{version}/v/metadata") do
|
23
|
+
json_response 200, 'verix/metadata.json'
|
24
|
+
end
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
# verix_records
|
27
|
+
get("/#{version}/v/record") do
|
28
|
+
json_response 200, 'verix/record/list.json'
|
29
|
+
end
|
30
|
+
post("/#{version}/v/record") do
|
31
|
+
json_response 200, 'verix/record/create.json'
|
32
|
+
end
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
34
|
+
# verix_pdf_documents
|
35
|
+
get("/#{version}/v/record/:record_id/file/:provider_id") do
|
36
|
+
pdf_response 'verix/document/document.pdf'
|
37
|
+
end
|
35
38
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
# verix_documents
|
40
|
+
get("/#{version}/v/record/:record_id/document") do
|
41
|
+
json_response 200, 'verix/document/show.json'
|
42
|
+
end
|
43
|
+
get("/#{version}/v/record/:record_id/document/:document_id") do
|
44
|
+
json_response 200, 'verix/document/list.json'
|
45
|
+
end
|
43
46
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
# plaid_webhook/metadata
|
48
|
+
get("/#{version}/p/metadata") do
|
49
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
50
|
+
if tenant_token == 'invalid_tenant_token'
|
51
|
+
json_response 404, 'invalid_tenant_credentials.json'
|
52
|
+
else
|
53
|
+
json_response 200, 'plaid/webhook.json'
|
54
|
+
end
|
51
55
|
end
|
52
|
-
end
|
53
56
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
get("/#{version}/p/institution/consumer/:consumer_institution_id/account") do
|
59
|
-
json_response 200, 'plaid/institution/consumer/show_accounts.json'
|
60
|
-
end
|
61
|
-
get("/#{version}/p/institution/consumer") do
|
62
|
-
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
63
|
-
if tenant_token == 'invalid_tenant_token'
|
64
|
-
json_response 404, 'resource_not_found.json'
|
65
|
-
else
|
66
|
-
json_response 200, 'plaid/institution/consumer/list.json'
|
57
|
+
# plaid_institution_consumer
|
58
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
59
|
+
json_response 200, 'plaid/institution/consumer/show.json'
|
67
60
|
end
|
68
|
-
|
69
|
-
|
70
|
-
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
71
|
-
if tenant_token == 'invalid_tenant_token'
|
72
|
-
json_response 404, 'resource_not_found.json'
|
73
|
-
else
|
74
|
-
json_response 200, 'plaid/institution/consumer/add.json'
|
61
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id/account") do
|
62
|
+
json_response 200, 'plaid/institution/consumer/show_accounts.json'
|
75
63
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
94
|
-
put("/#{version}/p/accounts/permissions") do
|
95
|
-
request.body.rewind
|
96
|
-
request_payload = JSON.parse request.body.read
|
97
|
-
if request_payload.is_a? Array
|
64
|
+
get("/#{version}/p/institution/consumer") do
|
65
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
66
|
+
if tenant_token == 'invalid_tenant_token'
|
67
|
+
json_response 404, 'resource_not_found.json'
|
68
|
+
else
|
69
|
+
json_response 200, 'plaid/institution/consumer/list.json'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
post("/#{version}/p/institution/consumer") do
|
73
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
74
|
+
if tenant_token == 'invalid_tenant_token'
|
75
|
+
json_response 404, 'resource_not_found.json'
|
76
|
+
else
|
77
|
+
json_response 200, 'plaid/institution/consumer/add.json'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
delete("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
98
81
|
status 204
|
99
|
-
else
|
100
|
-
json_response 400, 'invalid_request_body.json'
|
101
82
|
end
|
102
|
-
|
103
|
-
delete("/#{version}/p/accounts/permissions") do
|
104
|
-
request.body.rewind
|
105
|
-
request_payload = JSON.parse request.body.read
|
106
|
-
if request_payload.is_a? Array
|
83
|
+
put("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
107
84
|
status 204
|
108
|
-
else
|
109
|
-
json_response 400, 'invalid_request_body.json'
|
110
85
|
end
|
111
|
-
|
86
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id/token") do
|
87
|
+
json_response 200, 'plaid/institution/consumer/public_token.json'
|
88
|
+
end
|
112
89
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
90
|
+
# plaid_accounts
|
91
|
+
get("/#{version}/p/account") do
|
92
|
+
json_response 200, 'plaid/account/list.json'
|
93
|
+
end
|
94
|
+
get("/#{version}/p/account/:account_id") do
|
95
|
+
json_response 200, 'plaid/account/show.json'
|
96
|
+
end
|
97
|
+
put("/#{version}/p/accounts/permissions") do
|
98
|
+
request.body.rewind
|
99
|
+
request_payload = JSON.parse request.body.read
|
100
|
+
if request_payload.is_a? Array
|
101
|
+
status 204
|
102
|
+
else
|
103
|
+
json_response 400, 'invalid_request_body.json'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
delete("/#{version}/p/accounts/permissions") do
|
107
|
+
request.body.rewind
|
108
|
+
request_payload = JSON.parse request.body.read
|
109
|
+
if request_payload.is_a? Array
|
110
|
+
status 204
|
111
|
+
else
|
112
|
+
json_response 400, 'invalid_request_body.json'
|
113
|
+
end
|
114
|
+
end
|
117
115
|
|
118
|
-
|
119
|
-
|
116
|
+
# plaid_institution_logos
|
117
|
+
get("/#{version}/p/institution/logo/:inst_id") do
|
118
|
+
png_response 'plaid/institution/logo.png'
|
119
|
+
end
|
120
120
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
121
|
+
# version
|
122
|
+
get("/#{version}/version") { 'Version => 2.1.29-.20161208.172810' }
|
123
|
+
|
124
|
+
# tenants
|
125
|
+
get("/#{version}/settings/tenant") do
|
126
|
+
json_response 200, 'tenant_settings.json'
|
127
|
+
end
|
128
|
+
put("/#{version}/settings/tenant") do
|
129
|
+
request.body.rewind
|
130
|
+
request_payload = JSON.parse request.body.read
|
131
|
+
if request_payload['bad_params']
|
132
|
+
json_response 404, 'resource_not_found.json'
|
133
|
+
else
|
134
|
+
status 204
|
135
|
+
end
|
136
|
+
end
|
137
|
+
get("/#{version}/settings/app") do
|
138
|
+
json_response 200, 'tenant_app_settings.json'
|
139
|
+
end
|
140
|
+
put("/#{version}/settings/app") do
|
141
|
+
request.body.rewind
|
142
|
+
request_payload = JSON.parse request.body.read
|
143
|
+
if request_payload['pdf_statement_months']
|
144
|
+
status 204
|
145
|
+
else
|
146
|
+
json_response 404, 'resource_not_found.json'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# orders
|
151
|
+
post("/#{version}/orders/valid_token") do
|
152
|
+
json_response 200, 'order_token.json'
|
153
|
+
end
|
154
|
+
post("/#{version}/orders/invalid_token") do
|
129
155
|
json_response 404, 'resource_not_found.json'
|
130
|
-
else
|
131
|
-
status 204
|
132
156
|
end
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
request_payload = JSON.parse request.body.read
|
140
|
-
if request_payload['pdf_statement_months']
|
141
|
-
status 204
|
142
|
-
else
|
157
|
+
get("/#{version}/orders/valid_id") { json_response 200, 'order.json' }
|
158
|
+
get("/#{version}/orders") { json_response 200, 'orders.json' }
|
159
|
+
get("/#{version}/orders/valid_id/report.:format") do
|
160
|
+
json_response 200, 'order_report.json'
|
161
|
+
end
|
162
|
+
get("/#{version}/orders/invalid_id/report.:format") do
|
143
163
|
json_response 404, 'resource_not_found.json'
|
144
164
|
end
|
145
|
-
|
146
|
-
|
147
|
-
# orders
|
148
|
-
post("/#{version}/orders/valid_token") do
|
149
|
-
json_response 200, 'order_token.json'
|
150
|
-
end
|
151
|
-
post("/#{version}/orders/invalid_token") do
|
152
|
-
json_response 404, 'resource_not_found.json'
|
153
|
-
end
|
154
|
-
get("/#{version}/orders/valid_id") { json_response 200, 'order.json' }
|
155
|
-
get("/#{version}/orders") { json_response 200, 'orders.json' }
|
156
|
-
get("/#{version}/orders/valid_id/report.:format") do
|
157
|
-
json_response 200, 'order_report.json'
|
158
|
-
end
|
159
|
-
get("/#{version}/orders/invalid_id/report.:format") do
|
160
|
-
json_response 404, 'resource_not_found.json'
|
161
|
-
end
|
162
|
-
get("/#{version}/orders/valid_id/status") do
|
163
|
-
json_response 200, 'order_status.json'
|
164
|
-
end
|
165
|
-
get("/#{version}/orders/invalid_id/status") do
|
166
|
-
json_response 404, 'resource_not_found.json'
|
167
|
-
end
|
168
|
-
put("/#{version}/orders/valid_id/cancel") { status 204 }
|
169
|
-
put("/#{version}/orders/invalid_id/cancel") do
|
170
|
-
json_response 404, 'resource_not_found.json'
|
171
|
-
end
|
172
|
-
put("/#{version}/orders/valid_id/notify") { status 204 }
|
173
|
-
put("/#{version}/orders/invalid_id/notify") do
|
174
|
-
json_response 404, 'resource_not_found.json'
|
175
|
-
end
|
176
|
-
put("/#{version}/orders/valid_id/refresh") do
|
177
|
-
json_response 200, 'order_refresh.json'
|
178
|
-
end
|
179
|
-
put("/#{version}/orders/invalid_id/refresh") do
|
180
|
-
json_response 404, 'resource_not_found.json'
|
181
|
-
end
|
182
|
-
put("/#{version}/orders/invalid_id") do
|
183
|
-
json_response 404, 'resource_not_found.json'
|
184
|
-
end
|
185
|
-
put("/#{version}/orders/valid_id") { status 204 }
|
186
|
-
put("/#{version}/orders") do
|
187
|
-
request.body.rewind
|
188
|
-
request_payload = JSON.parse request.body.read
|
189
|
-
if request_payload['params'] == 'invalid'
|
190
|
-
json_response 400, 'invalid_request_body.json'
|
191
|
-
else
|
192
|
-
status 204
|
165
|
+
get("/#{version}/orders/valid_id/status") do
|
166
|
+
json_response 200, 'order_status.json'
|
193
167
|
end
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
json_response
|
200
|
-
|
201
|
-
|
168
|
+
get("/#{version}/orders/invalid_id/status") do
|
169
|
+
json_response 404, 'resource_not_found.json'
|
170
|
+
end
|
171
|
+
put("/#{version}/orders/valid_id/cancel") { status 204 }
|
172
|
+
put("/#{version}/orders/invalid_id/cancel") do
|
173
|
+
json_response 404, 'resource_not_found.json'
|
174
|
+
end
|
175
|
+
put("/#{version}/orders/valid_id/notify") { status 204 }
|
176
|
+
put("/#{version}/orders/invalid_id/notify") do
|
177
|
+
json_response 404, 'resource_not_found.json'
|
178
|
+
end
|
179
|
+
put("/#{version}/orders/valid_id/refresh") do
|
180
|
+
json_response 200, 'order_refresh.json'
|
181
|
+
end
|
182
|
+
put("/#{version}/orders/invalid_id/refresh") do
|
183
|
+
json_response 404, 'resource_not_found.json'
|
184
|
+
end
|
185
|
+
put("/#{version}/orders/invalid_id") do
|
186
|
+
json_response 404, 'resource_not_found.json'
|
187
|
+
end
|
188
|
+
put("/#{version}/orders/valid_id") { status 204 }
|
189
|
+
put("/#{version}/orders") do
|
190
|
+
request.body.rewind
|
191
|
+
request_payload = JSON.parse request.body.read
|
192
|
+
if request_payload['params'] == 'invalid'
|
193
|
+
json_response 400, 'invalid_request_body.json'
|
194
|
+
else
|
195
|
+
status 204
|
196
|
+
end
|
197
|
+
end
|
198
|
+
post("/#{version}/orders") do
|
199
|
+
request.body.rewind
|
200
|
+
request_payload = JSON.parse request.body.read
|
201
|
+
if %w[applicant institutions product].all? {|s| request_payload.key? s }
|
202
|
+
json_response 200, 'order_token.json'
|
203
|
+
else
|
204
|
+
json_response 400, 'invalid_request_body.json'
|
205
|
+
end
|
202
206
|
end
|
203
|
-
end
|
204
207
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
208
|
+
# documents_orders
|
209
|
+
get("/#{version}/documents/orders") do
|
210
|
+
if params[:filter]&.include?('"status":2')
|
211
|
+
json_response 200, 'documents_orders_none.json'
|
212
|
+
else
|
213
|
+
json_response 200, 'documents_orders.json'
|
214
|
+
end
|
211
215
|
end
|
212
|
-
|
213
|
-
get("/#{version}/documents/orders/valid_order_id") do
|
214
|
-
json_response 200, 'documents_order.json'
|
215
|
-
end
|
216
|
-
get("/#{version}/documents/orders/invalid_order_id") do
|
217
|
-
json_response 404, 'resource_not_found.json'
|
218
|
-
end
|
219
|
-
post("/#{version}/documents/orders") do
|
220
|
-
request.body.rewind
|
221
|
-
request_payload = JSON.parse request.body.read
|
222
|
-
if %w[applicant esign_documents tag].all? {|s| request_payload.key? s }
|
216
|
+
get("/#{version}/documents/orders/valid_order_id") do
|
223
217
|
json_response 200, 'documents_order.json'
|
224
|
-
else
|
225
|
-
json_response 400, 'invalid_request_body.json'
|
226
218
|
end
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
219
|
+
get("/#{version}/documents/retrieve_order") do
|
220
|
+
json_response 200, 'documents/retrieve_order.json'
|
221
|
+
end
|
222
|
+
get("/#{version}/documents/orders/invalid_order_id") do
|
223
|
+
json_response 404, 'resource_not_found.json'
|
224
|
+
end
|
225
|
+
post("/#{version}/documents/orders") do
|
226
|
+
request.body.rewind
|
227
|
+
request_payload = JSON.parse request.body.read
|
228
|
+
if %w[applicant esign_documents tag].all? {|s| request_payload.key? s }
|
229
|
+
json_response 200, 'documents_order.json'
|
230
|
+
else
|
231
|
+
json_response 400, 'invalid_request_body.json'
|
232
|
+
end
|
233
|
+
end
|
234
|
+
put("/#{version}/documents/orders/valid_order_id") do
|
235
|
+
request.body.rewind
|
236
|
+
request_payload = JSON.parse request.body.read
|
237
|
+
if request_payload['tag'] == 'invalid'
|
238
|
+
json_response 400, 'invalid_request_body.json'
|
239
|
+
else
|
240
|
+
status 204
|
241
|
+
end
|
242
|
+
end
|
243
|
+
put("/#{version}/documents/orders/invalid_order_id") do
|
244
|
+
json_response 400, 'invalid_order_id.json'
|
245
|
+
end
|
246
|
+
delete("/#{version}/documents/orders/valid_order_id") { status 204 }
|
247
|
+
delete("/#{version}/documents/orders/invalid_order_id") do
|
248
|
+
json_response 404, 'resource_not_found.json'
|
249
|
+
end
|
250
|
+
get("/#{version}/documents/orders/valid_order_id/sign_url/valid_signature_id") do
|
251
|
+
json_response 200, 'sign_url.json'
|
252
|
+
end
|
253
|
+
get("/#{version}/documents/orders/invalid_order_id/sign_url/valid_signature_id") do
|
254
|
+
json_response 400, 'invalid_order_id.json'
|
255
|
+
end
|
256
|
+
get("/#{version}/documents/orders/valid_order_id/sign_url/invalid_signature_id") do
|
257
|
+
json_response 404, 'invalid_signature_id.json'
|
235
258
|
end
|
236
|
-
end
|
237
|
-
put("/#{version}/documents/orders/invalid_order_id") do
|
238
|
-
json_response 400, 'invalid_order_id.json'
|
239
|
-
end
|
240
|
-
delete("/#{version}/documents/orders/valid_order_id") { status 204 }
|
241
|
-
delete("/#{version}/documents/orders/invalid_order_id") do
|
242
|
-
json_response 404, 'resource_not_found.json'
|
243
|
-
end
|
244
|
-
get("/#{version}/documents/orders/valid_order_id/sign_url/valid_signature_id") do
|
245
|
-
json_response 200, 'sign_url.json'
|
246
|
-
end
|
247
|
-
get("/#{version}/documents/orders/invalid_order_id/sign_url/valid_signature_id") do
|
248
|
-
json_response 400, 'invalid_order_id.json'
|
249
|
-
end
|
250
|
-
get("/#{version}/documents/orders/valid_order_id/sign_url/invalid_signature_id") do
|
251
|
-
json_response 404, 'invalid_signature_id.json'
|
252
|
-
end
|
253
259
|
|
254
|
-
|
255
|
-
|
256
|
-
pdf_response 'signed_document.pdf'
|
257
|
-
end
|
258
|
-
delete("/#{version}/documents/orders/valid_order_id/valid_doc_id") { status 204 }
|
259
|
-
delete("/#{version}/documents/orders/valid_order_id/invalid_doc_id") do
|
260
|
-
json_response 404, 'resource_not_found.json'
|
261
|
-
end
|
262
|
-
delete("/#{version}/documents/orders/invalid_order_id/valid_doc_id") do
|
263
|
-
json_response 404, 'resource_not_found.json'
|
264
|
-
end
|
260
|
+
# documents_uploads
|
261
|
+
include DocumentsUploadsRoutes
|
265
262
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
263
|
+
# documents orders notifications
|
264
|
+
post("/#{version}/documents/orders/valid_id/notify") { status 204 }
|
265
|
+
post("/#{version}/documents/orders/invalid_id/notify") do
|
266
|
+
json_response 400, 'invalid_order_id.json'
|
267
|
+
end
|
271
268
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
269
|
+
# signed documents downloads
|
270
|
+
get("/#{version}/consumers/:consumer_id/documents/:signature_request_id") do
|
271
|
+
pdf_response 'signed_document.pdf'
|
272
|
+
end
|
276
273
|
|
277
|
-
|
278
|
-
|
274
|
+
# esign_templates
|
275
|
+
get("/#{version}/esign_templates") { json_response 200, 'esign_templates.json' }
|
279
276
|
|
280
|
-
|
281
|
-
|
277
|
+
# document_upload_types
|
278
|
+
get("/#{version}/documents/upload_types") { json_response 200, 'upload_types.json' }
|
282
279
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
end
|
290
|
-
get("/#{version}/consumers/invalid_public_id") do
|
291
|
-
json_response 404, 'resource_not_found.json'
|
292
|
-
end
|
293
|
-
post("/#{version}/consumers") do
|
294
|
-
request.body.rewind
|
295
|
-
request_payload = JSON.parse request.body.read
|
296
|
-
if request_payload['password']
|
297
|
-
json_response 201, 'user.json'
|
298
|
-
else
|
299
|
-
json_response 400, 'invalid_request_body.json'
|
280
|
+
# screenings
|
281
|
+
include ScreeningsRoutes
|
282
|
+
|
283
|
+
# consumers
|
284
|
+
get("/#{version}/consumers") do
|
285
|
+
json_response 200, 'users.json'
|
300
286
|
end
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
287
|
+
get("/#{version}/consumers/valid_public_id") do
|
288
|
+
json_response 200, 'user.json'
|
289
|
+
end
|
290
|
+
get("/#{version}/consumers/invalid_public_id") do
|
291
|
+
json_response 404, 'resource_not_found.json'
|
292
|
+
end
|
293
|
+
post("/#{version}/consumers") do
|
294
|
+
request.body.rewind
|
295
|
+
request_payload = JSON.parse request.body.read
|
296
|
+
if request_payload['password']
|
297
|
+
json_response 201, 'user.json'
|
298
|
+
else
|
299
|
+
json_response 400, 'invalid_request_body.json'
|
300
|
+
end
|
301
|
+
end
|
302
|
+
put("/#{version}/consumers/valid_public_id") { status 204 }
|
303
|
+
put("/#{version}/consumers/invalid_public_id") do
|
304
|
+
json_response 400, 'invalid_user_id.json'
|
305
|
+
end
|
306
|
+
put("/#{version}/consumers/valid_public_id/password") do
|
307
|
+
json_response 200, 'user.json'
|
308
|
+
end
|
309
|
+
put("/#{version}/consumers/invalid_public_id/password") do
|
310
|
+
json_response 404, 'resource_not_found.json'
|
311
|
+
end
|
312
|
+
delete("/#{version}/consumers/valid_public_id") { status 204 }
|
313
|
+
delete("/#{version}/consumers/invalid_public_id") do
|
314
|
+
json_response 404, 'resource_not_found.json'
|
315
|
+
end
|
316
|
+
post("/#{version}/logout") { status 204 }
|
317
317
|
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
json_response 200, 'operator.json'
|
330
|
-
end
|
331
|
-
put("/#{version}/operators/invalid_id") do
|
332
|
-
json_response 404, 'resource_not_found.json'
|
333
|
-
end
|
334
|
-
put("/#{version}/operators/valid_id") { json_response 200, 'operator.json' }
|
335
|
-
put("/#{version}/operators/valid_id/assign") { status 204 }
|
336
|
-
put("/#{version}/operators/invalid_id/assign") do
|
337
|
-
json_response 404, 'resource_not_found.json'
|
338
|
-
end
|
339
|
-
post("/#{version}/operators/password/forgot") do
|
340
|
-
json_response 200, 'operator_forgot_password.json'
|
341
|
-
end
|
342
|
-
post("/#{version}/operators/password/reset") do
|
343
|
-
request.body.rewind
|
344
|
-
request_payload = JSON.parse request.body.read
|
345
|
-
if request_payload['params'] == 'valid'
|
318
|
+
# operators
|
319
|
+
get("/#{version}/operators") { json_response 200, 'operator_list.json' }
|
320
|
+
get("/#{version}/operators/invalid_id") do
|
321
|
+
json_response 404, 'resource_not_found.json'
|
322
|
+
end
|
323
|
+
get("/#{version}/operators/valid_id") { json_response 200, 'operator.json' }
|
324
|
+
delete("/#{version}/operators/invalid_id") do
|
325
|
+
json_response 404, 'resource_not_found.json'
|
326
|
+
end
|
327
|
+
delete("/#{version}/operators/valid_id") { status 204 }
|
328
|
+
post("/#{version}/operators/password/change") do
|
346
329
|
json_response 200, 'operator.json'
|
347
|
-
else
|
348
|
-
json_response 400, 'invalid_request_body.json'
|
349
330
|
end
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
331
|
+
put("/#{version}/operators/invalid_id") do
|
332
|
+
json_response 404, 'resource_not_found.json'
|
333
|
+
end
|
334
|
+
put("/#{version}/operators/valid_id") { json_response 200, 'operator.json' }
|
335
|
+
put("/#{version}/operators/valid_id/assign") { status 204 }
|
336
|
+
put("/#{version}/operators/invalid_id/assign") do
|
337
|
+
json_response 404, 'resource_not_found.json'
|
338
|
+
end
|
339
|
+
post("/#{version}/operators/password/forgot") do
|
340
|
+
json_response 200, 'operator_forgot_password.json'
|
341
|
+
end
|
342
|
+
post("/#{version}/operators/password/reset") do
|
343
|
+
request.body.rewind
|
344
|
+
request_payload = JSON.parse request.body.read
|
345
|
+
if request_payload['params'] == 'valid'
|
346
|
+
json_response 200, 'operator.json'
|
347
|
+
else
|
348
|
+
json_response 400, 'invalid_request_body.json'
|
349
|
+
end
|
350
|
+
end
|
351
|
+
post("/#{version}/operators") do
|
352
|
+
request.body.rewind
|
353
|
+
request_payload = JSON.parse request.body.read
|
354
|
+
if request_payload['params'] == 'valid'
|
355
|
+
json_response 201, 'operator.json'
|
356
|
+
else
|
357
|
+
json_response 400, 'invalid_request_body.json'
|
358
|
+
end
|
358
359
|
end
|
359
|
-
end
|
360
360
|
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
361
|
+
# session
|
362
|
+
post("/#{version}/login") do
|
363
|
+
request.body.rewind
|
364
|
+
request_payload = JSON.parse request.body.read
|
365
|
+
if request_payload['password'] == 'valid_password'
|
366
|
+
json_response(200, 'user.json')
|
367
|
+
else
|
368
|
+
json_response(401, 'unauthorized.json')
|
369
|
+
end
|
369
370
|
end
|
370
|
-
|
371
|
-
post("/#{version}/operators/login") { json_response 200, 'operator.json' }
|
371
|
+
post("/#{version}/operators/login") { json_response 200, 'operator.json' }
|
372
372
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
373
|
+
# password resets
|
374
|
+
post("/#{version}/tenant/valid_user_id/password") do
|
375
|
+
json_response 200, 'password_reset_token.json'
|
376
|
+
end
|
377
|
+
post("/#{version}/tenant/invalid_user_id/password") do
|
378
|
+
json_response 404, 'resource_not_found.json'
|
379
|
+
end
|
380
|
+
put("/#{version}/tenant/valid_user_id/password") do
|
381
|
+
request.body.rewind
|
382
|
+
request_payload = JSON.parse request.body.read
|
383
|
+
if request_payload['token'] == 'valid_token'
|
384
|
+
json_response(200, 'user.json')
|
385
|
+
else
|
386
|
+
json_response(400, 'invalid_request_body.json')
|
387
|
+
end
|
388
|
+
end
|
389
|
+
put("/#{version}/tenant/invalid_user_id/password") do
|
390
|
+
json_response 404, 'resource_not_found.json'
|
387
391
|
end
|
388
|
-
end
|
389
|
-
put("/#{version}/tenant/invalid_user_id/password") do
|
390
|
-
json_response 404, 'resource_not_found.json'
|
391
|
-
end
|
392
392
|
|
393
|
-
|
394
|
-
|
393
|
+
# products
|
394
|
+
get("/#{version}/products") { json_response 200, 'products.json' }
|
395
395
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
396
|
+
# portfolios
|
397
|
+
get("/#{version}/portfolios") { json_response 200, 'portfolios.json' }
|
398
|
+
get("/#{version}/portfolios/valid_id") { json_response 200, 'portfolio.json' }
|
399
|
+
get("/#{version}/portfolios/invalid_id") do
|
400
|
+
json_response 404, 'resource_not_found.json'
|
401
|
+
end
|
402
|
+
post("/#{version}/portfolios") do
|
403
|
+
request.body.rewind
|
404
|
+
request_payload = JSON.parse request.body.read
|
405
|
+
if request_payload['product'] == 'invalid'
|
406
|
+
json_response(400, 'invalid_request_body.json')
|
407
|
+
else
|
408
|
+
json_response(200, 'portfolio.json')
|
409
|
+
end
|
410
|
+
end
|
411
|
+
put("/#{version}/portfolios/valid_id") { json_response 200, 'portfolio.json' }
|
412
|
+
put("/#{version}/portfolios/invalid_id") do
|
413
|
+
json_response 404, 'resource_not_found.json'
|
414
|
+
end
|
415
|
+
delete("/#{version}/portfolios/valid_id") { status 204 }
|
416
|
+
delete("/#{version}/portfolios/invalid_id") do
|
417
|
+
json_response 404, 'resource_not_found.json'
|
409
418
|
end
|
410
|
-
end
|
411
|
-
put("/#{version}/portfolios/valid_id") { json_response 200, 'portfolio.json' }
|
412
|
-
put("/#{version}/portfolios/invalid_id") do
|
413
|
-
json_response 404, 'resource_not_found.json'
|
414
|
-
end
|
415
|
-
delete("/#{version}/portfolios/valid_id") { status 204 }
|
416
|
-
delete("/#{version}/portfolios/invalid_id") do
|
417
|
-
json_response 404, 'resource_not_found.json'
|
418
|
-
end
|
419
419
|
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
420
|
+
# alert definitions
|
421
|
+
get("/#{version}/portfolio/alerts/definitions") do
|
422
|
+
json_response 200, 'alert_definitions.json'
|
423
|
+
end
|
424
|
+
get("/#{version}/portfolio/alerts/definitions/valid_id") do
|
425
|
+
json_response 200, 'alert_definition.json'
|
426
|
+
end
|
427
|
+
get("/#{version}/portfolio/alerts/definitions/invalid_id") do
|
428
|
+
json_response 404, 'resource_not_found.json'
|
429
|
+
end
|
430
430
|
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
431
|
+
# alert occurrences
|
432
|
+
get("/#{version}/portfolio/alerts/occurrences") do
|
433
|
+
json_response 200, 'alert_occurrences.json'
|
434
|
+
end
|
435
435
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
436
|
+
# portfolios alerts
|
437
|
+
get("/#{version}/portfolios/valid_id/alerts") do
|
438
|
+
json_response 200, 'portfolios_alerts.json'
|
439
|
+
end
|
440
|
+
get("/#{version}/portfolios/invalid_id/alerts") do
|
441
|
+
json_response 404, 'resource_not_found.json'
|
442
|
+
end
|
443
|
+
put("/#{version}/portfolios/valid_id/alerts/valid_id") { status 204 }
|
444
|
+
put("/#{version}/portfolios/invalid_id/alerts/invalid_id") do
|
445
|
+
json_response 404, 'resource_not_found.json'
|
446
|
+
end
|
447
|
+
delete("/#{version}/portfolios/valid_id/alerts/valid_id") { status 204 }
|
448
|
+
delete("/#{version}/portfolios/invalid_id/alerts/invalid_id") do
|
449
|
+
json_response 404, 'resource_not_found.json'
|
450
|
+
end
|
451
451
|
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
452
|
+
# portfolios consumers
|
453
|
+
get("/#{version}/portfolios/valid_id/consumers") do
|
454
|
+
json_response 200, 'portfolios_consumers.json'
|
455
|
+
end
|
456
|
+
get("/#{version}/portfolios/invalid_id/consumers") do
|
457
|
+
json_response 404, 'resource_not_found.json'
|
458
|
+
end
|
459
|
+
post("/#{version}/portfolios/valid_id/consumers") { status 204 }
|
460
|
+
post("/#{version}/portfolios/invalid_id/consumers") do
|
461
|
+
json_response 400, 'multiple_consumer_subscribe_error.json'
|
462
|
+
end
|
463
|
+
post("/#{version}/portfolios/valid_id/consumers/valid_id") { status 204 }
|
464
|
+
post("/#{version}/portfolios/invalid_id/consumers/invalid_id") do
|
465
|
+
json_response 400, 'single_consumer_subscribe_error.json'
|
466
|
+
end
|
467
|
+
delete("/#{version}/portfolios/valid_id/consumers/valid_id") { status 204 }
|
468
|
+
delete("/#{version}/portfolios/invalid_id/consumers/invalid_id") do
|
469
|
+
json_response 404, 'resource_not_found.json'
|
470
|
+
end
|
471
471
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
472
|
+
# portfolios available consumers
|
473
|
+
get("/#{version}/portfolios/:id/consumers/available") do
|
474
|
+
json_response 200, 'portfolios_available_consumers.json'
|
475
|
+
end
|
476
476
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
477
|
+
# consumers portfolios
|
478
|
+
get("/#{version}/consumers/valid_id/portfolios") do
|
479
|
+
json_response 200, 'portfolios.json'
|
480
|
+
end
|
481
|
+
get("/#{version}/consumers/invalid_id/portfolios") do
|
482
|
+
json_response 404, 'resource_not_found.json'
|
483
|
+
end
|
484
484
|
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
485
|
+
# portfolio reports
|
486
|
+
get("/#{version}/portfolio/reports") do
|
487
|
+
json_response 200, 'portfolio_reports.json'
|
488
|
+
end
|
489
489
|
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
490
|
+
# relevance
|
491
|
+
get("/#{version}/relevance/ruleset/names") do
|
492
|
+
json_response 200, 'relevance_ruleset_names.json'
|
493
|
+
end
|
494
494
|
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
495
|
+
# errors
|
496
|
+
get("/#{version}/client_error") { json_response 400, 'error.json' }
|
497
|
+
get("/#{version}/server_error") { status 500 }
|
498
|
+
get("/#{version}/proxy_error") { status 407 }
|
499
499
|
|
500
|
-
|
501
|
-
|
500
|
+
# timeout
|
501
|
+
get("/#{version}/orders/timeout") { status 419 }
|
502
502
|
|
503
|
-
|
503
|
+
private
|
504
504
|
|
505
|
-
|
506
|
-
|
507
|
-
|
505
|
+
def json_response(response_code, file_name)
|
506
|
+
http_response :json, response_code, file_name
|
507
|
+
end
|
508
508
|
|
509
|
-
|
510
|
-
|
511
|
-
|
509
|
+
def png_response(file_name)
|
510
|
+
http_response :png, 200, file_name
|
511
|
+
end
|
512
512
|
|
513
|
-
|
514
|
-
|
515
|
-
|
513
|
+
def pdf_response(file_name)
|
514
|
+
http_response 'application/pdf', 200, file_name
|
515
|
+
end
|
516
516
|
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
517
|
+
def http_response(content_type, response_code, file_name)
|
518
|
+
content_type content_type
|
519
|
+
status response_code
|
520
|
+
File.open("#{File.dirname(__FILE__)}/fixtures/#{file_name}").read
|
521
|
+
end
|
521
522
|
end
|
522
523
|
end
|