gocardless_pro 2.40.0 → 2.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoCardlessPro::Services::VerificationDetailsService do
4
+ let(:client) do
5
+ GoCardlessPro::Client.new(
6
+ access_token: 'SECRET_TOKEN'
7
+ )
8
+ end
9
+
10
+ let(:response_headers) { { 'Content-Type' => 'application/json' } }
11
+
12
+ describe '#create' do
13
+ subject(:post_create_response) { client.verification_details.create(params: new_resource) }
14
+ context 'with a valid request' do
15
+ let(:new_resource) do
16
+ {
17
+
18
+ 'address_line1' => 'address_line1-input',
19
+ 'address_line2' => 'address_line2-input',
20
+ 'address_line3' => 'address_line3-input',
21
+ 'city' => 'city-input',
22
+ 'company_number' => 'company_number-input',
23
+ 'description' => 'description-input',
24
+ 'directors' => 'directors-input',
25
+ 'links' => 'links-input',
26
+ 'postal_code' => 'postal_code-input',
27
+ }
28
+ end
29
+
30
+ before do
31
+ stub_request(:post, %r{.*api.gocardless.com/verification_details}).
32
+ with(
33
+ body: {
34
+ 'verification_details' => {
35
+
36
+ 'address_line1' => 'address_line1-input',
37
+ 'address_line2' => 'address_line2-input',
38
+ 'address_line3' => 'address_line3-input',
39
+ 'city' => 'city-input',
40
+ 'company_number' => 'company_number-input',
41
+ 'description' => 'description-input',
42
+ 'directors' => 'directors-input',
43
+ 'links' => 'links-input',
44
+ 'postal_code' => 'postal_code-input',
45
+ },
46
+ }
47
+ ).
48
+ to_return(
49
+ body: {
50
+ 'verification_details' =>
51
+
52
+ {
53
+
54
+ 'address_line1' => 'address_line1-input',
55
+ 'address_line2' => 'address_line2-input',
56
+ 'address_line3' => 'address_line3-input',
57
+ 'city' => 'city-input',
58
+ 'company_number' => 'company_number-input',
59
+ 'description' => 'description-input',
60
+ 'directors' => 'directors-input',
61
+ 'links' => 'links-input',
62
+ 'postal_code' => 'postal_code-input',
63
+ },
64
+
65
+ }.to_json,
66
+ headers: response_headers
67
+ )
68
+ end
69
+
70
+ it 'creates and returns the resource' do
71
+ expect(post_create_response).to be_a(GoCardlessPro::Resources::VerificationDetail)
72
+ end
73
+
74
+ describe 'retry behaviour' do
75
+ before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
76
+
77
+ it 'retries timeouts' do
78
+ stub = stub_request(:post, %r{.*api.gocardless.com/verification_details}).
79
+ to_timeout.then.to_return(status: 200, headers: response_headers)
80
+
81
+ post_create_response
82
+ expect(stub).to have_been_requested.twice
83
+ end
84
+
85
+ it 'retries 5XX errors' do
86
+ stub = stub_request(:post, %r{.*api.gocardless.com/verification_details}).
87
+ to_return(status: 502,
88
+ headers: { 'Content-Type' => 'text/html' },
89
+ body: '<html><body>Response from Cloudflare</body></html>').
90
+ then.to_return(status: 200, headers: response_headers)
91
+
92
+ post_create_response
93
+ expect(stub).to have_been_requested.twice
94
+ end
95
+ end
96
+ end
97
+
98
+ context 'with a request that returns a validation error' do
99
+ let(:new_resource) { {} }
100
+
101
+ before do
102
+ stub_request(:post, %r{.*api.gocardless.com/verification_details}).to_return(
103
+ body: {
104
+ error: {
105
+ type: 'validation_failed',
106
+ code: 422,
107
+ errors: [
108
+ { message: 'test error message', field: 'test_field' },
109
+ ],
110
+ },
111
+ }.to_json,
112
+ headers: response_headers,
113
+ status: 422
114
+ )
115
+ end
116
+
117
+ it 'throws the correct error' do
118
+ expect { post_create_response }.to raise_error(GoCardlessPro::ValidationError)
119
+ end
120
+ end
121
+
122
+ context 'with a request that returns an idempotent creation conflict error' do
123
+ let(:id) { 'ID123' }
124
+
125
+ let(:new_resource) do
126
+ {
127
+
128
+ 'address_line1' => 'address_line1-input',
129
+ 'address_line2' => 'address_line2-input',
130
+ 'address_line3' => 'address_line3-input',
131
+ 'city' => 'city-input',
132
+ 'company_number' => 'company_number-input',
133
+ 'description' => 'description-input',
134
+ 'directors' => 'directors-input',
135
+ 'links' => 'links-input',
136
+ 'postal_code' => 'postal_code-input',
137
+ }
138
+ end
139
+
140
+ let!(:post_stub) do
141
+ stub_request(:post, %r{.*api.gocardless.com/verification_details}).to_return(
142
+ body: {
143
+ error: {
144
+ type: 'invalid_state',
145
+ code: 409,
146
+ errors: [
147
+ {
148
+ message: 'A resource has already been created with this idempotency key',
149
+ reason: 'idempotent_creation_conflict',
150
+ links: {
151
+ conflicting_resource_id: id,
152
+ },
153
+ },
154
+ ],
155
+ },
156
+ }.to_json,
157
+ headers: response_headers,
158
+ status: 409
159
+ )
160
+ end
161
+
162
+ it 'raises an InvalidStateError' do
163
+ expect { post_create_response }.to raise_error(GoCardlessPro::InvalidStateError)
164
+ expect(post_stub).to have_been_requested
165
+ end
166
+ end
167
+ end
168
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gocardless_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.40.0
4
+ version: 2.41.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-28 00:00:00.000000000 Z
11
+ date: 2023-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -188,8 +188,10 @@ files:
188
188
  - lib/gocardless_pro/resources/redirect_flow.rb
189
189
  - lib/gocardless_pro/resources/refund.rb
190
190
  - lib/gocardless_pro/resources/scenario_simulator.rb
191
+ - lib/gocardless_pro/resources/scheme_identifier.rb
191
192
  - lib/gocardless_pro/resources/subscription.rb
192
193
  - lib/gocardless_pro/resources/tax_rate.rb
194
+ - lib/gocardless_pro/resources/verification_detail.rb
193
195
  - lib/gocardless_pro/resources/webhook.rb
194
196
  - lib/gocardless_pro/response.rb
195
197
  - lib/gocardless_pro/services/bank_authorisations_service.rb
@@ -219,8 +221,10 @@ files:
219
221
  - lib/gocardless_pro/services/redirect_flows_service.rb
220
222
  - lib/gocardless_pro/services/refunds_service.rb
221
223
  - lib/gocardless_pro/services/scenario_simulators_service.rb
224
+ - lib/gocardless_pro/services/scheme_identifiers_service.rb
222
225
  - lib/gocardless_pro/services/subscriptions_service.rb
223
226
  - lib/gocardless_pro/services/tax_rates_service.rb
227
+ - lib/gocardless_pro/services/verification_details_service.rb
224
228
  - lib/gocardless_pro/services/webhooks_service.rb
225
229
  - lib/gocardless_pro/version.rb
226
230
  - lib/gocardless_pro/webhook.rb
@@ -255,8 +259,10 @@ files:
255
259
  - spec/resources/redirect_flow_spec.rb
256
260
  - spec/resources/refund_spec.rb
257
261
  - spec/resources/scenario_simulator_spec.rb
262
+ - spec/resources/scheme_identifier_spec.rb
258
263
  - spec/resources/subscription_spec.rb
259
264
  - spec/resources/tax_rate_spec.rb
265
+ - spec/resources/verification_detail_spec.rb
260
266
  - spec/resources/webhook_spec.rb
261
267
  - spec/response_spec.rb
262
268
  - spec/services/bank_authorisations_service_spec.rb
@@ -285,8 +291,10 @@ files:
285
291
  - spec/services/redirect_flows_service_spec.rb
286
292
  - spec/services/refunds_service_spec.rb
287
293
  - spec/services/scenario_simulators_service_spec.rb
294
+ - spec/services/scheme_identifiers_service_spec.rb
288
295
  - spec/services/subscriptions_service_spec.rb
289
296
  - spec/services/tax_rates_service_spec.rb
297
+ - spec/services/verification_details_service_spec.rb
290
298
  - spec/services/webhooks_service_spec.rb
291
299
  - spec/spec_helper.rb
292
300
  - spec/webhook_spec.rb
@@ -345,8 +353,10 @@ test_files:
345
353
  - spec/resources/redirect_flow_spec.rb
346
354
  - spec/resources/refund_spec.rb
347
355
  - spec/resources/scenario_simulator_spec.rb
356
+ - spec/resources/scheme_identifier_spec.rb
348
357
  - spec/resources/subscription_spec.rb
349
358
  - spec/resources/tax_rate_spec.rb
359
+ - spec/resources/verification_detail_spec.rb
350
360
  - spec/resources/webhook_spec.rb
351
361
  - spec/response_spec.rb
352
362
  - spec/services/bank_authorisations_service_spec.rb
@@ -375,8 +385,10 @@ test_files:
375
385
  - spec/services/redirect_flows_service_spec.rb
376
386
  - spec/services/refunds_service_spec.rb
377
387
  - spec/services/scenario_simulators_service_spec.rb
388
+ - spec/services/scheme_identifiers_service_spec.rb
378
389
  - spec/services/subscriptions_service_spec.rb
379
390
  - spec/services/tax_rates_service_spec.rb
391
+ - spec/services/verification_details_service_spec.rb
380
392
  - spec/services/webhooks_service_spec.rb
381
393
  - spec/spec_helper.rb
382
394
  - spec/webhook_spec.rb