gocardless_pro 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -4
- data/lib/gocardless_pro.rb +1 -0
- data/lib/gocardless_pro/api_service.rb +2 -0
- data/lib/gocardless_pro/client.rb +4 -3
- data/lib/gocardless_pro/error/invalid_state_error.rb +17 -0
- data/lib/gocardless_pro/middlewares/raise_gocardless_errors.rb +50 -0
- data/lib/gocardless_pro/request.rb +38 -1
- data/lib/gocardless_pro/resources/creditor.rb +2 -2
- data/lib/gocardless_pro/resources/creditor_bank_account.rb +11 -11
- data/lib/gocardless_pro/resources/customer_bank_account.rb +2 -2
- data/lib/gocardless_pro/resources/event.rb +2 -2
- data/lib/gocardless_pro/resources/mandate.rb +2 -2
- data/lib/gocardless_pro/resources/payment.rb +7 -7
- data/lib/gocardless_pro/resources/payout.rb +7 -6
- data/lib/gocardless_pro/resources/redirect_flow.rb +2 -2
- data/lib/gocardless_pro/resources/refund.rb +2 -2
- data/lib/gocardless_pro/resources/subscription.rb +2 -2
- data/lib/gocardless_pro/response.rb +2 -54
- data/lib/gocardless_pro/services/bank_details_lookups_service.rb +3 -0
- data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +31 -2
- data/lib/gocardless_pro/services/creditors_service.rb +21 -1
- data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +34 -2
- data/lib/gocardless_pro/services/customers_service.rb +21 -1
- data/lib/gocardless_pro/services/events_service.rb +5 -0
- data/lib/gocardless_pro/services/mandate_pdfs_service.rb +3 -0
- data/lib/gocardless_pro/services/mandates_service.rb +47 -3
- data/lib/gocardless_pro/services/payments_service.rb +47 -3
- data/lib/gocardless_pro/services/payouts_service.rb +5 -0
- data/lib/gocardless_pro/services/redirect_flows_service.rb +28 -2
- data/lib/gocardless_pro/services/refunds_service.rb +21 -1
- data/lib/gocardless_pro/services/subscriptions_service.rb +34 -2
- data/lib/gocardless_pro/version.rb +1 -1
- data/spec/api_service_spec.rb +106 -0
- data/spec/middlewares/raise_gocardless_errors_spec.rb +98 -0
- data/spec/resources/bank_details_lookup_spec.rb +102 -19
- data/spec/resources/creditor_bank_account_spec.rb +416 -40
- data/spec/resources/creditor_spec.rb +414 -53
- data/spec/resources/customer_bank_account_spec.rb +452 -40
- data/spec/resources/customer_spec.rb +457 -45
- data/spec/resources/event_spec.rb +171 -72
- data/spec/resources/mandate_pdf_spec.rb +100 -17
- data/spec/resources/mandate_spec.rb +501 -44
- data/spec/resources/payment_spec.rb +531 -48
- data/spec/resources/payout_spec.rb +189 -45
- data/spec/resources/redirect_flow_spec.rb +277 -43
- data/spec/resources/refund_spec.rb +349 -34
- data/spec/resources/subscription_spec.rb +531 -53
- data/spec/response_spec.rb +12 -79
- data/spec/services/bank_details_lookups_service_spec.rb +67 -2
- data/spec/services/creditor_bank_accounts_service_spec.rb +309 -31
- data/spec/services/creditors_service_spec.rb +343 -33
- data/spec/services/customer_bank_accounts_service_spec.rb +335 -32
- data/spec/services/customers_service_spec.rb +364 -36
- data/spec/services/events_service_spec.rb +185 -24
- data/spec/services/mandate_pdfs_service_spec.rb +66 -2
- data/spec/services/mandates_service_spec.rb +341 -33
- data/spec/services/payments_service_spec.rb +355 -35
- data/spec/services/payouts_service_spec.rb +206 -26
- data/spec/services/redirect_flows_service_spec.rb +137 -7
- data/spec/services/refunds_service_spec.rb +301 -27
- data/spec/services/subscriptions_service_spec.rb +377 -38
- metadata +6 -3
@@ -7,6 +7,8 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
7
7
|
)
|
8
8
|
end
|
9
9
|
|
10
|
+
let(:response_headers) { { 'Content-Type' => 'application/json' } }
|
11
|
+
|
10
12
|
describe '#create' do
|
11
13
|
subject(:post_create_response) { client.customer_bank_accounts.create(params: new_resource) }
|
12
14
|
context 'with a valid request' do
|
@@ -64,13 +66,36 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
64
66
|
}
|
65
67
|
|
66
68
|
}.to_json,
|
67
|
-
headers:
|
69
|
+
headers: response_headers
|
68
70
|
)
|
69
71
|
end
|
70
72
|
|
71
73
|
it 'creates and returns the resource' do
|
72
74
|
expect(post_create_response).to be_a(GoCardlessPro::Resources::CustomerBankAccount)
|
73
75
|
end
|
76
|
+
|
77
|
+
describe 'retry behaviour' do
|
78
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
79
|
+
|
80
|
+
it 'retries timeouts' do
|
81
|
+
stub = stub_request(:post, %r{.*api.gocardless.com/customer_bank_accounts})
|
82
|
+
.to_timeout.then.to_return(status: 200, headers: response_headers)
|
83
|
+
|
84
|
+
post_create_response
|
85
|
+
expect(stub).to have_been_requested.twice
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'retries 5XX errors' do
|
89
|
+
stub = stub_request(:post, %r{.*api.gocardless.com/customer_bank_accounts})
|
90
|
+
.to_return(status: 502,
|
91
|
+
headers: { 'Content-Type' => 'text/html' },
|
92
|
+
body: '<html><body>Response from Cloudflare</body></html>')
|
93
|
+
.then.to_return(status: 200, headers: response_headers)
|
94
|
+
|
95
|
+
post_create_response
|
96
|
+
expect(stub).to have_been_requested.twice
|
97
|
+
end
|
98
|
+
end
|
74
99
|
end
|
75
100
|
|
76
101
|
context 'with a request that returns a validation error' do
|
@@ -87,7 +112,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
87
112
|
]
|
88
113
|
}
|
89
114
|
}.to_json,
|
90
|
-
headers:
|
115
|
+
headers: response_headers,
|
91
116
|
status: 422
|
92
117
|
)
|
93
118
|
end
|
@@ -96,36 +121,111 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
96
121
|
expect { post_create_response }.to raise_error(GoCardlessPro::ValidationError)
|
97
122
|
end
|
98
123
|
end
|
124
|
+
|
125
|
+
context 'with a request that returns an idempotent creation conflict error' do
|
126
|
+
let(:id) { 'ID123' }
|
127
|
+
|
128
|
+
let(:new_resource) do
|
129
|
+
{
|
130
|
+
|
131
|
+
'account_holder_name' => 'account_holder_name-input',
|
132
|
+
'account_number_ending' => 'account_number_ending-input',
|
133
|
+
'bank_name' => 'bank_name-input',
|
134
|
+
'country_code' => 'country_code-input',
|
135
|
+
'created_at' => 'created_at-input',
|
136
|
+
'currency' => 'currency-input',
|
137
|
+
'enabled' => 'enabled-input',
|
138
|
+
'id' => 'id-input',
|
139
|
+
'links' => 'links-input',
|
140
|
+
'metadata' => 'metadata-input'
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
let!(:post_stub) do
|
145
|
+
stub_request(:post, %r{.*api.gocardless.com/customer_bank_accounts}).to_return(
|
146
|
+
body: {
|
147
|
+
error: {
|
148
|
+
type: 'invalid_state',
|
149
|
+
code: 409,
|
150
|
+
errors: [
|
151
|
+
{
|
152
|
+
message: 'A resource has already been created with this idempotency key',
|
153
|
+
reason: 'idempotent_creation_conflict',
|
154
|
+
links: {
|
155
|
+
conflicting_resource_id: id
|
156
|
+
}
|
157
|
+
}
|
158
|
+
]
|
159
|
+
}
|
160
|
+
}.to_json,
|
161
|
+
headers: response_headers,
|
162
|
+
status: 409
|
163
|
+
)
|
164
|
+
end
|
165
|
+
|
166
|
+
let!(:get_stub) do
|
167
|
+
stub_url = "/customer_bank_accounts/#{id}"
|
168
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/)
|
169
|
+
.to_return(
|
170
|
+
body: {
|
171
|
+
'customer_bank_accounts' => {
|
172
|
+
|
173
|
+
'account_holder_name' => 'account_holder_name-input',
|
174
|
+
'account_number_ending' => 'account_number_ending-input',
|
175
|
+
'bank_name' => 'bank_name-input',
|
176
|
+
'country_code' => 'country_code-input',
|
177
|
+
'created_at' => 'created_at-input',
|
178
|
+
'currency' => 'currency-input',
|
179
|
+
'enabled' => 'enabled-input',
|
180
|
+
'id' => 'id-input',
|
181
|
+
'links' => 'links-input',
|
182
|
+
'metadata' => 'metadata-input'
|
183
|
+
}
|
184
|
+
}.to_json,
|
185
|
+
headers: response_headers
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'fetches the already-created resource' do
|
190
|
+
post_create_response
|
191
|
+
expect(post_stub).to have_been_requested
|
192
|
+
expect(get_stub).to have_been_requested
|
193
|
+
end
|
194
|
+
end
|
99
195
|
end
|
100
196
|
|
101
197
|
describe '#list' do
|
102
198
|
describe 'with no filters' do
|
103
199
|
subject(:get_list_response) { client.customer_bank_accounts.list }
|
104
200
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
'customer_bank_accounts' => [{
|
201
|
+
let(:body) do
|
202
|
+
{
|
203
|
+
'customer_bank_accounts' => [{
|
109
204
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
}
|
205
|
+
'account_holder_name' => 'account_holder_name-input',
|
206
|
+
'account_number_ending' => 'account_number_ending-input',
|
207
|
+
'bank_name' => 'bank_name-input',
|
208
|
+
'country_code' => 'country_code-input',
|
209
|
+
'created_at' => 'created_at-input',
|
210
|
+
'currency' => 'currency-input',
|
211
|
+
'enabled' => 'enabled-input',
|
212
|
+
'id' => 'id-input',
|
213
|
+
'links' => 'links-input',
|
214
|
+
'metadata' => 'metadata-input'
|
215
|
+
}],
|
216
|
+
meta: {
|
217
|
+
cursors: {
|
218
|
+
before: nil,
|
219
|
+
after: 'ABC123'
|
126
220
|
}
|
127
|
-
}
|
128
|
-
|
221
|
+
}
|
222
|
+
}.to_json
|
223
|
+
end
|
224
|
+
|
225
|
+
before do
|
226
|
+
stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts}).to_return(
|
227
|
+
body: body,
|
228
|
+
headers: response_headers
|
129
229
|
)
|
130
230
|
end
|
131
231
|
|
@@ -157,6 +257,29 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
157
257
|
end
|
158
258
|
|
159
259
|
specify { expect(get_list_response.api_response.headers).to eql('content-type' => 'application/json') }
|
260
|
+
|
261
|
+
describe 'retry behaviour' do
|
262
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
263
|
+
|
264
|
+
it 'retries timeouts' do
|
265
|
+
stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts})
|
266
|
+
.to_timeout.then.to_return(status: 200, headers: response_headers, body: body)
|
267
|
+
|
268
|
+
get_list_response
|
269
|
+
expect(stub).to have_been_requested.twice
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'retries 5XX errors' do
|
273
|
+
stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts})
|
274
|
+
.to_return(status: 502,
|
275
|
+
headers: { 'Content-Type' => 'text/html' },
|
276
|
+
body: '<html><body>Response from Cloudflare</body></html>')
|
277
|
+
.then.to_return(status: 200, headers: response_headers, body: body)
|
278
|
+
|
279
|
+
get_list_response
|
280
|
+
expect(stub).to have_been_requested.twice
|
281
|
+
end
|
282
|
+
end
|
160
283
|
end
|
161
284
|
end
|
162
285
|
|
@@ -182,7 +305,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
182
305
|
limit: 1
|
183
306
|
}
|
184
307
|
}.to_json,
|
185
|
-
headers:
|
308
|
+
headers: response_headers
|
186
309
|
)
|
187
310
|
end
|
188
311
|
|
@@ -207,7 +330,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
207
330
|
cursors: {}
|
208
331
|
}
|
209
332
|
}.to_json,
|
210
|
-
headers:
|
333
|
+
headers: response_headers
|
211
334
|
)
|
212
335
|
end
|
213
336
|
|
@@ -216,6 +339,123 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
216
339
|
expect(first_response_stub).to have_been_requested
|
217
340
|
expect(second_response_stub).to have_been_requested
|
218
341
|
end
|
342
|
+
|
343
|
+
describe 'retry behaviour' do
|
344
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
345
|
+
|
346
|
+
it 'retries timeouts' do
|
347
|
+
first_response_stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts$}).to_return(
|
348
|
+
body: {
|
349
|
+
'customer_bank_accounts' => [{
|
350
|
+
|
351
|
+
'account_holder_name' => 'account_holder_name-input',
|
352
|
+
'account_number_ending' => 'account_number_ending-input',
|
353
|
+
'bank_name' => 'bank_name-input',
|
354
|
+
'country_code' => 'country_code-input',
|
355
|
+
'created_at' => 'created_at-input',
|
356
|
+
'currency' => 'currency-input',
|
357
|
+
'enabled' => 'enabled-input',
|
358
|
+
'id' => 'id-input',
|
359
|
+
'links' => 'links-input',
|
360
|
+
'metadata' => 'metadata-input'
|
361
|
+
}],
|
362
|
+
meta: {
|
363
|
+
cursors: { after: 'AB345' },
|
364
|
+
limit: 1
|
365
|
+
}
|
366
|
+
}.to_json,
|
367
|
+
headers: response_headers
|
368
|
+
)
|
369
|
+
|
370
|
+
second_response_stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts\?after=AB345})
|
371
|
+
.to_timeout.then
|
372
|
+
.to_return(
|
373
|
+
body: {
|
374
|
+
'customer_bank_accounts' => [{
|
375
|
+
|
376
|
+
'account_holder_name' => 'account_holder_name-input',
|
377
|
+
'account_number_ending' => 'account_number_ending-input',
|
378
|
+
'bank_name' => 'bank_name-input',
|
379
|
+
'country_code' => 'country_code-input',
|
380
|
+
'created_at' => 'created_at-input',
|
381
|
+
'currency' => 'currency-input',
|
382
|
+
'enabled' => 'enabled-input',
|
383
|
+
'id' => 'id-input',
|
384
|
+
'links' => 'links-input',
|
385
|
+
'metadata' => 'metadata-input'
|
386
|
+
}],
|
387
|
+
meta: {
|
388
|
+
limit: 2,
|
389
|
+
cursors: {}
|
390
|
+
}
|
391
|
+
}.to_json,
|
392
|
+
headers: response_headers
|
393
|
+
)
|
394
|
+
|
395
|
+
client.customer_bank_accounts.all.to_a
|
396
|
+
|
397
|
+
expect(first_response_stub).to have_been_requested
|
398
|
+
expect(second_response_stub).to have_been_requested.twice
|
399
|
+
end
|
400
|
+
|
401
|
+
it 'retries 5XX errors' do
|
402
|
+
first_response_stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts$}).to_return(
|
403
|
+
body: {
|
404
|
+
'customer_bank_accounts' => [{
|
405
|
+
|
406
|
+
'account_holder_name' => 'account_holder_name-input',
|
407
|
+
'account_number_ending' => 'account_number_ending-input',
|
408
|
+
'bank_name' => 'bank_name-input',
|
409
|
+
'country_code' => 'country_code-input',
|
410
|
+
'created_at' => 'created_at-input',
|
411
|
+
'currency' => 'currency-input',
|
412
|
+
'enabled' => 'enabled-input',
|
413
|
+
'id' => 'id-input',
|
414
|
+
'links' => 'links-input',
|
415
|
+
'metadata' => 'metadata-input'
|
416
|
+
}],
|
417
|
+
meta: {
|
418
|
+
cursors: { after: 'AB345' },
|
419
|
+
limit: 1
|
420
|
+
}
|
421
|
+
}.to_json,
|
422
|
+
headers: response_headers
|
423
|
+
)
|
424
|
+
|
425
|
+
second_response_stub = stub_request(:get, %r{.*api.gocardless.com/customer_bank_accounts\?after=AB345})
|
426
|
+
.to_return(
|
427
|
+
status: 502,
|
428
|
+
body: '<html><body>Response from Cloudflare</body></html>',
|
429
|
+
headers: { 'Content-Type' => 'text/html' }
|
430
|
+
).then.to_return(
|
431
|
+
body: {
|
432
|
+
'customer_bank_accounts' => [{
|
433
|
+
|
434
|
+
'account_holder_name' => 'account_holder_name-input',
|
435
|
+
'account_number_ending' => 'account_number_ending-input',
|
436
|
+
'bank_name' => 'bank_name-input',
|
437
|
+
'country_code' => 'country_code-input',
|
438
|
+
'created_at' => 'created_at-input',
|
439
|
+
'currency' => 'currency-input',
|
440
|
+
'enabled' => 'enabled-input',
|
441
|
+
'id' => 'id-input',
|
442
|
+
'links' => 'links-input',
|
443
|
+
'metadata' => 'metadata-input'
|
444
|
+
}],
|
445
|
+
meta: {
|
446
|
+
limit: 2,
|
447
|
+
cursors: {}
|
448
|
+
}
|
449
|
+
}.to_json,
|
450
|
+
headers: response_headers
|
451
|
+
)
|
452
|
+
|
453
|
+
client.customer_bank_accounts.all.to_a
|
454
|
+
|
455
|
+
expect(first_response_stub).to have_been_requested
|
456
|
+
expect(second_response_stub).to have_been_requested.twice
|
457
|
+
end
|
458
|
+
end
|
219
459
|
end
|
220
460
|
|
221
461
|
describe '#get' do
|
@@ -244,7 +484,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
244
484
|
'metadata' => 'metadata-input'
|
245
485
|
}
|
246
486
|
}.to_json,
|
247
|
-
headers:
|
487
|
+
headers: response_headers
|
248
488
|
)
|
249
489
|
end
|
250
490
|
|
@@ -279,7 +519,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
279
519
|
'metadata' => 'metadata-input'
|
280
520
|
}
|
281
521
|
}.to_json,
|
282
|
-
headers:
|
522
|
+
headers: response_headers
|
283
523
|
)
|
284
524
|
end
|
285
525
|
|
@@ -293,7 +533,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
293
533
|
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
294
534
|
stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
|
295
535
|
body: '',
|
296
|
-
headers:
|
536
|
+
headers: response_headers
|
297
537
|
)
|
298
538
|
end
|
299
539
|
|
@@ -309,6 +549,33 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
309
549
|
expect { get_response }.to_not raise_error(/bad URI/)
|
310
550
|
end
|
311
551
|
end
|
552
|
+
|
553
|
+
describe 'retry behaviour' do
|
554
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
555
|
+
|
556
|
+
it 'retries timeouts' do
|
557
|
+
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
558
|
+
|
559
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/)
|
560
|
+
.to_timeout.then.to_return(status: 200, headers: response_headers)
|
561
|
+
|
562
|
+
get_response
|
563
|
+
expect(stub).to have_been_requested.twice
|
564
|
+
end
|
565
|
+
|
566
|
+
it 'retries 5XX errors' do
|
567
|
+
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
568
|
+
|
569
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/)
|
570
|
+
.to_return(status: 502,
|
571
|
+
headers: { 'Content-Type' => 'text/html' },
|
572
|
+
body: '<html><body>Response from Cloudflare</body></html>')
|
573
|
+
.then.to_return(status: 200, headers: response_headers)
|
574
|
+
|
575
|
+
get_response
|
576
|
+
expect(stub).to have_been_requested.twice
|
577
|
+
end
|
578
|
+
end
|
312
579
|
end
|
313
580
|
|
314
581
|
describe '#update' do
|
@@ -336,7 +603,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
336
603
|
'metadata' => 'metadata-input'
|
337
604
|
}
|
338
605
|
}.to_json,
|
339
|
-
headers:
|
606
|
+
headers: response_headers
|
340
607
|
)
|
341
608
|
end
|
342
609
|
|
@@ -344,6 +611,31 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
344
611
|
expect(put_update_response).to be_a(GoCardlessPro::Resources::CustomerBankAccount)
|
345
612
|
expect(stub).to have_been_requested
|
346
613
|
end
|
614
|
+
|
615
|
+
describe 'retry behaviour' do
|
616
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
617
|
+
|
618
|
+
it 'retries timeouts' do
|
619
|
+
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
620
|
+
stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/)
|
621
|
+
.to_timeout.then.to_return(status: 200, headers: response_headers)
|
622
|
+
|
623
|
+
put_update_response
|
624
|
+
expect(stub).to have_been_requested.twice
|
625
|
+
end
|
626
|
+
|
627
|
+
it 'retries 5XX errors' do
|
628
|
+
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
629
|
+
stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/)
|
630
|
+
.to_return(status: 502,
|
631
|
+
headers: { 'Content-Type' => 'text/html' },
|
632
|
+
body: '<html><body>Response from Cloudflare</body></html>')
|
633
|
+
.then.to_return(status: 200, headers: response_headers)
|
634
|
+
|
635
|
+
put_update_response
|
636
|
+
expect(stub).to have_been_requested.twice
|
637
|
+
end
|
638
|
+
end
|
347
639
|
end
|
348
640
|
end
|
349
641
|
|
@@ -371,7 +663,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
371
663
|
'metadata' => 'metadata-input'
|
372
664
|
}
|
373
665
|
}.to_json,
|
374
|
-
headers:
|
666
|
+
headers: response_headers
|
375
667
|
)
|
376
668
|
end
|
377
669
|
|
@@ -381,6 +673,17 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
381
673
|
expect(stub).to have_been_requested
|
382
674
|
end
|
383
675
|
|
676
|
+
describe 'retry behaviour' do
|
677
|
+
it "doesn't retry errors" do
|
678
|
+
stub_url = '/customer_bank_accounts/:identity/actions/disable'.gsub(':identity', resource_id)
|
679
|
+
stub = stub_request(:post, /.*api.gocardless.com#{stub_url}/)
|
680
|
+
.to_timeout
|
681
|
+
|
682
|
+
expect { post_response }.to raise_error(Faraday::TimeoutError)
|
683
|
+
expect(stub).to have_been_requested
|
684
|
+
end
|
685
|
+
end
|
686
|
+
|
384
687
|
context 'when the request needs a body and custom header' do
|
385
688
|
let(:body) { { foo: 'bar' } }
|
386
689
|
let(:headers) { { 'Foo' => 'Bar' } }
|
@@ -411,7 +714,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
411
714
|
'metadata' => 'metadata-input'
|
412
715
|
}
|
413
716
|
}.to_json,
|
414
|
-
headers:
|
717
|
+
headers: response_headers
|
415
718
|
)
|
416
719
|
end
|
417
720
|
end
|