finapps 5.0.41 → 5.0.47
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 -6
- data/.github/workflows/release.yml +13 -2
- data/README.md +6 -4
- data/finapps.gemspec +4 -4
- data/lib/finapps.rb +1 -0
- data/lib/finapps/rest/client.rb +1 -0
- 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/rest/screenings.rb +58 -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 +20 -14
- data/spec/rest/documents_uploads_spec.rb +53 -0
- data/spec/rest/screenings_spec.rb +198 -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 +484 -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
- metadata +62 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 487960017ebcda19c22179e090cb9328708a57dd5e54e0d05cc27e5660251d57
|
4
|
+
data.tar.gz: 95abe37a2a66f36f973eb453d2302df92a9d1208c2ad5f20b4b6caf21737c358
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5df1695cc14dc3a96d47867786a7f564806b5f58d56511c9e08482e3e9ce4767ac03257c055f644b2517d25666a70d0b6312f43fd218607258c642d967061a98
|
7
|
+
data.tar.gz: 9f063fed1bafb02f77ed3b10230c77d757e0ae09c0f7d202f9d78d699dc1d7ba5f0809d59591f608c32aa9c81d86795b932ab5220d0adc13fcea07b2583c4d26
|
data/.github/workflows/main.yaml
CHANGED
@@ -13,12 +13,10 @@ jobs:
|
|
13
13
|
steps:
|
14
14
|
- uses: actions/checkout@v1
|
15
15
|
|
16
|
-
- name:
|
17
|
-
uses:
|
18
|
-
with:
|
19
|
-
ruby-version: '2.6'
|
16
|
+
- name: Install required ruby
|
17
|
+
uses: ruby/setup-ruby@v1
|
20
18
|
|
21
|
-
- uses: actions/cache@
|
19
|
+
- uses: actions/cache@v2
|
22
20
|
with:
|
23
21
|
path: vendor/bundle
|
24
22
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
@@ -27,7 +25,7 @@ jobs:
|
|
27
25
|
|
28
26
|
- name: Install gems
|
29
27
|
run: |
|
30
|
-
gem install bundler
|
28
|
+
gem install -N bundler
|
31
29
|
bundle config path vendor/bundle
|
32
30
|
bundle install --jobs 4 --retry 3
|
33
31
|
|
@@ -12,6 +12,7 @@ jobs:
|
|
12
12
|
steps:
|
13
13
|
- uses: actions/checkout@master
|
14
14
|
with:
|
15
|
+
persist-credentials: false
|
15
16
|
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
|
16
17
|
|
17
18
|
- uses: actions/setup-ruby@v1
|
@@ -22,13 +23,23 @@ jobs:
|
|
22
23
|
id: get_version
|
23
24
|
uses: battila7/get-version-action@v2
|
24
25
|
|
25
|
-
- name: Bump version
|
26
|
+
- name: Bump version
|
26
27
|
run: |
|
27
28
|
gem install -N gem-release
|
28
29
|
git config --local user.email "action@github.com"
|
29
30
|
git config --local user.name "GitHub Action"
|
30
31
|
gem bump --skip-ci --version ${{ steps.get_version.outputs.version-without-v }}
|
31
|
-
|
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 }}
|
32
43
|
|
33
44
|
- name: Release gem to rubygems.org
|
34
45
|
run: |
|
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
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = Dir['spec/**/*.rb']
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_runtime_dependency 'finapps_core', '~> 5.0', '>= 5.0.
|
23
|
+
spec.add_runtime_dependency 'finapps_core', '~> 5.0', '>= 5.0.13'
|
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'
|
@@ -28,9 +28,9 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'guard-rspec', '~> 4.7', '>= 4.7.3'
|
29
29
|
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0'
|
31
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
32
|
-
spec.add_development_dependency 'rubocop-performance', '~> 1.
|
33
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 1.
|
31
|
+
spec.add_development_dependency 'rubocop', '~> 0.87', '>= 0.87.0'
|
32
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.7', '>= 1.7.0'
|
33
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.41', '>= 1.41.0'
|
34
34
|
spec.add_development_dependency 'sinatra', '~> 2.0', '>= 2.0.8'
|
35
35
|
spec.add_development_dependency 'webmock', '~> 3.8', '>= 3.8.0'
|
36
36
|
|
data/lib/finapps.rb
CHANGED
@@ -35,6 +35,7 @@ require 'finapps/rest/esign_templates'
|
|
35
35
|
require 'finapps/rest/documents_upload_types'
|
36
36
|
require 'finapps/rest/signed_documents_downloads'
|
37
37
|
require 'finapps/rest/documents_orders_notifications'
|
38
|
+
require 'finapps/rest/screenings'
|
38
39
|
|
39
40
|
require 'finapps/rest/plaid/plaid_resources'
|
40
41
|
require 'finapps/rest/plaid/plaid_webhooks'
|
data/lib/finapps/rest/client.rb
CHANGED
@@ -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
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../utils/query_builder'
|
4
|
+
|
5
|
+
module FinApps
|
6
|
+
module REST
|
7
|
+
class Screenings < FinAppsCore::REST::Resources # :nodoc:
|
8
|
+
include FinApps::Utils::QueryBuilder
|
9
|
+
|
10
|
+
def show(id)
|
11
|
+
not_blank(id, :session_id)
|
12
|
+
|
13
|
+
path = "#{end_point}/#{ERB::Util.url_encode(id)}/resume"
|
14
|
+
super(nil, path)
|
15
|
+
end
|
16
|
+
|
17
|
+
def create(params)
|
18
|
+
not_blank(params, :params)
|
19
|
+
super params
|
20
|
+
end
|
21
|
+
|
22
|
+
def list(params = nil)
|
23
|
+
return super if params.nil?
|
24
|
+
fail FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
|
25
|
+
|
26
|
+
super build_query_path(end_point, params)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update(id, params)
|
30
|
+
not_blank(id, :session_id)
|
31
|
+
not_blank(params, :params)
|
32
|
+
|
33
|
+
path = "#{end_point}/#{ERB::Util.url_encode(id)}"
|
34
|
+
super params, path
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def build_filter(params)
|
40
|
+
search_query(params[:searchTerm])
|
41
|
+
end
|
42
|
+
|
43
|
+
def search_query(term)
|
44
|
+
return {} unless term
|
45
|
+
|
46
|
+
query = search_query_object(term)
|
47
|
+
{"$or": query}
|
48
|
+
end
|
49
|
+
|
50
|
+
def search_query_object(term)
|
51
|
+
[
|
52
|
+
{"consumer.public_id": term},
|
53
|
+
{"consumer.email": term}
|
54
|
+
]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/finapps/version.rb
CHANGED
data/spec/rest/api_request.rb
CHANGED
@@ -16,3 +16,11 @@ RSpec.shared_examples 'a successful request' do |_parameter|
|
|
16
16
|
expect(subject[ERROR_MESSAGES]).to be_empty
|
17
17
|
end
|
18
18
|
end
|
19
|
+
|
20
|
+
RSpec.shared_examples 'a request that raises an error' do |_parameter|
|
21
|
+
it do
|
22
|
+
expect { subject }.to raise_error(
|
23
|
+
FinAppsCore::MissingArgumentsError
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
@@ -17,7 +17,7 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when invalid id is provided' do
|
20
|
-
let(:create) { subject.create(:invalid_id) }
|
20
|
+
let(:create) { subject.create(:invalid_id, ['1234']) }
|
21
21
|
let(:results) { create[RESULTS] }
|
22
22
|
let(:error_messages) { create[ERROR_MESSAGES] }
|
23
23
|
|
@@ -30,7 +30,7 @@ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'with valid id' do
|
33
|
-
let(:create) { subject.create(:valid_id) }
|
33
|
+
let(:create) { subject.create(:valid_id, ['1234']) }
|
34
34
|
let(:results) { create[RESULTS] }
|
35
35
|
let(:error_messages) { create[ERROR_MESSAGES] }
|
36
36
|
|
@@ -6,14 +6,6 @@ require 'rest/api_request'
|
|
6
6
|
RSpec.describe FinApps::REST::DocumentsOrders do
|
7
7
|
include SpecHelpers::Client
|
8
8
|
|
9
|
-
RSpec.shared_examples 'a request that raises an error' do |_parameter|
|
10
|
-
it do
|
11
|
-
expect { subject }.to raise_error(
|
12
|
-
FinAppsCore::MissingArgumentsError
|
13
|
-
)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
9
|
describe '#list' do
|
18
10
|
subject(:list) { described_class.new(client).list(params) }
|
19
11
|
|
@@ -134,14 +126,28 @@ RSpec.describe FinApps::REST::DocumentsOrders do
|
|
134
126
|
let(:error_messages) { show[1] }
|
135
127
|
|
136
128
|
context 'with valid id' do
|
137
|
-
|
129
|
+
context 'when id is an identifier' do
|
130
|
+
let(:id) { :valid_order_id }
|
138
131
|
|
139
|
-
|
140
|
-
|
141
|
-
|
132
|
+
it_behaves_like 'an API request'
|
133
|
+
it_behaves_like 'a successful request'
|
134
|
+
it('has an order_id node in the response') do
|
135
|
+
expect(results).to have_key(:order_id)
|
136
|
+
end
|
137
|
+
end
|
142
138
|
|
143
|
-
|
144
|
-
|
139
|
+
context 'when id is a token' do
|
140
|
+
let(:id) { '0123456abc.0123456abc.0123456abc' }
|
141
|
+
|
142
|
+
it_behaves_like 'an API request'
|
143
|
+
it_behaves_like 'a successful request'
|
144
|
+
it('has an order node in the response') do
|
145
|
+
expect(results).to have_key(:order)
|
146
|
+
end
|
147
|
+
|
148
|
+
it('has a consumer node in the response') do
|
149
|
+
expect(results).to have_key(:consumer)
|
150
|
+
end
|
145
151
|
end
|
146
152
|
end
|
147
153
|
|
@@ -101,4 +101,57 @@ RSpec.describe FinApps::REST::DocumentsUploads do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
104
|
+
|
105
|
+
describe '#destroy_by_consumer' do
|
106
|
+
subject(:destroy_by_consumer) do
|
107
|
+
described_class.new(client).destroy_by_consumer(consumer_id, document_id)
|
108
|
+
end
|
109
|
+
|
110
|
+
let(:results) { destroy_by_consumer[0] }
|
111
|
+
let(:error_messages) { destroy_by_consumer[1] }
|
112
|
+
|
113
|
+
context 'with valid params' do
|
114
|
+
let(:consumer_id) { :valid_consumer_id }
|
115
|
+
let(:document_id) { :valid_document_id }
|
116
|
+
|
117
|
+
it_behaves_like 'an API request'
|
118
|
+
it_behaves_like 'a successful request'
|
119
|
+
it('results is nil') { expect(results).to be_nil }
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'with invalid consumer_id' do
|
123
|
+
let(:consumer_id) { :invalid_consumer_id }
|
124
|
+
let(:document_id) { :valid_document_id }
|
125
|
+
|
126
|
+
it_behaves_like 'an API request'
|
127
|
+
it('results is nil') { expect(results).to be_nil }
|
128
|
+
|
129
|
+
it('error messages array is populated') do
|
130
|
+
expect(error_messages.first.downcase).to eq('resource not found')
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'with invalid document id' do
|
135
|
+
let(:consumer_id) { :valid_consumer_id }
|
136
|
+
let(:document_id) { :invalid_document_id }
|
137
|
+
|
138
|
+
it_behaves_like 'an API request'
|
139
|
+
it('results is nil') { expect(results).to be_nil }
|
140
|
+
|
141
|
+
it('error messages array is populated') do
|
142
|
+
expect(error_messages.first.downcase).to eq('resource not found')
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'with missing id' do
|
147
|
+
let(:consumer_id) { nil }
|
148
|
+
let(:document_id) { nil }
|
149
|
+
|
150
|
+
it do
|
151
|
+
expect { destroy_by_consumer }.to raise_error(
|
152
|
+
FinAppsCore::MissingArgumentsError
|
153
|
+
)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
104
157
|
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helpers/client'
|
4
|
+
require 'rest/api_request'
|
5
|
+
|
6
|
+
RSpec.describe FinApps::REST::Screenings do
|
7
|
+
include SpecHelpers::Client
|
8
|
+
|
9
|
+
describe '#list' do
|
10
|
+
subject(:list) { described_class.new(client).list(params) }
|
11
|
+
|
12
|
+
let(:results) { list[0] }
|
13
|
+
let(:error_messages) { list[1] }
|
14
|
+
|
15
|
+
context 'with valid params' do
|
16
|
+
let(:params) do
|
17
|
+
{
|
18
|
+
page: 2,
|
19
|
+
sort: 'date_created',
|
20
|
+
requested: 25,
|
21
|
+
searchTerm: 'term'
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'without searchTerm' do
|
26
|
+
let(:params) { {searchTerm: nil, page: 2} }
|
27
|
+
|
28
|
+
it_behaves_like 'an API request'
|
29
|
+
it_behaves_like 'a successful request'
|
30
|
+
it 'performs a get and returns the response' do
|
31
|
+
expect(results).to have_key(:records)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'builds query and sends proper request' do
|
35
|
+
list
|
36
|
+
url = "#{versioned_api_path}/screenings?page=2"
|
37
|
+
expect(WebMock).to have_requested(:get, url)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# rubocop:disable RSpec/ExampleLength
|
42
|
+
context 'with searchTerm' do
|
43
|
+
it_behaves_like 'an API request'
|
44
|
+
it_behaves_like 'a successful request'
|
45
|
+
it 'performs a get and returns the response' do
|
46
|
+
expect(results).to have_key(:records)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'builds query and sends proper request' do
|
50
|
+
list
|
51
|
+
url =
|
52
|
+
"#{versioned_api_path}/screenings?filter=%7B%22$or%22:%5B%7B%22" \
|
53
|
+
'consumer.public_id%22:%22term%22%7D,%7B%22consumer.email%22:%22' \
|
54
|
+
'term%22%7D%5D%7D&page=2&requested=25&sort=date_created'
|
55
|
+
|
56
|
+
expect(WebMock).to have_requested(:get, url)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# rubocop:enable RSpec/ExampleLength
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'with invalid params' do
|
63
|
+
let(:params) { ['invalid array'] }
|
64
|
+
|
65
|
+
it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'with missing params' do
|
69
|
+
let(:params) { nil }
|
70
|
+
|
71
|
+
it_behaves_like 'an API request'
|
72
|
+
it_behaves_like 'a successful request'
|
73
|
+
it('performs a get and returns the response') do
|
74
|
+
expect(results).to have_key(:records)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#show' do
|
80
|
+
subject(:show) { described_class.new(client).show(id) }
|
81
|
+
|
82
|
+
let(:results) { show[0] }
|
83
|
+
let(:error_messages) { show[1] }
|
84
|
+
|
85
|
+
context 'with valid id' do
|
86
|
+
let(:id) { :valid_id }
|
87
|
+
|
88
|
+
it_behaves_like 'an API request'
|
89
|
+
it_behaves_like 'a successful request'
|
90
|
+
it('performs a get and returns the response') do
|
91
|
+
expect(results).to have_key(:session)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'with invalid id' do
|
96
|
+
let(:id) { :invalid_id }
|
97
|
+
|
98
|
+
it { expect(results).to be_nil }
|
99
|
+
it { expect(error_messages).not_to be_empty }
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when missing id' do
|
103
|
+
let(:id) { nil }
|
104
|
+
|
105
|
+
it_behaves_like 'a request that raises an error'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe '#create' do
|
110
|
+
subject(:create) { described_class.new(client).create(params) }
|
111
|
+
|
112
|
+
let(:results) { create[0] }
|
113
|
+
let(:error_messages) { create[1] }
|
114
|
+
|
115
|
+
context 'with valid params' do
|
116
|
+
let(:params) do
|
117
|
+
{
|
118
|
+
"email": 'validemail@financialapps.com',
|
119
|
+
"first_name": 'Geo',
|
120
|
+
"last_name": 'Metric',
|
121
|
+
"public_id": '1234'
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
it_behaves_like 'an API request'
|
126
|
+
it_behaves_like 'a successful request'
|
127
|
+
it('results is a Hash') { expect(results).to be_a(Hash) }
|
128
|
+
|
129
|
+
it('performs a post and returns the response') do
|
130
|
+
expect(results).to have_key(:question)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'with invalid params' do
|
135
|
+
let(:params) { {"params": 'invalid'} }
|
136
|
+
|
137
|
+
it { expect { create }.not_to raise_error }
|
138
|
+
it('results is nil') { expect(results).to be_nil }
|
139
|
+
|
140
|
+
it('error messages array is populated') do
|
141
|
+
expect(error_messages.first.downcase).to eq('invalid request body')
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'with missing params' do
|
146
|
+
let(:params) { nil }
|
147
|
+
|
148
|
+
it_behaves_like 'a request that raises an error'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe '#update' do
|
153
|
+
subject(:update) { described_class.new(client).update(id, params) }
|
154
|
+
|
155
|
+
let(:params) { {} }
|
156
|
+
let(:results) { update[0] }
|
157
|
+
let(:error_messages) { update[1] }
|
158
|
+
|
159
|
+
context 'with valid session id' do
|
160
|
+
let(:id) { :valid_id }
|
161
|
+
|
162
|
+
context 'with valid params' do
|
163
|
+
let(:params) { {"question_id": '1234'} }
|
164
|
+
|
165
|
+
it_behaves_like 'an API request'
|
166
|
+
it_behaves_like 'a successful request'
|
167
|
+
it('returns the next question') do
|
168
|
+
expect(results).to have_key(:question)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'with invalid params' do
|
173
|
+
let(:params) { {"question_id": 'invalid'} }
|
174
|
+
|
175
|
+
it_behaves_like 'an API request'
|
176
|
+
it('results is nil') { expect(results).to be_nil }
|
177
|
+
|
178
|
+
it('error messages array is populated') do
|
179
|
+
expect(error_messages.first.downcase).to eq('question with id (invalid) not found ')
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'with invalid session id' do
|
185
|
+
let(:id) { :invalid_id }
|
186
|
+
let(:params) { {"question_id": '1234'} }
|
187
|
+
|
188
|
+
it_behaves_like 'an API request'
|
189
|
+
it('results is nil') { expect(results).to be_nil }
|
190
|
+
|
191
|
+
it('error messages array is populated') do
|
192
|
+
expect(error_messages.first.downcase).to eq(
|
193
|
+
'resource not found'
|
194
|
+
)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|