finapps 5.0.38 → 5.0.46
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/main.yaml +4 -3
- data/.github/workflows/release-drafter.yml +1 -0
- data/.github/workflows/release.yml +54 -0
- data/README.md +6 -4
- data/finapps.gemspec +0 -1
- data/lib/finapps/rest/documents_orders.rb +20 -1
- data/lib/finapps/rest/documents_orders_notifications.rb +2 -2
- data/lib/finapps/rest/documents_uploads.rb +8 -0
- data/lib/finapps/version.rb +1 -1
- data/spec/rest/documents_orders_notifications_spec.rb +2 -2
- data/spec/rest/documents_orders_spec.rb +20 -6
- data/spec/rest/documents_uploads_spec.rb +53 -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 +452 -456
- data/spec/support/fixtures/documents/retrieve_order.json +97 -0
- metadata +40 -57
- data/lib/tasks/releaser.rake +0 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4501dd349460d436671d161a817432d9336cdb1722d2465baef3d65a7bb4d10f
|
|
4
|
+
data.tar.gz: cea911d0e0449e505aa4fd6229f0ca446fc45519a69b8955f22e8789a5b94132
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e4e89f43a67412901a05f0cd420973e7c87d2e14fb86191b966ca2381d2af0ee8de1df43a3db2b1a3b2b22df616eab186c49fde9f2373f156e9f8e5f3cbdfad7
|
|
7
|
+
data.tar.gz: bac2c749e5c60e123dfb02d5d767b1e8930ae9ef2178a3c9e1be6aff2fa55c596b12d9e64817c228839eb0c1b7aab1a9534ecabee90f1ab5ab667c0d87257910
|
data/.github/workflows/main.yaml
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Continuous Integration
|
|
2
2
|
|
|
3
3
|
on: [push, pull_request]
|
|
4
4
|
|
|
5
5
|
jobs:
|
|
6
6
|
ci:
|
|
7
|
+
if: "!contains(github.event.head_commit.message, 'skip ci')"
|
|
7
8
|
runs-on: ubuntu-latest
|
|
8
9
|
|
|
9
10
|
strategy:
|
|
@@ -17,7 +18,7 @@ jobs:
|
|
|
17
18
|
with:
|
|
18
19
|
ruby-version: '2.6'
|
|
19
20
|
|
|
20
|
-
- uses: actions/cache@
|
|
21
|
+
- uses: actions/cache@v2
|
|
21
22
|
with:
|
|
22
23
|
path: vendor/bundle
|
|
23
24
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
|
@@ -26,7 +27,7 @@ jobs:
|
|
|
26
27
|
|
|
27
28
|
- name: Install gems
|
|
28
29
|
run: |
|
|
29
|
-
gem install bundler
|
|
30
|
+
gem install -N bundler
|
|
30
31
|
bundle config path vendor/bundle
|
|
31
32
|
bundle install --jobs 4 --retry 3
|
|
32
33
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Bump version and Release
|
|
2
|
+
on:
|
|
3
|
+
release:
|
|
4
|
+
types: [published]
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
release:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: true
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@master
|
|
14
|
+
with:
|
|
15
|
+
persist-credentials: false
|
|
16
|
+
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-ruby@v1
|
|
19
|
+
with:
|
|
20
|
+
ruby-version: '2.6'
|
|
21
|
+
|
|
22
|
+
- name: Get version from latest tag
|
|
23
|
+
id: get_version
|
|
24
|
+
uses: battila7/get-version-action@v2
|
|
25
|
+
|
|
26
|
+
- name: Bump version
|
|
27
|
+
run: |
|
|
28
|
+
gem install -N gem-release
|
|
29
|
+
git config --local user.email "action@github.com"
|
|
30
|
+
git config --local user.name "GitHub Action"
|
|
31
|
+
gem bump --skip-ci --version ${{ steps.get_version.outputs.version-without-v }}
|
|
32
|
+
|
|
33
|
+
- name: Push changes
|
|
34
|
+
uses: ad-m/github-push-action@master
|
|
35
|
+
with:
|
|
36
|
+
# GitHub Actions token does not support pushing to protected branches.
|
|
37
|
+
# github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
38
|
+
#
|
|
39
|
+
# A manually populated`PERSONAL_ACCESS_TOKEN` environment variable
|
|
40
|
+
# with permissions to push to a protected branch must be used.
|
|
41
|
+
# not ideal - keep eyes open for a better solution
|
|
42
|
+
github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
|
43
|
+
|
|
44
|
+
- name: Release gem to rubygems.org
|
|
45
|
+
run: |
|
|
46
|
+
set +x
|
|
47
|
+
mkdir -p ~/.gem
|
|
48
|
+
cat << EOF > ~/.gem/credentials
|
|
49
|
+
---
|
|
50
|
+
:rubygems_api_key: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
51
|
+
EOF
|
|
52
|
+
chmod 0600 ~/.gem/credentials
|
|
53
|
+
set -x
|
|
54
|
+
gem release
|
data/README.md
CHANGED
|
@@ -60,18 +60,20 @@ company_token = 'my-company-token'
|
|
|
60
60
|
@client = FinApps::REST::Client.new company_identifier, company_token
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
### Release
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
For approved Pull Requests against the master branch, an aggregated release draft will be generated. This draft by default bumps the patch number of previous version.
|
|
66
|
+
Please refer to the [Release Drafter] action documentation for information on this process, specifically how to bump the major or minor numbers of the gem version.
|
|
66
67
|
|
|
68
|
+
As soon as this draft is converted into an actual release, an automated process also running on GitHub actions will be triggered to build the gem and release it to rubygems.org.
|
|
67
69
|
|
|
68
|
-
[FinancialApps.com][financialapps]
|
|
69
70
|
|
|
71
|
+
[FinancialApps.com][financialapps]
|
|
70
72
|
|
|
71
73
|
[bundler]: http://bundler.io
|
|
72
74
|
[financialapps]: https://financialapps.com
|
|
73
|
-
[wiki]: https://github.com/finapps/ruby-client/wiki
|
|
74
75
|
[builder]: http://builder.rubyforge.org/
|
|
75
76
|
[bundler]: http://bundler.io
|
|
76
77
|
[rubygems]: http://rubygems.org
|
|
77
78
|
[build_status]: http://teamciti.powerwallet.com/viewType.html?buildTypeId=FaRuby_BuildMaster&guest=1
|
|
79
|
+
[Release Drafter]: https://github.com/release-drafter/release-drafter
|
data/finapps.gemspec
CHANGED
|
@@ -24,7 +24,6 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.2'
|
|
26
26
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.9'
|
|
27
|
-
spec.add_development_dependency 'gem-release', '~> 2.1', '>= 2.1.1'
|
|
28
27
|
spec.add_development_dependency 'guard', '~> 2.16', '>= 2.16.1'
|
|
29
28
|
spec.add_development_dependency 'guard-rspec', '~> 4.7', '>= 4.7.3'
|
|
30
29
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
|
|
@@ -17,7 +17,12 @@ module FinApps
|
|
|
17
17
|
|
|
18
18
|
def show(id)
|
|
19
19
|
not_blank(id, :order_id)
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
if matches_token_format?(id)
|
|
22
|
+
show_by_token id
|
|
23
|
+
else
|
|
24
|
+
show_by_id id
|
|
25
|
+
end
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
def create(params)
|
|
@@ -45,6 +50,20 @@ module FinApps
|
|
|
45
50
|
|
|
46
51
|
private
|
|
47
52
|
|
|
53
|
+
def show_by_id(id)
|
|
54
|
+
path = "documents/orders/#{id}"
|
|
55
|
+
send_request path, :get
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def show_by_token(jwt)
|
|
59
|
+
path = "documents/retrieve_order?token=#{jwt}"
|
|
60
|
+
send_request path, :get
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def matches_token_format?(str)
|
|
64
|
+
str.match(/^.+\..+\..+$/)
|
|
65
|
+
end
|
|
66
|
+
|
|
48
67
|
def build_filter(params)
|
|
49
68
|
search_query(params[:searchTerm])
|
|
50
69
|
.merge(consumer_query(params[:consumer]))
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
module FinApps
|
|
4
4
|
module REST
|
|
5
5
|
class DocumentsOrdersNotifications < FinAppsCore::REST::Resources
|
|
6
|
-
def create(id)
|
|
6
|
+
def create(id, params = [])
|
|
7
7
|
not_blank(id, :id)
|
|
8
8
|
|
|
9
9
|
path = "documents/orders/#{ERB::Util.url_encode(id)}/notify"
|
|
10
|
-
super
|
|
10
|
+
super params, path
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -18,6 +18,14 @@ module FinApps
|
|
|
18
18
|
not_blank(doc_id, :doc_id)
|
|
19
19
|
super(nil, "documents/orders/#{order_id}/#{doc_id}")
|
|
20
20
|
end
|
|
21
|
+
|
|
22
|
+
def destroy_by_consumer(consumer_id, document_id)
|
|
23
|
+
not_blank(consumer_id, :consumer_id)
|
|
24
|
+
not_blank(document_id, :document_id)
|
|
25
|
+
|
|
26
|
+
path = "consumers/#{consumer_id}/documents/#{document_id}"
|
|
27
|
+
send_request path, :delete
|
|
28
|
+
end
|
|
21
29
|
end
|
|
22
30
|
end
|
|
23
31
|
end
|
data/lib/finapps/version.rb
CHANGED
|
@@ -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
|
|
|
@@ -134,14 +134,28 @@ RSpec.describe FinApps::REST::DocumentsOrders do
|
|
|
134
134
|
let(:error_messages) { show[1] }
|
|
135
135
|
|
|
136
136
|
context 'with valid id' do
|
|
137
|
-
|
|
137
|
+
context 'when id is an identifier' do
|
|
138
|
+
let(:id) { :valid_order_id }
|
|
138
139
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
it_behaves_like 'an API request'
|
|
141
|
+
it_behaves_like 'a successful request'
|
|
142
|
+
it('has an order_id node in the response') do
|
|
143
|
+
expect(results).to have_key(:order_id)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
142
146
|
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
context 'when id is a token' do
|
|
148
|
+
let(:id) { '0123456abc.0123456abc.0123456abc' }
|
|
149
|
+
|
|
150
|
+
it_behaves_like 'an API request'
|
|
151
|
+
it_behaves_like 'a successful request'
|
|
152
|
+
it('has an order node in the response') do
|
|
153
|
+
expect(results).to have_key(:order)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it('has a consumer node in the response') do
|
|
157
|
+
expect(results).to have_key(:consumer)
|
|
158
|
+
end
|
|
145
159
|
end
|
|
146
160
|
end
|
|
147
161
|
|
|
@@ -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
|
|
@@ -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,518 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'sinatra/base'
|
|
4
|
+
require_relative 'documents_uploads_routes'
|
|
5
|
+
module Fake
|
|
6
|
+
# the FakeApi class is used to mock API requests while testing.
|
|
7
|
+
class FakeApi < Sinatra::Base
|
|
8
|
+
def self.version
|
|
9
|
+
"v#{FinAppsCore::REST::Defaults::API_VERSION}"
|
|
10
|
+
end
|
|
4
11
|
|
|
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 }
|
|
12
|
+
# resource
|
|
13
|
+
post("/#{version}/resources") { json_response 201, 'resource.json' }
|
|
14
|
+
get("/#{version}/resources/:id") { json_response 200, 'resource.json' }
|
|
15
|
+
get("/#{version}/resources") { json_response 200, 'resources.json' }
|
|
16
|
+
put("/#{version}/resources") { json_response 201, 'resource.json' }
|
|
17
|
+
delete("/#{version}/resources/:id") { status 202 }
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
# verix_metadata
|
|
20
|
+
get("/#{version}/v/metadata") do
|
|
21
|
+
json_response 200, 'verix/metadata.json'
|
|
22
|
+
end
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
# verix_records
|
|
25
|
+
get("/#{version}/v/record") do
|
|
26
|
+
json_response 200, 'verix/record/list.json'
|
|
27
|
+
end
|
|
28
|
+
post("/#{version}/v/record") do
|
|
29
|
+
json_response 200, 'verix/record/create.json'
|
|
30
|
+
end
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
# verix_pdf_documents
|
|
33
|
+
get("/#{version}/v/record/:record_id/file/:provider_id") do
|
|
34
|
+
pdf_response 'verix/document/document.pdf'
|
|
35
|
+
end
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
# verix_documents
|
|
38
|
+
get("/#{version}/v/record/:record_id/document") do
|
|
39
|
+
json_response 200, 'verix/document/show.json'
|
|
40
|
+
end
|
|
41
|
+
get("/#{version}/v/record/:record_id/document/:document_id") do
|
|
42
|
+
json_response 200, 'verix/document/list.json'
|
|
43
|
+
end
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
# plaid_webhook/metadata
|
|
46
|
+
get("/#{version}/p/metadata") do
|
|
47
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
|
48
|
+
if tenant_token == 'invalid_tenant_token'
|
|
49
|
+
json_response 404, 'invalid_tenant_credentials.json'
|
|
50
|
+
else
|
|
51
|
+
json_response 200, 'plaid/webhook.json'
|
|
52
|
+
end
|
|
51
53
|
end
|
|
52
|
-
end
|
|
53
54
|
|
|
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'
|
|
55
|
+
# plaid_institution_consumer
|
|
56
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
|
57
|
+
json_response 200, 'plaid/institution/consumer/show.json'
|
|
67
58
|
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'
|
|
59
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id/account") do
|
|
60
|
+
json_response 200, 'plaid/institution/consumer/show_accounts.json'
|
|
75
61
|
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
|
|
62
|
+
get("/#{version}/p/institution/consumer") do
|
|
63
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
|
64
|
+
if tenant_token == 'invalid_tenant_token'
|
|
65
|
+
json_response 404, 'resource_not_found.json'
|
|
66
|
+
else
|
|
67
|
+
json_response 200, 'plaid/institution/consumer/list.json'
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
post("/#{version}/p/institution/consumer") do
|
|
71
|
+
tenant_token = request.env['HTTP_X_TENANT_TOKEN']
|
|
72
|
+
if tenant_token == 'invalid_tenant_token'
|
|
73
|
+
json_response 404, 'resource_not_found.json'
|
|
74
|
+
else
|
|
75
|
+
json_response 200, 'plaid/institution/consumer/add.json'
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
delete("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
|
98
79
|
status 204
|
|
99
|
-
else
|
|
100
|
-
json_response 400, 'invalid_request_body.json'
|
|
101
80
|
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
|
|
81
|
+
put("/#{version}/p/institution/consumer/:consumer_institution_id") do
|
|
107
82
|
status 204
|
|
108
|
-
else
|
|
109
|
-
json_response 400, 'invalid_request_body.json'
|
|
110
83
|
end
|
|
111
|
-
|
|
84
|
+
get("/#{version}/p/institution/consumer/:consumer_institution_id/token") do
|
|
85
|
+
json_response 200, 'plaid/institution/consumer/public_token.json'
|
|
86
|
+
end
|
|
112
87
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
88
|
+
# plaid_accounts
|
|
89
|
+
get("/#{version}/p/account") do
|
|
90
|
+
json_response 200, 'plaid/account/list.json'
|
|
91
|
+
end
|
|
92
|
+
get("/#{version}/p/account/:account_id") do
|
|
93
|
+
json_response 200, 'plaid/account/show.json'
|
|
94
|
+
end
|
|
95
|
+
put("/#{version}/p/accounts/permissions") do
|
|
96
|
+
request.body.rewind
|
|
97
|
+
request_payload = JSON.parse request.body.read
|
|
98
|
+
if request_payload.is_a? Array
|
|
99
|
+
status 204
|
|
100
|
+
else
|
|
101
|
+
json_response 400, 'invalid_request_body.json'
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
delete("/#{version}/p/accounts/permissions") do
|
|
105
|
+
request.body.rewind
|
|
106
|
+
request_payload = JSON.parse request.body.read
|
|
107
|
+
if request_payload.is_a? Array
|
|
108
|
+
status 204
|
|
109
|
+
else
|
|
110
|
+
json_response 400, 'invalid_request_body.json'
|
|
111
|
+
end
|
|
112
|
+
end
|
|
117
113
|
|
|
118
|
-
|
|
119
|
-
|
|
114
|
+
# plaid_institution_logos
|
|
115
|
+
get("/#{version}/p/institution/logo/:inst_id") do
|
|
116
|
+
png_response 'plaid/institution/logo.png'
|
|
117
|
+
end
|
|
120
118
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
119
|
+
# version
|
|
120
|
+
get("/#{version}/version") { 'Version => 2.1.29-.20161208.172810' }
|
|
121
|
+
|
|
122
|
+
# tenants
|
|
123
|
+
get("/#{version}/settings/tenant") do
|
|
124
|
+
json_response 200, 'tenant_settings.json'
|
|
125
|
+
end
|
|
126
|
+
put("/#{version}/settings/tenant") do
|
|
127
|
+
request.body.rewind
|
|
128
|
+
request_payload = JSON.parse request.body.read
|
|
129
|
+
if request_payload['bad_params']
|
|
130
|
+
json_response 404, 'resource_not_found.json'
|
|
131
|
+
else
|
|
132
|
+
status 204
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
get("/#{version}/settings/app") do
|
|
136
|
+
json_response 200, 'tenant_app_settings.json'
|
|
137
|
+
end
|
|
138
|
+
put("/#{version}/settings/app") do
|
|
139
|
+
request.body.rewind
|
|
140
|
+
request_payload = JSON.parse request.body.read
|
|
141
|
+
if request_payload['pdf_statement_months']
|
|
142
|
+
status 204
|
|
143
|
+
else
|
|
144
|
+
json_response 404, 'resource_not_found.json'
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# orders
|
|
149
|
+
post("/#{version}/orders/valid_token") do
|
|
150
|
+
json_response 200, 'order_token.json'
|
|
151
|
+
end
|
|
152
|
+
post("/#{version}/orders/invalid_token") do
|
|
129
153
|
json_response 404, 'resource_not_found.json'
|
|
130
|
-
else
|
|
131
|
-
status 204
|
|
132
154
|
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
|
|
155
|
+
get("/#{version}/orders/valid_id") { json_response 200, 'order.json' }
|
|
156
|
+
get("/#{version}/orders") { json_response 200, 'orders.json' }
|
|
157
|
+
get("/#{version}/orders/valid_id/report.:format") do
|
|
158
|
+
json_response 200, 'order_report.json'
|
|
159
|
+
end
|
|
160
|
+
get("/#{version}/orders/invalid_id/report.:format") do
|
|
143
161
|
json_response 404, 'resource_not_found.json'
|
|
144
162
|
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
|
|
163
|
+
get("/#{version}/orders/valid_id/status") do
|
|
164
|
+
json_response 200, 'order_status.json'
|
|
193
165
|
end
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
json_response
|
|
200
|
-
|
|
201
|
-
|
|
166
|
+
get("/#{version}/orders/invalid_id/status") do
|
|
167
|
+
json_response 404, 'resource_not_found.json'
|
|
168
|
+
end
|
|
169
|
+
put("/#{version}/orders/valid_id/cancel") { status 204 }
|
|
170
|
+
put("/#{version}/orders/invalid_id/cancel") do
|
|
171
|
+
json_response 404, 'resource_not_found.json'
|
|
172
|
+
end
|
|
173
|
+
put("/#{version}/orders/valid_id/notify") { status 204 }
|
|
174
|
+
put("/#{version}/orders/invalid_id/notify") do
|
|
175
|
+
json_response 404, 'resource_not_found.json'
|
|
176
|
+
end
|
|
177
|
+
put("/#{version}/orders/valid_id/refresh") do
|
|
178
|
+
json_response 200, 'order_refresh.json'
|
|
179
|
+
end
|
|
180
|
+
put("/#{version}/orders/invalid_id/refresh") do
|
|
181
|
+
json_response 404, 'resource_not_found.json'
|
|
182
|
+
end
|
|
183
|
+
put("/#{version}/orders/invalid_id") do
|
|
184
|
+
json_response 404, 'resource_not_found.json'
|
|
185
|
+
end
|
|
186
|
+
put("/#{version}/orders/valid_id") { status 204 }
|
|
187
|
+
put("/#{version}/orders") do
|
|
188
|
+
request.body.rewind
|
|
189
|
+
request_payload = JSON.parse request.body.read
|
|
190
|
+
if request_payload['params'] == 'invalid'
|
|
191
|
+
json_response 400, 'invalid_request_body.json'
|
|
192
|
+
else
|
|
193
|
+
status 204
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
post("/#{version}/orders") do
|
|
197
|
+
request.body.rewind
|
|
198
|
+
request_payload = JSON.parse request.body.read
|
|
199
|
+
if %w[applicant institutions product].all? {|s| request_payload.key? s }
|
|
200
|
+
json_response 200, 'order_token.json'
|
|
201
|
+
else
|
|
202
|
+
json_response 400, 'invalid_request_body.json'
|
|
203
|
+
end
|
|
202
204
|
end
|
|
203
|
-
end
|
|
204
205
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
206
|
+
# documents_orders
|
|
207
|
+
get("/#{version}/documents/orders") do
|
|
208
|
+
if params[:filter]&.include?('"status":2')
|
|
209
|
+
json_response 200, 'documents_orders_none.json'
|
|
210
|
+
else
|
|
211
|
+
json_response 200, 'documents_orders.json'
|
|
212
|
+
end
|
|
211
213
|
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 }
|
|
214
|
+
get("/#{version}/documents/orders/valid_order_id") do
|
|
223
215
|
json_response 200, 'documents_order.json'
|
|
224
|
-
else
|
|
225
|
-
json_response 400, 'invalid_request_body.json'
|
|
226
216
|
end
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
217
|
+
get("/#{version}/documents/retrieve_order") do
|
|
218
|
+
json_response 200, 'documents/retrieve_order.json'
|
|
219
|
+
end
|
|
220
|
+
get("/#{version}/documents/orders/invalid_order_id") do
|
|
221
|
+
json_response 404, 'resource_not_found.json'
|
|
222
|
+
end
|
|
223
|
+
post("/#{version}/documents/orders") do
|
|
224
|
+
request.body.rewind
|
|
225
|
+
request_payload = JSON.parse request.body.read
|
|
226
|
+
if %w[applicant esign_documents tag].all? {|s| request_payload.key? s }
|
|
227
|
+
json_response 200, 'documents_order.json'
|
|
228
|
+
else
|
|
229
|
+
json_response 400, 'invalid_request_body.json'
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
put("/#{version}/documents/orders/valid_order_id") do
|
|
233
|
+
request.body.rewind
|
|
234
|
+
request_payload = JSON.parse request.body.read
|
|
235
|
+
if request_payload['tag'] == 'invalid'
|
|
236
|
+
json_response 400, 'invalid_request_body.json'
|
|
237
|
+
else
|
|
238
|
+
status 204
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
put("/#{version}/documents/orders/invalid_order_id") do
|
|
242
|
+
json_response 400, 'invalid_order_id.json'
|
|
243
|
+
end
|
|
244
|
+
delete("/#{version}/documents/orders/valid_order_id") { status 204 }
|
|
245
|
+
delete("/#{version}/documents/orders/invalid_order_id") do
|
|
246
|
+
json_response 404, 'resource_not_found.json'
|
|
247
|
+
end
|
|
248
|
+
get("/#{version}/documents/orders/valid_order_id/sign_url/valid_signature_id") do
|
|
249
|
+
json_response 200, 'sign_url.json'
|
|
250
|
+
end
|
|
251
|
+
get("/#{version}/documents/orders/invalid_order_id/sign_url/valid_signature_id") do
|
|
252
|
+
json_response 400, 'invalid_order_id.json'
|
|
253
|
+
end
|
|
254
|
+
get("/#{version}/documents/orders/valid_order_id/sign_url/invalid_signature_id") do
|
|
255
|
+
json_response 404, 'invalid_signature_id.json'
|
|
235
256
|
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
257
|
|
|
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
|
|
258
|
+
# documents_uploads
|
|
259
|
+
include DocumentsUploadsRoutes
|
|
265
260
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
261
|
+
# documents orders notifications
|
|
262
|
+
post("/#{version}/documents/orders/valid_id/notify") { status 204 }
|
|
263
|
+
post("/#{version}/documents/orders/invalid_id/notify") do
|
|
264
|
+
json_response 400, 'invalid_order_id.json'
|
|
265
|
+
end
|
|
271
266
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
267
|
+
# signed documents downloads
|
|
268
|
+
get("/#{version}/consumers/:consumer_id/documents/:signature_request_id") do
|
|
269
|
+
pdf_response 'signed_document.pdf'
|
|
270
|
+
end
|
|
276
271
|
|
|
277
|
-
|
|
278
|
-
|
|
272
|
+
# esign_templates
|
|
273
|
+
get("/#{version}/esign_templates") { json_response 200, 'esign_templates.json' }
|
|
279
274
|
|
|
280
|
-
|
|
281
|
-
|
|
275
|
+
# document_upload_types
|
|
276
|
+
get("/#{version}/documents/upload_types") { json_response 200, 'upload_types.json' }
|
|
282
277
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
end
|
|
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'
|
|
278
|
+
# consumers
|
|
279
|
+
get("/#{version}/consumers") do
|
|
280
|
+
json_response 200, 'users.json'
|
|
300
281
|
end
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
282
|
+
get("/#{version}/consumers/valid_public_id") do
|
|
283
|
+
json_response 200, 'user.json'
|
|
284
|
+
end
|
|
285
|
+
get("/#{version}/consumers/invalid_public_id") do
|
|
286
|
+
json_response 404, 'resource_not_found.json'
|
|
287
|
+
end
|
|
288
|
+
post("/#{version}/consumers") do
|
|
289
|
+
request.body.rewind
|
|
290
|
+
request_payload = JSON.parse request.body.read
|
|
291
|
+
if request_payload['password']
|
|
292
|
+
json_response 201, 'user.json'
|
|
293
|
+
else
|
|
294
|
+
json_response 400, 'invalid_request_body.json'
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
put("/#{version}/consumers/valid_public_id") { status 204 }
|
|
298
|
+
put("/#{version}/consumers/invalid_public_id") do
|
|
299
|
+
json_response 400, 'invalid_user_id.json'
|
|
300
|
+
end
|
|
301
|
+
put("/#{version}/consumers/valid_public_id/password") do
|
|
302
|
+
json_response 200, 'user.json'
|
|
303
|
+
end
|
|
304
|
+
put("/#{version}/consumers/invalid_public_id/password") do
|
|
305
|
+
json_response 404, 'resource_not_found.json'
|
|
306
|
+
end
|
|
307
|
+
delete("/#{version}/consumers/valid_public_id") { status 204 }
|
|
308
|
+
delete("/#{version}/consumers/invalid_public_id") do
|
|
309
|
+
json_response 404, 'resource_not_found.json'
|
|
310
|
+
end
|
|
311
|
+
post("/#{version}/logout") { status 204 }
|
|
317
312
|
|
|
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'
|
|
313
|
+
# operators
|
|
314
|
+
get("/#{version}/operators") { json_response 200, 'operator_list.json' }
|
|
315
|
+
get("/#{version}/operators/invalid_id") do
|
|
316
|
+
json_response 404, 'resource_not_found.json'
|
|
317
|
+
end
|
|
318
|
+
get("/#{version}/operators/valid_id") { json_response 200, 'operator.json' }
|
|
319
|
+
delete("/#{version}/operators/invalid_id") do
|
|
320
|
+
json_response 404, 'resource_not_found.json'
|
|
321
|
+
end
|
|
322
|
+
delete("/#{version}/operators/valid_id") { status 204 }
|
|
323
|
+
post("/#{version}/operators/password/change") do
|
|
346
324
|
json_response 200, 'operator.json'
|
|
347
|
-
else
|
|
348
|
-
json_response 400, 'invalid_request_body.json'
|
|
349
325
|
end
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
326
|
+
put("/#{version}/operators/invalid_id") do
|
|
327
|
+
json_response 404, 'resource_not_found.json'
|
|
328
|
+
end
|
|
329
|
+
put("/#{version}/operators/valid_id") { json_response 200, 'operator.json' }
|
|
330
|
+
put("/#{version}/operators/valid_id/assign") { status 204 }
|
|
331
|
+
put("/#{version}/operators/invalid_id/assign") do
|
|
332
|
+
json_response 404, 'resource_not_found.json'
|
|
333
|
+
end
|
|
334
|
+
post("/#{version}/operators/password/forgot") do
|
|
335
|
+
json_response 200, 'operator_forgot_password.json'
|
|
336
|
+
end
|
|
337
|
+
post("/#{version}/operators/password/reset") do
|
|
338
|
+
request.body.rewind
|
|
339
|
+
request_payload = JSON.parse request.body.read
|
|
340
|
+
if request_payload['params'] == 'valid'
|
|
341
|
+
json_response 200, 'operator.json'
|
|
342
|
+
else
|
|
343
|
+
json_response 400, 'invalid_request_body.json'
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
post("/#{version}/operators") do
|
|
347
|
+
request.body.rewind
|
|
348
|
+
request_payload = JSON.parse request.body.read
|
|
349
|
+
if request_payload['params'] == 'valid'
|
|
350
|
+
json_response 201, 'operator.json'
|
|
351
|
+
else
|
|
352
|
+
json_response 400, 'invalid_request_body.json'
|
|
353
|
+
end
|
|
358
354
|
end
|
|
359
|
-
end
|
|
360
355
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
356
|
+
# session
|
|
357
|
+
post("/#{version}/login") do
|
|
358
|
+
request.body.rewind
|
|
359
|
+
request_payload = JSON.parse request.body.read
|
|
360
|
+
if request_payload['password'] == 'valid_password'
|
|
361
|
+
json_response(200, 'user.json')
|
|
362
|
+
else
|
|
363
|
+
json_response(401, 'unauthorized.json')
|
|
364
|
+
end
|
|
369
365
|
end
|
|
370
|
-
|
|
371
|
-
post("/#{version}/operators/login") { json_response 200, 'operator.json' }
|
|
366
|
+
post("/#{version}/operators/login") { json_response 200, 'operator.json' }
|
|
372
367
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
368
|
+
# password resets
|
|
369
|
+
post("/#{version}/tenant/valid_user_id/password") do
|
|
370
|
+
json_response 200, 'password_reset_token.json'
|
|
371
|
+
end
|
|
372
|
+
post("/#{version}/tenant/invalid_user_id/password") do
|
|
373
|
+
json_response 404, 'resource_not_found.json'
|
|
374
|
+
end
|
|
375
|
+
put("/#{version}/tenant/valid_user_id/password") do
|
|
376
|
+
request.body.rewind
|
|
377
|
+
request_payload = JSON.parse request.body.read
|
|
378
|
+
if request_payload['token'] == 'valid_token'
|
|
379
|
+
json_response(200, 'user.json')
|
|
380
|
+
else
|
|
381
|
+
json_response(400, 'invalid_request_body.json')
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
put("/#{version}/tenant/invalid_user_id/password") do
|
|
385
|
+
json_response 404, 'resource_not_found.json'
|
|
387
386
|
end
|
|
388
|
-
end
|
|
389
|
-
put("/#{version}/tenant/invalid_user_id/password") do
|
|
390
|
-
json_response 404, 'resource_not_found.json'
|
|
391
|
-
end
|
|
392
387
|
|
|
393
|
-
|
|
394
|
-
|
|
388
|
+
# products
|
|
389
|
+
get("/#{version}/products") { json_response 200, 'products.json' }
|
|
395
390
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
391
|
+
# portfolios
|
|
392
|
+
get("/#{version}/portfolios") { json_response 200, 'portfolios.json' }
|
|
393
|
+
get("/#{version}/portfolios/valid_id") { json_response 200, 'portfolio.json' }
|
|
394
|
+
get("/#{version}/portfolios/invalid_id") do
|
|
395
|
+
json_response 404, 'resource_not_found.json'
|
|
396
|
+
end
|
|
397
|
+
post("/#{version}/portfolios") do
|
|
398
|
+
request.body.rewind
|
|
399
|
+
request_payload = JSON.parse request.body.read
|
|
400
|
+
if request_payload['product'] == 'invalid'
|
|
401
|
+
json_response(400, 'invalid_request_body.json')
|
|
402
|
+
else
|
|
403
|
+
json_response(200, 'portfolio.json')
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
put("/#{version}/portfolios/valid_id") { json_response 200, 'portfolio.json' }
|
|
407
|
+
put("/#{version}/portfolios/invalid_id") do
|
|
408
|
+
json_response 404, 'resource_not_found.json'
|
|
409
|
+
end
|
|
410
|
+
delete("/#{version}/portfolios/valid_id") { status 204 }
|
|
411
|
+
delete("/#{version}/portfolios/invalid_id") do
|
|
412
|
+
json_response 404, 'resource_not_found.json'
|
|
409
413
|
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
414
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
415
|
+
# alert definitions
|
|
416
|
+
get("/#{version}/portfolio/alerts/definitions") do
|
|
417
|
+
json_response 200, 'alert_definitions.json'
|
|
418
|
+
end
|
|
419
|
+
get("/#{version}/portfolio/alerts/definitions/valid_id") do
|
|
420
|
+
json_response 200, 'alert_definition.json'
|
|
421
|
+
end
|
|
422
|
+
get("/#{version}/portfolio/alerts/definitions/invalid_id") do
|
|
423
|
+
json_response 404, 'resource_not_found.json'
|
|
424
|
+
end
|
|
430
425
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
426
|
+
# alert occurrences
|
|
427
|
+
get("/#{version}/portfolio/alerts/occurrences") do
|
|
428
|
+
json_response 200, 'alert_occurrences.json'
|
|
429
|
+
end
|
|
435
430
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
431
|
+
# portfolios alerts
|
|
432
|
+
get("/#{version}/portfolios/valid_id/alerts") do
|
|
433
|
+
json_response 200, 'portfolios_alerts.json'
|
|
434
|
+
end
|
|
435
|
+
get("/#{version}/portfolios/invalid_id/alerts") do
|
|
436
|
+
json_response 404, 'resource_not_found.json'
|
|
437
|
+
end
|
|
438
|
+
put("/#{version}/portfolios/valid_id/alerts/valid_id") { status 204 }
|
|
439
|
+
put("/#{version}/portfolios/invalid_id/alerts/invalid_id") do
|
|
440
|
+
json_response 404, 'resource_not_found.json'
|
|
441
|
+
end
|
|
442
|
+
delete("/#{version}/portfolios/valid_id/alerts/valid_id") { status 204 }
|
|
443
|
+
delete("/#{version}/portfolios/invalid_id/alerts/invalid_id") do
|
|
444
|
+
json_response 404, 'resource_not_found.json'
|
|
445
|
+
end
|
|
451
446
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
447
|
+
# portfolios consumers
|
|
448
|
+
get("/#{version}/portfolios/valid_id/consumers") do
|
|
449
|
+
json_response 200, 'portfolios_consumers.json'
|
|
450
|
+
end
|
|
451
|
+
get("/#{version}/portfolios/invalid_id/consumers") do
|
|
452
|
+
json_response 404, 'resource_not_found.json'
|
|
453
|
+
end
|
|
454
|
+
post("/#{version}/portfolios/valid_id/consumers") { status 204 }
|
|
455
|
+
post("/#{version}/portfolios/invalid_id/consumers") do
|
|
456
|
+
json_response 400, 'multiple_consumer_subscribe_error.json'
|
|
457
|
+
end
|
|
458
|
+
post("/#{version}/portfolios/valid_id/consumers/valid_id") { status 204 }
|
|
459
|
+
post("/#{version}/portfolios/invalid_id/consumers/invalid_id") do
|
|
460
|
+
json_response 400, 'single_consumer_subscribe_error.json'
|
|
461
|
+
end
|
|
462
|
+
delete("/#{version}/portfolios/valid_id/consumers/valid_id") { status 204 }
|
|
463
|
+
delete("/#{version}/portfolios/invalid_id/consumers/invalid_id") do
|
|
464
|
+
json_response 404, 'resource_not_found.json'
|
|
465
|
+
end
|
|
471
466
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
467
|
+
# portfolios available consumers
|
|
468
|
+
get("/#{version}/portfolios/:id/consumers/available") do
|
|
469
|
+
json_response 200, 'portfolios_available_consumers.json'
|
|
470
|
+
end
|
|
476
471
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
472
|
+
# consumers portfolios
|
|
473
|
+
get("/#{version}/consumers/valid_id/portfolios") do
|
|
474
|
+
json_response 200, 'portfolios.json'
|
|
475
|
+
end
|
|
476
|
+
get("/#{version}/consumers/invalid_id/portfolios") do
|
|
477
|
+
json_response 404, 'resource_not_found.json'
|
|
478
|
+
end
|
|
484
479
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
480
|
+
# portfolio reports
|
|
481
|
+
get("/#{version}/portfolio/reports") do
|
|
482
|
+
json_response 200, 'portfolio_reports.json'
|
|
483
|
+
end
|
|
489
484
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
485
|
+
# relevance
|
|
486
|
+
get("/#{version}/relevance/ruleset/names") do
|
|
487
|
+
json_response 200, 'relevance_ruleset_names.json'
|
|
488
|
+
end
|
|
494
489
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
490
|
+
# errors
|
|
491
|
+
get("/#{version}/client_error") { json_response 400, 'error.json' }
|
|
492
|
+
get("/#{version}/server_error") { status 500 }
|
|
493
|
+
get("/#{version}/proxy_error") { status 407 }
|
|
499
494
|
|
|
500
|
-
|
|
501
|
-
|
|
495
|
+
# timeout
|
|
496
|
+
get("/#{version}/orders/timeout") { status 419 }
|
|
502
497
|
|
|
503
|
-
|
|
498
|
+
private
|
|
504
499
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
500
|
+
def json_response(response_code, file_name)
|
|
501
|
+
http_response :json, response_code, file_name
|
|
502
|
+
end
|
|
508
503
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
504
|
+
def png_response(file_name)
|
|
505
|
+
http_response :png, 200, file_name
|
|
506
|
+
end
|
|
512
507
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
508
|
+
def pdf_response(file_name)
|
|
509
|
+
http_response 'application/pdf', 200, file_name
|
|
510
|
+
end
|
|
516
511
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
512
|
+
def http_response(content_type, response_code, file_name)
|
|
513
|
+
content_type content_type
|
|
514
|
+
status response_code
|
|
515
|
+
File.open("#{File.dirname(__FILE__)}/fixtures/#{file_name}").read
|
|
516
|
+
end
|
|
521
517
|
end
|
|
522
518
|
end
|