finapps 5.0.25 → 5.0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +2 -1
  3. data/RELEASES.md +40 -0
  4. data/finapps.gemspec +1 -1
  5. data/lib/finapps.rb +6 -1
  6. data/lib/finapps/rest/client.rb +14 -8
  7. data/lib/finapps/rest/consumers.rb +3 -1
  8. data/lib/finapps/rest/documents_orders.rb +88 -0
  9. data/lib/finapps/rest/documents_orders_notifications.rb +14 -0
  10. data/lib/finapps/rest/esign_templates.rb +11 -0
  11. data/lib/finapps/rest/signed_documents_downloads.rb +15 -0
  12. data/lib/finapps/rest/verix/verix_documents.rb +21 -0
  13. data/lib/finapps/rest/verix/verix_pdf_documents.rb +15 -0
  14. data/lib/finapps/version.rb +1 -1
  15. data/spec/rest/consumers_spec.rb +24 -1
  16. data/spec/rest/documents_orders_notifications_spec.rb +40 -0
  17. data/spec/rest/documents_orders_spec.rb +272 -0
  18. data/spec/rest/esign_templates_spec.rb +20 -0
  19. data/spec/rest/signed_documents_downloads_spec.rb +35 -0
  20. data/spec/rest/verix/verix_documents_spec.rb +52 -0
  21. data/spec/rest/verix/verix_pdf_documents_spec.rb +35 -0
  22. data/spec/rest/verix/verix_records_spec.rb +3 -14
  23. data/spec/support/fake_api.rb +74 -8
  24. data/spec/support/fixtures/documents_order.json +75 -0
  25. data/spec/support/fixtures/documents_orders.json +32 -0
  26. data/spec/support/fixtures/esign_templates.json +6 -0
  27. data/spec/support/fixtures/invalid_order_id.json +5 -0
  28. data/spec/support/fixtures/invalid_signature_id.json +5 -0
  29. data/spec/support/fixtures/sign_url.json +4 -0
  30. data/spec/support/fixtures/signed_document.pdf +0 -0
  31. data/spec/support/fixtures/verix/document/document.pdf +0 -0
  32. data/spec/support/fixtures/verix/document/list.json +36 -0
  33. data/spec/support/fixtures/verix/document/show.json +35 -0
  34. data/spec/support/fixtures/verix/record/create.json +25 -17
  35. data/spec/support/fixtures/verix/record/list.json +121 -45
  36. metadata +80 -56
  37. data/lib/finapps/rest/statements.rb +0 -16
  38. data/spec/rest/statements_spec.rb +0 -42
  39. data/spec/support/fixtures/fake_pdf_statement.json +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ce0fc688800cfa247a62642d55c679edbe52a0a10556e359bf290b8f202351a
4
- data.tar.gz: 0b5a307b87e1b704c8fa684a98f6fcb804538d3ac6326a08ac8285f462f23556
3
+ metadata.gz: 1c74f2340d52ad3cd13dc2bdf8415e7cf89e48f0993dbb346456546910a69ba9
4
+ data.tar.gz: 3bdefc2032a2efa241d5cc72ab5d6b74fc44b568599f0054bf5477e473fab81f
5
5
  SHA512:
6
- metadata.gz: 3bbddba45806a7df005d72934aff45b43a3f574bf054e63622e2e7acc39ec06bd210742cd5dc8b9684cb9d179e8b4e882cb04fa9d1d278bea81dd002f4dd89f9
7
- data.tar.gz: 2d8ac6a59586af1c7eaa3d7e3b8bcf78b7fcaca9ea7d440e07c639d7e8cc728439579eb45ff0cc78a399349b00cf6f8f4655cdc7d1834c82b95886881ab515d3
6
+ metadata.gz: 9cb6732ca1b8ba09cc84920ec7fdd086259cd339f012f72cf19c30387f877f3af1aa495bea47f019ee638e9a32eb3f76bbd0397e89b6e773e108da98e9bc8300
7
+ data.tar.gz: 5dedcdb78fa82b22011520031aae7aa55b1c6e35a7f5ccd55e16fdaa1c6d3b19bd4d17e300a00849d1768be6528b2396adff43ef96b6c6f060740af4315c857f
@@ -12,7 +12,8 @@ plugins:
12
12
  enabled: true
13
13
  config:
14
14
  languages:
15
- - ruby
15
+ ruby:
16
+ mass_threshold: 30
16
17
 
17
18
  ratings:
18
19
  paths:
@@ -1,3 +1,43 @@
1
+ ## [5.0.30] - 2020-05-28
2
+
3
+ ### Added
4
+ * New esign endpoints ([#222][i222])
5
+
6
+ ### Changed
7
+ * Search query for documents orders ([#221][i221])
8
+
9
+ [i221]: https://github.com/finapps/ruby-client/issues/221
10
+ [i222]: https://github.com/finapps/ruby-client/issues/222
11
+
12
+ [5.0.30]: https://github.com/finapps/ruby-client/compare/5.0.29...5.0.30
13
+
14
+ ## [5.0.29] - 2020-05-08
15
+
16
+ ### Added
17
+ * Document-orders endpoints ([#219][i219])
18
+
19
+ [i219]: https://github.com/finapps/ruby-client/issues/219
20
+
21
+ [5.0.29]: https://github.com/finapps/ruby-client/compare/5.0.28...5.0.29
22
+
23
+ ## [5.0.28] - 2020-02-19
24
+
25
+ ### Added
26
+ * Verix document endpoints ([#217][i217])
27
+
28
+ [i217]: https://github.com/finapps/ruby-client/issues/217
29
+
30
+ [5.0.28]: https://github.com/finapps/ruby-client/compare/5.0.27...5.0.28
31
+
32
+ ## [5.0.27] - 2020-02-11
33
+
34
+ ### Changed
35
+ * Update finapps-core gem ([#215][i215])
36
+
37
+ [i215]: https://github.com/finapps/ruby-client/issues/215
38
+
39
+ [5.0.27]: https://github.com/finapps/ruby-client/compare/5.0.26...5.0.27
40
+
1
41
  ## [5.0.23] - 2020-01-16
2
42
 
3
43
  ### 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.6'
23
+ spec.add_runtime_dependency 'finapps_core', '~> 5.0', '>= 5.0.7'
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'
@@ -19,7 +19,6 @@ require 'finapps/rest/products'
19
19
  require 'finapps/rest/order_assignments'
20
20
  require 'finapps/rest/client'
21
21
  require 'finapps/rest/order_refreshes'
22
- require 'finapps/rest/statements'
23
22
  require 'finapps/rest/tenant_settings'
24
23
  require 'finapps/rest/tenant_app_settings'
25
24
  require 'finapps/rest/portfolios'
@@ -30,6 +29,10 @@ require 'finapps/rest/portfolios_alerts'
30
29
  require 'finapps/rest/portfolios_consumers'
31
30
  require 'finapps/rest/consumers_portfolios'
32
31
  require 'finapps/rest/portfolio_reports'
32
+ require 'finapps/rest/documents_orders'
33
+ require 'finapps/rest/esign_templates'
34
+ require 'finapps/rest/signed_documents_downloads'
35
+ require 'finapps/rest/documents_orders_notifications'
33
36
 
34
37
  require 'finapps/rest/plaid/plaid_resources'
35
38
  require 'finapps/rest/plaid/plaid_webhooks'
@@ -40,6 +43,8 @@ require 'finapps/rest/plaid/plaid_institution_logos'
40
43
 
41
44
  require 'finapps/rest/verix/verix_metadata'
42
45
  require 'finapps/rest/verix/verix_records'
46
+ require 'finapps/rest/verix/verix_pdf_documents'
47
+ require 'finapps/rest/verix/verix_documents'
43
48
 
44
49
  require 'finapps/utils/query_builder'
45
50
  require 'finapps/version' unless defined?(FinApps::VERSION)
@@ -9,7 +9,11 @@ module FinApps
9
9
  RESOURCES = %i[
10
10
  alert_definitions
11
11
  alert_occurrences
12
+ consumers
12
13
  consumers_portfolios
14
+ documents_orders
15
+ documents_orders_notifications
16
+ esign_templates
13
17
  orders
14
18
  order_assignments
15
19
  order_notifications
@@ -20,24 +24,26 @@ module FinApps
20
24
  operators
21
25
  operators_password_resets
22
26
  password_resets
23
- products
27
+ plaid_webhooks
28
+ plaid_consumer_institutions
29
+ plaid_accounts
30
+ plaid_account_permissions
31
+ plaid_institution_logos
24
32
  portfolios
25
33
  portfolios_alerts
26
34
  portfolios_available_consumers
27
35
  portfolios_consumers
28
36
  portfolio_reports
37
+ products
29
38
  sessions
30
- consumers
39
+ signed_documents_downloads
31
40
  tenant_settings
32
41
  tenant_app_settings
33
- version
34
- plaid_webhooks
35
- plaid_consumer_institutions
36
- plaid_accounts
37
- plaid_account_permissions
38
- plaid_institution_logos
39
42
  verix_metadata
40
43
  verix_records
44
+ verix_pdf_documents
45
+ verix_documents
46
+ version
41
47
  ].freeze
42
48
 
43
49
  # @param [String] tenant_token
@@ -48,7 +48,9 @@ module FinApps
48
48
  end
49
49
 
50
50
  def build_filter(params)
51
- search_query(params[:searchTerm]) if params[:searchTerm]
51
+ return {} unless params[:searchTerm]
52
+
53
+ search_query(params[:searchTerm])
52
54
  end
53
55
 
54
56
  def search_query(term)
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../utils/query_builder'
4
+
5
+ module FinApps
6
+ module REST
7
+ class DocumentsOrders < FinAppsCore::REST::Resources
8
+ include FinApps::Utils::QueryBuilder
9
+
10
+ def list(params = nil)
11
+ path = 'documents/orders'
12
+ return super(path) if params.nil?
13
+ raise FinAppsCore::InvalidArgumentsError, 'Invalid argument: params' unless params.is_a? Hash
14
+
15
+ super build_query_path(path, params)
16
+ end
17
+
18
+ def show(id)
19
+ not_blank(id, :order_id)
20
+ super(id, "documents/orders/#{id}")
21
+ end
22
+
23
+ def create(params)
24
+ not_blank(params, :params)
25
+ super(params, 'documents/orders')
26
+ end
27
+
28
+ def update(id, params = nil)
29
+ not_blank(id, :order_id)
30
+ not_blank(params, :params)
31
+ super(params, "documents/orders/#{id}")
32
+ end
33
+
34
+ def destroy(id)
35
+ not_blank(id, :order_id)
36
+ super(id, "documents/orders/#{id}")
37
+ end
38
+
39
+ def show_signing_url(order_id, signature_id)
40
+ not_blank(order_id, :order_id)
41
+ not_blank(signature_id, :signature_id)
42
+ path = "documents/orders/#{order_id}/sign_url/#{signature_id}"
43
+ send_request path, :get
44
+ end
45
+
46
+ private
47
+
48
+ def build_filter(params)
49
+ search_query(params[:searchTerm]).merge(consumer_query(params[:consumer])).merge(tag_query(params[:tag]))
50
+ end
51
+
52
+ def search_query(term)
53
+ if term
54
+ {
55
+ "$or": [
56
+ { "applicant.email": term },
57
+ { "applicant.first_name": term },
58
+ { "applicant.last_name": term },
59
+ {
60
+ "reference_no": {
61
+ "$regex": "^#{term}", "$options": 'i'
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ else
67
+ {}
68
+ end
69
+ end
70
+
71
+ def tag_query(tag)
72
+ if tag
73
+ { "tag": tag.empty? ? nil : tag }
74
+ else
75
+ {}
76
+ end
77
+ end
78
+
79
+ def consumer_query(consumer)
80
+ if consumer
81
+ { "consumer_id": consumer.empty? ? nil : consumer }
82
+ else
83
+ {}
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class DocumentsOrdersNotifications < FinAppsCore::REST::Resources
6
+ def create(id)
7
+ not_blank(id, :id)
8
+
9
+ path = "documents/orders/#{ERB::Util.url_encode(id)}/notify"
10
+ super nil, path
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class EsignTemplates < FinAppsCore::REST::Resources
6
+ def list
7
+ super('esign_templates')
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class SignedDocumentsDownloads < FinAppsCore::REST::Resources
6
+ def show(consumer_id, signature_request_id)
7
+ not_blank(consumer_id, :consumer_id)
8
+ not_blank(signature_request_id, :signature_request_id)
9
+ path =
10
+ "consumers/#{ERB::Util.url_encode(consumer_id)}/documents/#{ERB::Util.url_encode(signature_request_id)}"
11
+ super(nil, path)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class VerixDocuments < FinAppsCore::REST::Resources
6
+ def list(record_id)
7
+ not_blank(record_id, :record_id)
8
+ path = "v/record/#{ERB::Util.url_encode(record_id)}/document"
9
+ super path
10
+ end
11
+
12
+ def show(record_id, document_id)
13
+ not_blank(record_id, :record_id)
14
+ not_blank(document_id, :document_id)
15
+ path =
16
+ "v/record/#{ERB::Util.url_encode(record_id)}/document/#{ERB::Util.url_encode(document_id)}"
17
+ super(nil, path)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class VerixPdfDocuments < FinAppsCore::REST::Resources # :nodoc:
6
+ def show(record_id, provider_id)
7
+ not_blank(record_id, :record_id)
8
+ not_blank(provider_id, :provider_id)
9
+ path =
10
+ "v/record/#{ERB::Util.url_encode(record_id)}/file/#{ERB::Util.url_encode(provider_id)}"
11
+ super(nil, path)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinApps
4
- VERSION = '5.0.25'
4
+ VERSION = '5.0.30'
5
5
  end
@@ -62,7 +62,30 @@ RSpec.describe FinApps::REST::Consumers,
62
62
  it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
63
63
  end
64
64
 
65
- context 'when including valid params' do
65
+ context 'when including valid params without searchTerm' do
66
+ let(:params) do
67
+ {
68
+ page: 3,
69
+ requested: 19
70
+ }
71
+ end
72
+
73
+ it { expect { list }.to_not raise_error }
74
+ it('returns an array') { expect(list).to be_a(Array) }
75
+ it('performs a get and returns the response') do
76
+ expect(results).to have_key(:records)
77
+ end
78
+ it('returns no error messages') do
79
+ expect(error_messages).to be_empty
80
+ end
81
+ it 'builds query and sends proper request' do
82
+ list
83
+ url = "#{versioned_api_path}/consumers?page=3&requested=19"
84
+ expect(WebMock).to have_requested(:get, url)
85
+ end
86
+ end
87
+
88
+ context 'when including valid params with searchTerm' do
66
89
  let(:params) do
67
90
  {
68
91
  page: 2,
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+
5
+ RSpec.describe FinApps::REST::DocumentsOrdersNotifications do
6
+ include SpecHelpers::Client
7
+
8
+ describe '#create' do
9
+ subject(:notifications) { FinApps::REST::DocumentsOrdersNotifications.new(client) }
10
+
11
+ context 'when missing id' do
12
+ let(:create) { subject.create(nil) }
13
+ it('returns missing argument error') do
14
+ expect { create }.to raise_error(FinAppsCore::MissingArgumentsError)
15
+ end
16
+ end
17
+
18
+ context 'when invalid id is provided' do
19
+ let(:create) { subject.create(:invalid_id) }
20
+ let(:results) { create[RESULTS] }
21
+ let(:error_messages) { create[ERROR_MESSAGES] }
22
+
23
+ it { expect { create }.not_to raise_error }
24
+ it('results is nil') { expect(results).to be_nil }
25
+ it('error messages array is populated') do
26
+ expect(error_messages.first.downcase).to eq('order id is invalid')
27
+ end
28
+ end
29
+
30
+ context 'for valid id' do
31
+ let(:create) { subject.create(:valid_id) }
32
+ let(:results) { create[RESULTS] }
33
+ let(:error_messages) { create[ERROR_MESSAGES] }
34
+
35
+ it { expect { create }.not_to raise_error }
36
+ it('results is nil') { expect(results).to be_nil }
37
+ it('error_messages array is empty') { expect(error_messages).to eq([]) }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,272 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+ require 'rest/api_request'
5
+
6
+ RSpec.describe FinApps::REST::DocumentsOrders do
7
+ include SpecHelpers::Client
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
+ describe '#list' do
18
+ subject(:list) { FinApps::REST::DocumentsOrders.new(client).list(params) }
19
+ let(:results) { list[0] }
20
+ let(:error_messages) { list[1] }
21
+
22
+ context 'with valid params' do
23
+ let(:params) do
24
+ {
25
+ page: 2,
26
+ sort: 'tag',
27
+ requested: 25,
28
+ searchTerm: 'term',
29
+ consumer: 'valid_consumer_id'
30
+ }
31
+ end
32
+
33
+ context 'without searchTerm' do
34
+ let(:params) { { "searchTerm": nil, "page": 2 } }
35
+ it_behaves_like 'an API request'
36
+ it_behaves_like 'a successful request'
37
+ it 'performs a get and returns the response' do
38
+ expect(results).to have_key(:records)
39
+ end
40
+ it 'builds query and sends proper request' do
41
+ list
42
+ url = "#{versioned_api_path}/documents/orders?page=2"
43
+ expect(WebMock).to have_requested(:get, url)
44
+ end
45
+ end
46
+
47
+ context 'with search term' do
48
+ it_behaves_like 'an API request'
49
+ it_behaves_like 'a successful request'
50
+ it 'performs a get and returns the response' do
51
+ expect(results).to have_key(:records)
52
+ end
53
+ it 'builds query and sends proper request' do
54
+ list
55
+ url =
56
+ "#{versioned_api_path}/documents/orders?filter=%7B%22$or%22:%5B%7B%22applicant.email%22:"\
57
+ '%22term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,%7B%22applicant.last_name%22:'\
58
+ '%22term%22%7D,%7B%22reference_no%22:%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,'\
59
+ '%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=tag '
60
+
61
+ expect(WebMock).to have_requested(:get, url)
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'with invalid params' do
67
+ let(:params) { ['invalid array'] }
68
+ it { expect { list }.to raise_error(FinAppsCore::InvalidArgumentsError) }
69
+ end
70
+
71
+ context 'with missing params' do
72
+ let(:params) { nil }
73
+ it_behaves_like 'an API request'
74
+ it_behaves_like 'a successful request'
75
+ it('performs a get and returns the response') do
76
+ expect(results).to have_key(:records)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe '#show' do
82
+ subject(:show) { FinApps::REST::DocumentsOrders.new(client).show(id) }
83
+ let(:results) { show[0] }
84
+ let(:error_messages) { show[1] }
85
+
86
+ context 'with valid id' do
87
+ let(:id) { :valid_order_id }
88
+ it_behaves_like 'an API request'
89
+ it_behaves_like 'a successful request'
90
+ it('results is a Hash') { expect(results).to be_a(Hash) }
91
+ it('performs a get and returns the response') do
92
+ expect(results).to have_key(:order_id)
93
+ end
94
+ end
95
+
96
+ context 'with invalid id' do
97
+ let(:id) { :invalid_order_id }
98
+ it { expect(results).to be_nil }
99
+ it { expect(error_messages).to_not be_empty }
100
+ end
101
+
102
+ context 'when missing id' do
103
+ let(:id) { nil }
104
+ it_behaves_like 'a request that raises an error'
105
+ end
106
+ end
107
+
108
+ describe '#create' do
109
+ subject(:create) { FinApps::REST::DocumentsOrders.new(client).create(params) }
110
+ let(:results) { create[0] }
111
+ let(:error_messages) { create[1] }
112
+
113
+ context 'with valid params' do
114
+ let(:params) do
115
+ {
116
+ "applicant": {
117
+ "email": 'validemail@financialapps.com',
118
+ "first_name": 'Emily',
119
+ "last_name": 'Macs',
120
+ "role": 'patient'
121
+ },
122
+ "esign_documents": [
123
+ 'temp-id'
124
+ ],
125
+ "reference_no": 'REFNO',
126
+ "tag": 'new'
127
+ }
128
+ end
129
+ it_behaves_like 'an API request'
130
+ it_behaves_like 'a successful request'
131
+ it('results is a Hash') { expect(results).to be_a(Hash) }
132
+ it('performs a post and returns the response') do
133
+ expect(results).to have_key(:order_id)
134
+ end
135
+ end
136
+
137
+ context 'with invalid params' do
138
+ let(:params) do
139
+ {
140
+ "applicant": {
141
+ "email": 'validemail@financialapps.com',
142
+ "first_name": 'Emily',
143
+ "last_name": 'Macs',
144
+ "role": 'patient'
145
+ },
146
+ "reference_no": 'REFNO'
147
+ }
148
+ end
149
+ it { expect { create }.not_to raise_error }
150
+ it('results is nil') { expect(results).to be_nil }
151
+ it('error messages array is populated') do
152
+ expect(error_messages.first.downcase).to eq('invalid request body')
153
+ end
154
+ end
155
+
156
+ context 'with missing params' do
157
+ let(:params) { nil }
158
+ it_behaves_like 'a request that raises an error'
159
+ end
160
+ end
161
+
162
+ describe '#update' do
163
+ subject(:update) { FinApps::REST::DocumentsOrders.new(client).update(id, params) }
164
+ let(:params) { {} }
165
+ let(:results) { update[0] }
166
+ let(:error_messages) { update[1] }
167
+
168
+ context 'with valid id' do
169
+ let(:id) { :valid_order_id }
170
+
171
+ context 'with valid params' do
172
+ let(:params) { { "tag": 'pending' } }
173
+ it_behaves_like 'an API request'
174
+ it_behaves_like 'a successful request'
175
+ it('results is nil') { expect(results).to be_nil }
176
+ end
177
+
178
+ context 'with invalid params' do
179
+ let(:params) { { "tag": 'invalid' } }
180
+ it_behaves_like 'an API request'
181
+ it('results is nil') { expect(results).to be_nil }
182
+ it('error messages array is populated') do
183
+ expect(error_messages.first.downcase).to eq('invalid request body')
184
+ end
185
+ end
186
+ end
187
+
188
+ context 'with invalid id' do
189
+ let(:id) { :invalid_order_id }
190
+ let(:params) { { applicant: { first_name: 'Quasar' } } }
191
+ it_behaves_like 'an API request'
192
+ it('results is nil') { expect(results).to be_nil }
193
+ it('error messages array is populated') do
194
+ expect(error_messages.first.downcase).to eq(
195
+ 'order id is invalid'
196
+ )
197
+ end
198
+ end
199
+
200
+ context 'with missing id' do
201
+ let(:id) { nil }
202
+ it_behaves_like 'a request that raises an error'
203
+ end
204
+ end
205
+
206
+ describe '#destroy' do
207
+ subject(:destroy) { FinApps::REST::DocumentsOrders.new(client).destroy(id) }
208
+ let(:results) { destroy[0] }
209
+ let(:error_messages) { destroy[1] }
210
+
211
+ context 'with valid id' do
212
+ let(:id) { :valid_order_id }
213
+ it_behaves_like 'an API request'
214
+ it_behaves_like 'a successful request'
215
+ it('results is nil') { expect(results).to be_nil }
216
+ end
217
+
218
+ context 'with invalid id' do
219
+ let(:id) { :invalid_order_id }
220
+ it_behaves_like 'an API request'
221
+ it('results is nil') { expect(results).to be_nil }
222
+ it('error messages array is populated') do
223
+ expect(error_messages.first.downcase).to eq('resource not found')
224
+ end
225
+ end
226
+
227
+ context 'with missing id' do
228
+ let(:id) { nil }
229
+ it_behaves_like 'a request that raises an error'
230
+ end
231
+ end
232
+
233
+ describe '#show_signing_url' do
234
+ subject(:sign_url) { FinApps::REST::DocumentsOrders.new(client).show_signing_url(order_id, signature_id) }
235
+ let(:results) { sign_url[0] }
236
+ let(:error_messages) { sign_url[1] }
237
+ let(:order_id) { :valid_order_id }
238
+ let(:signature_id) { :valid_signature_id }
239
+
240
+ context 'with valid order id' do
241
+ context 'with valid signature id' do
242
+ it_behaves_like 'an API request'
243
+ it_behaves_like 'a successful request'
244
+ it('performs a get and returns the response') do
245
+ expect(results).to have_key(:sign_url)
246
+ end
247
+ end
248
+
249
+ context 'with invalid signature id' do
250
+ let(:signature_id) { :invalid_signature_id }
251
+ it { expect(results).to be_nil }
252
+ it { expect(error_messages).to_not be_empty }
253
+ end
254
+ end
255
+
256
+ context 'with invalid order id' do
257
+ let(:order_id) { :invalid_order_id }
258
+ it { expect(results).to be_nil }
259
+ it { expect(error_messages).to_not be_empty }
260
+ end
261
+
262
+ context 'with missing order id' do
263
+ let(:order_id) { nil }
264
+ it_behaves_like 'a request that raises an error'
265
+ end
266
+
267
+ context 'with missing signature id' do
268
+ let(:signature_id) { nil }
269
+ it_behaves_like 'a request that raises an error'
270
+ end
271
+ end
272
+ end