gocardless_pro 2.17.1 → 2.21.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/lib/gocardless_pro.rb +3 -0
- data/lib/gocardless_pro/client.rb +6 -1
- data/lib/gocardless_pro/resources/creditor_bank_account.rb +1 -2
- data/lib/gocardless_pro/resources/currency_exchange_rate.rb +44 -0
- data/lib/gocardless_pro/resources/customer_notification.rb +3 -5
- data/lib/gocardless_pro/resources/event.rb +2 -1
- data/lib/gocardless_pro/resources/mandate_import.rb +5 -8
- data/lib/gocardless_pro/resources/mandate_import_entry.rb +3 -5
- data/lib/gocardless_pro/resources/payout.rb +2 -0
- data/lib/gocardless_pro/resources/redirect_flow.rb +2 -0
- data/lib/gocardless_pro/resources/subscription.rb +38 -29
- data/lib/gocardless_pro/services/currency_exchange_rates_service.rb +67 -0
- data/lib/gocardless_pro/services/customers_service.rb +1 -2
- data/lib/gocardless_pro/services/instalment_schedules_service.rb +81 -5
- data/lib/gocardless_pro/services/mandates_service.rb +1 -1
- data/lib/gocardless_pro/services/payouts_service.rb +21 -0
- data/lib/gocardless_pro/services/subscriptions_service.rb +129 -0
- data/lib/gocardless_pro/version.rb +1 -1
- data/spec/resources/currency_exchange_rate_spec.rb +103 -0
- data/spec/resources/instalment_schedule_spec.rb +193 -1
- data/spec/resources/payout_spec.rb +45 -0
- data/spec/resources/redirect_flow_spec.rb +9 -0
- data/spec/resources/subscription_spec.rb +210 -0
- data/spec/services/currency_exchange_rates_service_spec.rb +223 -0
- data/spec/services/instalment_schedules_service_spec.rb +270 -1
- data/spec/services/payouts_service_spec.rb +74 -0
- data/spec/services/redirect_flows_service_spec.rb +9 -0
- data/spec/services/subscriptions_service_spec.rb +240 -0
- metadata +9 -3
@@ -25,6 +25,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
25
25
|
'fx' => 'fx-input',
|
26
26
|
'id' => 'id-input',
|
27
27
|
'links' => 'links-input',
|
28
|
+
'metadata' => 'metadata-input',
|
28
29
|
'payout_type' => 'payout_type-input',
|
29
30
|
'reference' => 'reference-input',
|
30
31
|
'status' => 'status-input',
|
@@ -62,6 +63,8 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
62
63
|
|
63
64
|
expect(get_list_response.records.first.id).to eq('id-input')
|
64
65
|
|
66
|
+
expect(get_list_response.records.first.metadata).to eq('metadata-input')
|
67
|
+
|
65
68
|
expect(get_list_response.records.first.payout_type).to eq('payout_type-input')
|
66
69
|
|
67
70
|
expect(get_list_response.records.first.reference).to eq('reference-input')
|
@@ -115,6 +118,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
115
118
|
'fx' => 'fx-input',
|
116
119
|
'id' => 'id-input',
|
117
120
|
'links' => 'links-input',
|
121
|
+
'metadata' => 'metadata-input',
|
118
122
|
'payout_type' => 'payout_type-input',
|
119
123
|
'reference' => 'reference-input',
|
120
124
|
'status' => 'status-input',
|
@@ -141,6 +145,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
141
145
|
'fx' => 'fx-input',
|
142
146
|
'id' => 'id-input',
|
143
147
|
'links' => 'links-input',
|
148
|
+
'metadata' => 'metadata-input',
|
144
149
|
'payout_type' => 'payout_type-input',
|
145
150
|
'reference' => 'reference-input',
|
146
151
|
'status' => 'status-input',
|
@@ -176,6 +181,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
176
181
|
'fx' => 'fx-input',
|
177
182
|
'id' => 'id-input',
|
178
183
|
'links' => 'links-input',
|
184
|
+
'metadata' => 'metadata-input',
|
179
185
|
'payout_type' => 'payout_type-input',
|
180
186
|
'reference' => 'reference-input',
|
181
187
|
'status' => 'status-input',
|
@@ -202,6 +208,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
202
208
|
'fx' => 'fx-input',
|
203
209
|
'id' => 'id-input',
|
204
210
|
'links' => 'links-input',
|
211
|
+
'metadata' => 'metadata-input',
|
205
212
|
'payout_type' => 'payout_type-input',
|
206
213
|
'reference' => 'reference-input',
|
207
214
|
'status' => 'status-input',
|
@@ -233,6 +240,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
233
240
|
'fx' => 'fx-input',
|
234
241
|
'id' => 'id-input',
|
235
242
|
'links' => 'links-input',
|
243
|
+
'metadata' => 'metadata-input',
|
236
244
|
'payout_type' => 'payout_type-input',
|
237
245
|
'reference' => 'reference-input',
|
238
246
|
'status' => 'status-input',
|
@@ -262,6 +270,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
262
270
|
'fx' => 'fx-input',
|
263
271
|
'id' => 'id-input',
|
264
272
|
'links' => 'links-input',
|
273
|
+
'metadata' => 'metadata-input',
|
265
274
|
'payout_type' => 'payout_type-input',
|
266
275
|
'reference' => 'reference-input',
|
267
276
|
'status' => 'status-input',
|
@@ -304,6 +313,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
304
313
|
'fx' => 'fx-input',
|
305
314
|
'id' => 'id-input',
|
306
315
|
'links' => 'links-input',
|
316
|
+
'metadata' => 'metadata-input',
|
307
317
|
'payout_type' => 'payout_type-input',
|
308
318
|
'reference' => 'reference-input',
|
309
319
|
'status' => 'status-input',
|
@@ -340,6 +350,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
340
350
|
'fx' => 'fx-input',
|
341
351
|
'id' => 'id-input',
|
342
352
|
'links' => 'links-input',
|
353
|
+
'metadata' => 'metadata-input',
|
343
354
|
'payout_type' => 'payout_type-input',
|
344
355
|
'reference' => 'reference-input',
|
345
356
|
'status' => 'status-input',
|
@@ -431,4 +442,67 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
431
442
|
end
|
432
443
|
end
|
433
444
|
end
|
445
|
+
|
446
|
+
describe '#update' do
|
447
|
+
subject(:put_update_response) { client.payouts.update(id, params: update_params) }
|
448
|
+
let(:id) { 'ABC123' }
|
449
|
+
|
450
|
+
context 'with a valid request' do
|
451
|
+
let(:update_params) { { 'hello' => 'world' } }
|
452
|
+
|
453
|
+
let!(:stub) do
|
454
|
+
stub_url = '/payouts/:identity'.gsub(':identity', id)
|
455
|
+
stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
|
456
|
+
body: {
|
457
|
+
'payouts' => {
|
458
|
+
|
459
|
+
'amount' => 'amount-input',
|
460
|
+
'arrival_date' => 'arrival_date-input',
|
461
|
+
'created_at' => 'created_at-input',
|
462
|
+
'currency' => 'currency-input',
|
463
|
+
'deducted_fees' => 'deducted_fees-input',
|
464
|
+
'fx' => 'fx-input',
|
465
|
+
'id' => 'id-input',
|
466
|
+
'links' => 'links-input',
|
467
|
+
'metadata' => 'metadata-input',
|
468
|
+
'payout_type' => 'payout_type-input',
|
469
|
+
'reference' => 'reference-input',
|
470
|
+
'status' => 'status-input',
|
471
|
+
},
|
472
|
+
}.to_json,
|
473
|
+
headers: response_headers
|
474
|
+
)
|
475
|
+
end
|
476
|
+
|
477
|
+
it 'updates and returns the resource' do
|
478
|
+
expect(put_update_response).to be_a(GoCardlessPro::Resources::Payout)
|
479
|
+
expect(stub).to have_been_requested
|
480
|
+
end
|
481
|
+
|
482
|
+
describe 'retry behaviour' do
|
483
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
484
|
+
|
485
|
+
it 'retries timeouts' do
|
486
|
+
stub_url = '/payouts/:identity'.gsub(':identity', id)
|
487
|
+
stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
|
488
|
+
to_timeout.then.to_return(status: 200, headers: response_headers)
|
489
|
+
|
490
|
+
put_update_response
|
491
|
+
expect(stub).to have_been_requested.twice
|
492
|
+
end
|
493
|
+
|
494
|
+
it 'retries 5XX errors' do
|
495
|
+
stub_url = '/payouts/:identity'.gsub(':identity', id)
|
496
|
+
stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
|
497
|
+
to_return(status: 502,
|
498
|
+
headers: { 'Content-Type' => 'text/html' },
|
499
|
+
body: '<html><body>Response from Cloudflare</body></html>').
|
500
|
+
then.to_return(status: 200, headers: response_headers)
|
501
|
+
|
502
|
+
put_update_response
|
503
|
+
expect(stub).to have_been_requested.twice
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
507
|
+
end
|
434
508
|
end
|
@@ -20,6 +20,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
20
20
|
'description' => 'description-input',
|
21
21
|
'id' => 'id-input',
|
22
22
|
'links' => 'links-input',
|
23
|
+
'metadata' => 'metadata-input',
|
23
24
|
'redirect_url' => 'redirect_url-input',
|
24
25
|
'scheme' => 'scheme-input',
|
25
26
|
'session_token' => 'session_token-input',
|
@@ -38,6 +39,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
38
39
|
'description' => 'description-input',
|
39
40
|
'id' => 'id-input',
|
40
41
|
'links' => 'links-input',
|
42
|
+
'metadata' => 'metadata-input',
|
41
43
|
'redirect_url' => 'redirect_url-input',
|
42
44
|
'scheme' => 'scheme-input',
|
43
45
|
'session_token' => 'session_token-input',
|
@@ -56,6 +58,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
56
58
|
'description' => 'description-input',
|
57
59
|
'id' => 'id-input',
|
58
60
|
'links' => 'links-input',
|
61
|
+
'metadata' => 'metadata-input',
|
59
62
|
'redirect_url' => 'redirect_url-input',
|
60
63
|
'scheme' => 'scheme-input',
|
61
64
|
'session_token' => 'session_token-input',
|
@@ -130,6 +133,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
130
133
|
'description' => 'description-input',
|
131
134
|
'id' => 'id-input',
|
132
135
|
'links' => 'links-input',
|
136
|
+
'metadata' => 'metadata-input',
|
133
137
|
'redirect_url' => 'redirect_url-input',
|
134
138
|
'scheme' => 'scheme-input',
|
135
139
|
'session_token' => 'session_token-input',
|
@@ -171,6 +175,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
171
175
|
'description' => 'description-input',
|
172
176
|
'id' => 'id-input',
|
173
177
|
'links' => 'links-input',
|
178
|
+
'metadata' => 'metadata-input',
|
174
179
|
'redirect_url' => 'redirect_url-input',
|
175
180
|
'scheme' => 'scheme-input',
|
176
181
|
'session_token' => 'session_token-input',
|
@@ -237,6 +242,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
237
242
|
'description' => 'description-input',
|
238
243
|
'id' => 'id-input',
|
239
244
|
'links' => 'links-input',
|
245
|
+
'metadata' => 'metadata-input',
|
240
246
|
'redirect_url' => 'redirect_url-input',
|
241
247
|
'scheme' => 'scheme-input',
|
242
248
|
'session_token' => 'session_token-input',
|
@@ -271,6 +277,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
271
277
|
'description' => 'description-input',
|
272
278
|
'id' => 'id-input',
|
273
279
|
'links' => 'links-input',
|
280
|
+
'metadata' => 'metadata-input',
|
274
281
|
'redirect_url' => 'redirect_url-input',
|
275
282
|
'scheme' => 'scheme-input',
|
276
283
|
'session_token' => 'session_token-input',
|
@@ -381,6 +388,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
381
388
|
'description' => 'description-input',
|
382
389
|
'id' => 'id-input',
|
383
390
|
'links' => 'links-input',
|
391
|
+
'metadata' => 'metadata-input',
|
384
392
|
'redirect_url' => 'redirect_url-input',
|
385
393
|
'scheme' => 'scheme-input',
|
386
394
|
'session_token' => 'session_token-input',
|
@@ -431,6 +439,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
431
439
|
'description' => 'description-input',
|
432
440
|
'id' => 'id-input',
|
433
441
|
'links' => 'links-input',
|
442
|
+
'metadata' => 'metadata-input',
|
434
443
|
'redirect_url' => 'redirect_url-input',
|
435
444
|
'scheme' => 'scheme-input',
|
436
445
|
'session_token' => 'session_token-input',
|
@@ -17,9 +17,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
17
17
|
|
18
18
|
'amount' => 'amount-input',
|
19
19
|
'app_fee' => 'app_fee-input',
|
20
|
+
'count' => 'count-input',
|
20
21
|
'created_at' => 'created_at-input',
|
21
22
|
'currency' => 'currency-input',
|
22
23
|
'day_of_month' => 'day_of_month-input',
|
24
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
23
25
|
'end_date' => 'end_date-input',
|
24
26
|
'id' => 'id-input',
|
25
27
|
'interval' => 'interval-input',
|
@@ -44,9 +46,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
44
46
|
|
45
47
|
'amount' => 'amount-input',
|
46
48
|
'app_fee' => 'app_fee-input',
|
49
|
+
'count' => 'count-input',
|
47
50
|
'created_at' => 'created_at-input',
|
48
51
|
'currency' => 'currency-input',
|
49
52
|
'day_of_month' => 'day_of_month-input',
|
53
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
50
54
|
'end_date' => 'end_date-input',
|
51
55
|
'id' => 'id-input',
|
52
56
|
'interval' => 'interval-input',
|
@@ -71,9 +75,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
71
75
|
|
72
76
|
'amount' => 'amount-input',
|
73
77
|
'app_fee' => 'app_fee-input',
|
78
|
+
'count' => 'count-input',
|
74
79
|
'created_at' => 'created_at-input',
|
75
80
|
'currency' => 'currency-input',
|
76
81
|
'day_of_month' => 'day_of_month-input',
|
82
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
77
83
|
'end_date' => 'end_date-input',
|
78
84
|
'id' => 'id-input',
|
79
85
|
'interval' => 'interval-input',
|
@@ -154,9 +160,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
154
160
|
|
155
161
|
'amount' => 'amount-input',
|
156
162
|
'app_fee' => 'app_fee-input',
|
163
|
+
'count' => 'count-input',
|
157
164
|
'created_at' => 'created_at-input',
|
158
165
|
'currency' => 'currency-input',
|
159
166
|
'day_of_month' => 'day_of_month-input',
|
167
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
160
168
|
'end_date' => 'end_date-input',
|
161
169
|
'id' => 'id-input',
|
162
170
|
'interval' => 'interval-input',
|
@@ -204,9 +212,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
204
212
|
|
205
213
|
'amount' => 'amount-input',
|
206
214
|
'app_fee' => 'app_fee-input',
|
215
|
+
'count' => 'count-input',
|
207
216
|
'created_at' => 'created_at-input',
|
208
217
|
'currency' => 'currency-input',
|
209
218
|
'day_of_month' => 'day_of_month-input',
|
219
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
210
220
|
'end_date' => 'end_date-input',
|
211
221
|
'id' => 'id-input',
|
212
222
|
'interval' => 'interval-input',
|
@@ -273,9 +283,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
273
283
|
|
274
284
|
'amount' => 'amount-input',
|
275
285
|
'app_fee' => 'app_fee-input',
|
286
|
+
'count' => 'count-input',
|
276
287
|
'created_at' => 'created_at-input',
|
277
288
|
'currency' => 'currency-input',
|
278
289
|
'day_of_month' => 'day_of_month-input',
|
290
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
279
291
|
'end_date' => 'end_date-input',
|
280
292
|
'id' => 'id-input',
|
281
293
|
'interval' => 'interval-input',
|
@@ -313,12 +325,16 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
313
325
|
|
314
326
|
expect(get_list_response.records.first.app_fee).to eq('app_fee-input')
|
315
327
|
|
328
|
+
expect(get_list_response.records.first.count).to eq('count-input')
|
329
|
+
|
316
330
|
expect(get_list_response.records.first.created_at).to eq('created_at-input')
|
317
331
|
|
318
332
|
expect(get_list_response.records.first.currency).to eq('currency-input')
|
319
333
|
|
320
334
|
expect(get_list_response.records.first.day_of_month).to eq('day_of_month-input')
|
321
335
|
|
336
|
+
expect(get_list_response.records.first.earliest_charge_date_after_resume).to eq('earliest_charge_date_after_resume-input')
|
337
|
+
|
322
338
|
expect(get_list_response.records.first.end_date).to eq('end_date-input')
|
323
339
|
|
324
340
|
expect(get_list_response.records.first.id).to eq('id-input')
|
@@ -384,9 +400,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
384
400
|
|
385
401
|
'amount' => 'amount-input',
|
386
402
|
'app_fee' => 'app_fee-input',
|
403
|
+
'count' => 'count-input',
|
387
404
|
'created_at' => 'created_at-input',
|
388
405
|
'currency' => 'currency-input',
|
389
406
|
'day_of_month' => 'day_of_month-input',
|
407
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
390
408
|
'end_date' => 'end_date-input',
|
391
409
|
'id' => 'id-input',
|
392
410
|
'interval' => 'interval-input',
|
@@ -417,9 +435,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
417
435
|
|
418
436
|
'amount' => 'amount-input',
|
419
437
|
'app_fee' => 'app_fee-input',
|
438
|
+
'count' => 'count-input',
|
420
439
|
'created_at' => 'created_at-input',
|
421
440
|
'currency' => 'currency-input',
|
422
441
|
'day_of_month' => 'day_of_month-input',
|
442
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
423
443
|
'end_date' => 'end_date-input',
|
424
444
|
'id' => 'id-input',
|
425
445
|
'interval' => 'interval-input',
|
@@ -459,9 +479,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
459
479
|
|
460
480
|
'amount' => 'amount-input',
|
461
481
|
'app_fee' => 'app_fee-input',
|
482
|
+
'count' => 'count-input',
|
462
483
|
'created_at' => 'created_at-input',
|
463
484
|
'currency' => 'currency-input',
|
464
485
|
'day_of_month' => 'day_of_month-input',
|
486
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
465
487
|
'end_date' => 'end_date-input',
|
466
488
|
'id' => 'id-input',
|
467
489
|
'interval' => 'interval-input',
|
@@ -492,9 +514,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
492
514
|
|
493
515
|
'amount' => 'amount-input',
|
494
516
|
'app_fee' => 'app_fee-input',
|
517
|
+
'count' => 'count-input',
|
495
518
|
'created_at' => 'created_at-input',
|
496
519
|
'currency' => 'currency-input',
|
497
520
|
'day_of_month' => 'day_of_month-input',
|
521
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
498
522
|
'end_date' => 'end_date-input',
|
499
523
|
'id' => 'id-input',
|
500
524
|
'interval' => 'interval-input',
|
@@ -530,9 +554,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
530
554
|
|
531
555
|
'amount' => 'amount-input',
|
532
556
|
'app_fee' => 'app_fee-input',
|
557
|
+
'count' => 'count-input',
|
533
558
|
'created_at' => 'created_at-input',
|
534
559
|
'currency' => 'currency-input',
|
535
560
|
'day_of_month' => 'day_of_month-input',
|
561
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
536
562
|
'end_date' => 'end_date-input',
|
537
563
|
'id' => 'id-input',
|
538
564
|
'interval' => 'interval-input',
|
@@ -566,9 +592,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
566
592
|
|
567
593
|
'amount' => 'amount-input',
|
568
594
|
'app_fee' => 'app_fee-input',
|
595
|
+
'count' => 'count-input',
|
569
596
|
'created_at' => 'created_at-input',
|
570
597
|
'currency' => 'currency-input',
|
571
598
|
'day_of_month' => 'day_of_month-input',
|
599
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
572
600
|
'end_date' => 'end_date-input',
|
573
601
|
'id' => 'id-input',
|
574
602
|
'interval' => 'interval-input',
|
@@ -615,9 +643,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
615
643
|
|
616
644
|
'amount' => 'amount-input',
|
617
645
|
'app_fee' => 'app_fee-input',
|
646
|
+
'count' => 'count-input',
|
618
647
|
'created_at' => 'created_at-input',
|
619
648
|
'currency' => 'currency-input',
|
620
649
|
'day_of_month' => 'day_of_month-input',
|
650
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
621
651
|
'end_date' => 'end_date-input',
|
622
652
|
'id' => 'id-input',
|
623
653
|
'interval' => 'interval-input',
|
@@ -658,9 +688,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
658
688
|
|
659
689
|
'amount' => 'amount-input',
|
660
690
|
'app_fee' => 'app_fee-input',
|
691
|
+
'count' => 'count-input',
|
661
692
|
'created_at' => 'created_at-input',
|
662
693
|
'currency' => 'currency-input',
|
663
694
|
'day_of_month' => 'day_of_month-input',
|
695
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
664
696
|
'end_date' => 'end_date-input',
|
665
697
|
'id' => 'id-input',
|
666
698
|
'interval' => 'interval-input',
|
@@ -778,9 +810,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
778
810
|
|
779
811
|
'amount' => 'amount-input',
|
780
812
|
'app_fee' => 'app_fee-input',
|
813
|
+
'count' => 'count-input',
|
781
814
|
'created_at' => 'created_at-input',
|
782
815
|
'currency' => 'currency-input',
|
783
816
|
'day_of_month' => 'day_of_month-input',
|
817
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
784
818
|
'end_date' => 'end_date-input',
|
785
819
|
'id' => 'id-input',
|
786
820
|
'interval' => 'interval-input',
|
@@ -832,6 +866,208 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
832
866
|
end
|
833
867
|
end
|
834
868
|
|
869
|
+
describe '#pause' do
|
870
|
+
subject(:post_response) { client.subscriptions.pause(resource_id) }
|
871
|
+
|
872
|
+
let(:resource_id) { 'ABC123' }
|
873
|
+
|
874
|
+
let!(:stub) do
|
875
|
+
# /subscriptions/%v/actions/pause
|
876
|
+
stub_url = '/subscriptions/:identity/actions/pause'.gsub(':identity', resource_id)
|
877
|
+
stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
|
878
|
+
body: {
|
879
|
+
'subscriptions' => {
|
880
|
+
|
881
|
+
'amount' => 'amount-input',
|
882
|
+
'app_fee' => 'app_fee-input',
|
883
|
+
'count' => 'count-input',
|
884
|
+
'created_at' => 'created_at-input',
|
885
|
+
'currency' => 'currency-input',
|
886
|
+
'day_of_month' => 'day_of_month-input',
|
887
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
888
|
+
'end_date' => 'end_date-input',
|
889
|
+
'id' => 'id-input',
|
890
|
+
'interval' => 'interval-input',
|
891
|
+
'interval_unit' => 'interval_unit-input',
|
892
|
+
'links' => 'links-input',
|
893
|
+
'metadata' => 'metadata-input',
|
894
|
+
'month' => 'month-input',
|
895
|
+
'name' => 'name-input',
|
896
|
+
'payment_reference' => 'payment_reference-input',
|
897
|
+
'retry_if_possible' => 'retry_if_possible-input',
|
898
|
+
'start_date' => 'start_date-input',
|
899
|
+
'status' => 'status-input',
|
900
|
+
'upcoming_payments' => 'upcoming_payments-input',
|
901
|
+
},
|
902
|
+
}.to_json,
|
903
|
+
headers: response_headers
|
904
|
+
)
|
905
|
+
end
|
906
|
+
|
907
|
+
it 'wraps the response and calls the right endpoint' do
|
908
|
+
expect(post_response).to be_a(GoCardlessPro::Resources::Subscription)
|
909
|
+
|
910
|
+
expect(stub).to have_been_requested
|
911
|
+
end
|
912
|
+
|
913
|
+
describe 'retry behaviour' do
|
914
|
+
it "doesn't retry errors" do
|
915
|
+
stub_url = '/subscriptions/:identity/actions/pause'.gsub(':identity', resource_id)
|
916
|
+
stub = stub_request(:post, /.*api.gocardless.com#{stub_url}/).
|
917
|
+
to_timeout
|
918
|
+
|
919
|
+
expect { post_response }.to raise_error(Faraday::TimeoutError)
|
920
|
+
expect(stub).to have_been_requested
|
921
|
+
end
|
922
|
+
end
|
923
|
+
|
924
|
+
context 'when the request needs a body and custom header' do
|
925
|
+
let(:body) { { foo: 'bar' } }
|
926
|
+
let(:headers) { { 'Foo' => 'Bar' } }
|
927
|
+
subject(:post_response) { client.subscriptions.pause(resource_id, body, headers) }
|
928
|
+
|
929
|
+
let(:resource_id) { 'ABC123' }
|
930
|
+
|
931
|
+
let!(:stub) do
|
932
|
+
# /subscriptions/%v/actions/pause
|
933
|
+
stub_url = '/subscriptions/:identity/actions/pause'.gsub(':identity', resource_id)
|
934
|
+
stub_request(:post, /.*api.gocardless.com#{stub_url}/).
|
935
|
+
with(
|
936
|
+
body: { foo: 'bar' },
|
937
|
+
headers: { 'Foo' => 'Bar' }
|
938
|
+
).to_return(
|
939
|
+
body: {
|
940
|
+
'subscriptions' => {
|
941
|
+
|
942
|
+
'amount' => 'amount-input',
|
943
|
+
'app_fee' => 'app_fee-input',
|
944
|
+
'count' => 'count-input',
|
945
|
+
'created_at' => 'created_at-input',
|
946
|
+
'currency' => 'currency-input',
|
947
|
+
'day_of_month' => 'day_of_month-input',
|
948
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
949
|
+
'end_date' => 'end_date-input',
|
950
|
+
'id' => 'id-input',
|
951
|
+
'interval' => 'interval-input',
|
952
|
+
'interval_unit' => 'interval_unit-input',
|
953
|
+
'links' => 'links-input',
|
954
|
+
'metadata' => 'metadata-input',
|
955
|
+
'month' => 'month-input',
|
956
|
+
'name' => 'name-input',
|
957
|
+
'payment_reference' => 'payment_reference-input',
|
958
|
+
'retry_if_possible' => 'retry_if_possible-input',
|
959
|
+
'start_date' => 'start_date-input',
|
960
|
+
'status' => 'status-input',
|
961
|
+
'upcoming_payments' => 'upcoming_payments-input',
|
962
|
+
},
|
963
|
+
}.to_json,
|
964
|
+
headers: response_headers
|
965
|
+
)
|
966
|
+
end
|
967
|
+
end
|
968
|
+
end
|
969
|
+
|
970
|
+
describe '#resume' do
|
971
|
+
subject(:post_response) { client.subscriptions.resume(resource_id) }
|
972
|
+
|
973
|
+
let(:resource_id) { 'ABC123' }
|
974
|
+
|
975
|
+
let!(:stub) do
|
976
|
+
# /subscriptions/%v/actions/resume
|
977
|
+
stub_url = '/subscriptions/:identity/actions/resume'.gsub(':identity', resource_id)
|
978
|
+
stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
|
979
|
+
body: {
|
980
|
+
'subscriptions' => {
|
981
|
+
|
982
|
+
'amount' => 'amount-input',
|
983
|
+
'app_fee' => 'app_fee-input',
|
984
|
+
'count' => 'count-input',
|
985
|
+
'created_at' => 'created_at-input',
|
986
|
+
'currency' => 'currency-input',
|
987
|
+
'day_of_month' => 'day_of_month-input',
|
988
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
989
|
+
'end_date' => 'end_date-input',
|
990
|
+
'id' => 'id-input',
|
991
|
+
'interval' => 'interval-input',
|
992
|
+
'interval_unit' => 'interval_unit-input',
|
993
|
+
'links' => 'links-input',
|
994
|
+
'metadata' => 'metadata-input',
|
995
|
+
'month' => 'month-input',
|
996
|
+
'name' => 'name-input',
|
997
|
+
'payment_reference' => 'payment_reference-input',
|
998
|
+
'retry_if_possible' => 'retry_if_possible-input',
|
999
|
+
'start_date' => 'start_date-input',
|
1000
|
+
'status' => 'status-input',
|
1001
|
+
'upcoming_payments' => 'upcoming_payments-input',
|
1002
|
+
},
|
1003
|
+
}.to_json,
|
1004
|
+
headers: response_headers
|
1005
|
+
)
|
1006
|
+
end
|
1007
|
+
|
1008
|
+
it 'wraps the response and calls the right endpoint' do
|
1009
|
+
expect(post_response).to be_a(GoCardlessPro::Resources::Subscription)
|
1010
|
+
|
1011
|
+
expect(stub).to have_been_requested
|
1012
|
+
end
|
1013
|
+
|
1014
|
+
describe 'retry behaviour' do
|
1015
|
+
it "doesn't retry errors" do
|
1016
|
+
stub_url = '/subscriptions/:identity/actions/resume'.gsub(':identity', resource_id)
|
1017
|
+
stub = stub_request(:post, /.*api.gocardless.com#{stub_url}/).
|
1018
|
+
to_timeout
|
1019
|
+
|
1020
|
+
expect { post_response }.to raise_error(Faraday::TimeoutError)
|
1021
|
+
expect(stub).to have_been_requested
|
1022
|
+
end
|
1023
|
+
end
|
1024
|
+
|
1025
|
+
context 'when the request needs a body and custom header' do
|
1026
|
+
let(:body) { { foo: 'bar' } }
|
1027
|
+
let(:headers) { { 'Foo' => 'Bar' } }
|
1028
|
+
subject(:post_response) { client.subscriptions.resume(resource_id, body, headers) }
|
1029
|
+
|
1030
|
+
let(:resource_id) { 'ABC123' }
|
1031
|
+
|
1032
|
+
let!(:stub) do
|
1033
|
+
# /subscriptions/%v/actions/resume
|
1034
|
+
stub_url = '/subscriptions/:identity/actions/resume'.gsub(':identity', resource_id)
|
1035
|
+
stub_request(:post, /.*api.gocardless.com#{stub_url}/).
|
1036
|
+
with(
|
1037
|
+
body: { foo: 'bar' },
|
1038
|
+
headers: { 'Foo' => 'Bar' }
|
1039
|
+
).to_return(
|
1040
|
+
body: {
|
1041
|
+
'subscriptions' => {
|
1042
|
+
|
1043
|
+
'amount' => 'amount-input',
|
1044
|
+
'app_fee' => 'app_fee-input',
|
1045
|
+
'count' => 'count-input',
|
1046
|
+
'created_at' => 'created_at-input',
|
1047
|
+
'currency' => 'currency-input',
|
1048
|
+
'day_of_month' => 'day_of_month-input',
|
1049
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
1050
|
+
'end_date' => 'end_date-input',
|
1051
|
+
'id' => 'id-input',
|
1052
|
+
'interval' => 'interval-input',
|
1053
|
+
'interval_unit' => 'interval_unit-input',
|
1054
|
+
'links' => 'links-input',
|
1055
|
+
'metadata' => 'metadata-input',
|
1056
|
+
'month' => 'month-input',
|
1057
|
+
'name' => 'name-input',
|
1058
|
+
'payment_reference' => 'payment_reference-input',
|
1059
|
+
'retry_if_possible' => 'retry_if_possible-input',
|
1060
|
+
'start_date' => 'start_date-input',
|
1061
|
+
'status' => 'status-input',
|
1062
|
+
'upcoming_payments' => 'upcoming_payments-input',
|
1063
|
+
},
|
1064
|
+
}.to_json,
|
1065
|
+
headers: response_headers
|
1066
|
+
)
|
1067
|
+
end
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
835
1071
|
describe '#cancel' do
|
836
1072
|
subject(:post_response) { client.subscriptions.cancel(resource_id) }
|
837
1073
|
|
@@ -846,9 +1082,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
846
1082
|
|
847
1083
|
'amount' => 'amount-input',
|
848
1084
|
'app_fee' => 'app_fee-input',
|
1085
|
+
'count' => 'count-input',
|
849
1086
|
'created_at' => 'created_at-input',
|
850
1087
|
'currency' => 'currency-input',
|
851
1088
|
'day_of_month' => 'day_of_month-input',
|
1089
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
852
1090
|
'end_date' => 'end_date-input',
|
853
1091
|
'id' => 'id-input',
|
854
1092
|
'interval' => 'interval-input',
|
@@ -905,9 +1143,11 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
905
1143
|
|
906
1144
|
'amount' => 'amount-input',
|
907
1145
|
'app_fee' => 'app_fee-input',
|
1146
|
+
'count' => 'count-input',
|
908
1147
|
'created_at' => 'created_at-input',
|
909
1148
|
'currency' => 'currency-input',
|
910
1149
|
'day_of_month' => 'day_of_month-input',
|
1150
|
+
'earliest_charge_date_after_resume' => 'earliest_charge_date_after_resume-input',
|
911
1151
|
'end_date' => 'end_date-input',
|
912
1152
|
'id' => 'id-input',
|
913
1153
|
'interval' => 'interval-input',
|