gocardless_pro 2.24.0 → 2.29.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +23 -4
  3. data/lib/gocardless_pro/api_service.rb +4 -0
  4. data/lib/gocardless_pro/client.rb +46 -1
  5. data/lib/gocardless_pro/error/authentication_error.rb +4 -0
  6. data/lib/gocardless_pro/error/permission_error.rb +4 -0
  7. data/lib/gocardless_pro/error/rate_limit_error.rb +4 -0
  8. data/lib/gocardless_pro/middlewares/raise_gocardless_errors.rb +12 -1
  9. data/lib/gocardless_pro/resources/bank_authorisation.rb +81 -0
  10. data/lib/gocardless_pro/resources/billing_request.rb +108 -0
  11. data/lib/gocardless_pro/resources/billing_request_flow.rb +72 -0
  12. data/lib/gocardless_pro/resources/billing_request_template.rb +68 -0
  13. data/lib/gocardless_pro/resources/block.rb +66 -0
  14. data/lib/gocardless_pro/resources/creditor.rb +2 -3
  15. data/lib/gocardless_pro/resources/event.rb +20 -0
  16. data/lib/gocardless_pro/resources/institution.rb +47 -0
  17. data/lib/gocardless_pro/resources/payer_authorisation.rb +131 -0
  18. data/lib/gocardless_pro/resources/payout_item.rb +4 -0
  19. data/lib/gocardless_pro/resources/redirect_flow.rb +2 -0
  20. data/lib/gocardless_pro/resources/scenario_simulator.rb +42 -0
  21. data/lib/gocardless_pro/resources/webhook.rb +62 -0
  22. data/lib/gocardless_pro/services/bank_authorisations_service.rb +80 -0
  23. data/lib/gocardless_pro/services/billing_request_flows_service.rb +70 -0
  24. data/lib/gocardless_pro/services/billing_request_templates_service.rb +131 -0
  25. data/lib/gocardless_pro/services/billing_requests_service.rb +352 -0
  26. data/lib/gocardless_pro/services/blocks_service.rb +223 -0
  27. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +1 -5
  28. data/lib/gocardless_pro/services/creditors_service.rb +1 -3
  29. data/lib/gocardless_pro/services/currency_exchange_rates_service.rb +1 -1
  30. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +1 -5
  31. data/lib/gocardless_pro/services/customers_service.rb +1 -3
  32. data/lib/gocardless_pro/services/events_service.rb +1 -1
  33. data/lib/gocardless_pro/services/instalment_schedules_service.rb +1 -7
  34. data/lib/gocardless_pro/services/institutions_service.rb +56 -0
  35. data/lib/gocardless_pro/services/mandate_import_entries_service.rb +1 -1
  36. data/lib/gocardless_pro/services/mandate_imports_service.rb +0 -6
  37. data/lib/gocardless_pro/services/mandates_service.rb +1 -7
  38. data/lib/gocardless_pro/services/payer_authorisations_service.rb +202 -0
  39. data/lib/gocardless_pro/services/payments_service.rb +1 -7
  40. data/lib/gocardless_pro/services/payout_items_service.rb +1 -1
  41. data/lib/gocardless_pro/services/payouts_service.rb +1 -1
  42. data/lib/gocardless_pro/services/redirect_flows_service.rb +0 -4
  43. data/lib/gocardless_pro/services/refunds_service.rb +1 -3
  44. data/lib/gocardless_pro/services/scenario_simulators_service.rb +170 -0
  45. data/lib/gocardless_pro/services/subscriptions_service.rb +10 -13
  46. data/lib/gocardless_pro/services/tax_rates_service.rb +1 -1
  47. data/lib/gocardless_pro/services/webhooks_service.rb +111 -0
  48. data/lib/gocardless_pro/version.rb +1 -1
  49. data/lib/gocardless_pro.rb +30 -0
  50. data/spec/api_service_spec.rb +12 -1
  51. data/spec/middlewares/raise_gocardless_errors_spec.rb +30 -0
  52. data/spec/resources/bank_authorisation_spec.rb +259 -0
  53. data/spec/resources/billing_request_flow_spec.rb +219 -0
  54. data/spec/resources/billing_request_spec.rb +782 -0
  55. data/spec/resources/billing_request_template_spec.rb +502 -0
  56. data/spec/resources/block_spec.rb +560 -0
  57. data/spec/resources/institution_spec.rb +108 -0
  58. data/spec/resources/payer_authorisation_spec.rb +418 -0
  59. data/spec/resources/redirect_flow_spec.rb +9 -0
  60. data/spec/resources/scenario_simulator_spec.rb +63 -0
  61. data/spec/resources/webhook_spec.rb +323 -0
  62. data/spec/services/bank_authorisations_service_spec.rb +353 -0
  63. data/spec/services/billing_request_flows_service_spec.rb +253 -0
  64. data/spec/services/billing_request_templates_service_spec.rb +789 -0
  65. data/spec/services/billing_requests_service_spec.rb +1082 -0
  66. data/spec/services/blocks_service_spec.rb +823 -0
  67. data/spec/services/creditor_bank_accounts_service_spec.rb +0 -13
  68. data/spec/services/creditors_service_spec.rb +0 -13
  69. data/spec/services/customer_bank_accounts_service_spec.rb +0 -13
  70. data/spec/services/customers_service_spec.rb +0 -13
  71. data/spec/services/instalment_schedules_service_spec.rb +0 -26
  72. data/spec/services/institutions_service_spec.rb +232 -0
  73. data/spec/services/mandate_imports_service_spec.rb +0 -13
  74. data/spec/services/mandates_service_spec.rb +0 -13
  75. data/spec/services/payer_authorisations_service_spec.rb +559 -0
  76. data/spec/services/payments_service_spec.rb +0 -13
  77. data/spec/services/redirect_flows_service_spec.rb +9 -13
  78. data/spec/services/refunds_service_spec.rb +0 -13
  79. data/spec/services/scenario_simulators_service_spec.rb +74 -0
  80. data/spec/services/subscriptions_service_spec.rb +0 -13
  81. data/spec/services/webhooks_service_spec.rb +545 -0
  82. metadata +64 -7
@@ -0,0 +1,418 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoCardlessPro::Resources::PayerAuthorisation 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 '#get' do
13
+ let(:id) { 'ID123' }
14
+
15
+ subject(:get_response) { client.payer_authorisations.get(id) }
16
+
17
+ context 'passing in a custom header' do
18
+ let!(:stub) do
19
+ stub_url = '/payer_authorisations/:identity'.gsub(':identity', id)
20
+ stub_request(:get, /.*api.gocardless.com#{stub_url}/).
21
+ with(headers: { 'Foo' => 'Bar' }).
22
+ to_return(
23
+ body: {
24
+ 'payer_authorisations' => {
25
+
26
+ 'bank_account' => 'bank_account-input',
27
+ 'created_at' => 'created_at-input',
28
+ 'customer' => 'customer-input',
29
+ 'id' => 'id-input',
30
+ 'incomplete_fields' => 'incomplete_fields-input',
31
+ 'links' => 'links-input',
32
+ 'mandate' => 'mandate-input',
33
+ 'status' => 'status-input',
34
+ },
35
+ }.to_json,
36
+ headers: response_headers
37
+ )
38
+ end
39
+
40
+ subject(:get_response) do
41
+ client.payer_authorisations.get(id, headers: {
42
+ 'Foo' => 'Bar',
43
+ })
44
+ end
45
+
46
+ it 'includes the header' do
47
+ get_response
48
+ expect(stub).to have_been_requested
49
+ end
50
+ end
51
+
52
+ context 'when there is a payer_authorisation to return' do
53
+ before do
54
+ stub_url = '/payer_authorisations/:identity'.gsub(':identity', id)
55
+ stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
56
+ body: {
57
+ 'payer_authorisations' => {
58
+
59
+ 'bank_account' => 'bank_account-input',
60
+ 'created_at' => 'created_at-input',
61
+ 'customer' => 'customer-input',
62
+ 'id' => 'id-input',
63
+ 'incomplete_fields' => 'incomplete_fields-input',
64
+ 'links' => 'links-input',
65
+ 'mandate' => 'mandate-input',
66
+ 'status' => 'status-input',
67
+ },
68
+ }.to_json,
69
+ headers: response_headers
70
+ )
71
+ end
72
+
73
+ it 'wraps the response in a resource' do
74
+ expect(get_response).to be_a(GoCardlessPro::Resources::PayerAuthorisation)
75
+ end
76
+ end
77
+
78
+ context 'when nothing is returned' do
79
+ before do
80
+ stub_url = '/payer_authorisations/:identity'.gsub(':identity', id)
81
+ stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
82
+ body: '',
83
+ headers: response_headers
84
+ )
85
+ end
86
+
87
+ it 'returns nil' do
88
+ expect(get_response).to be_nil
89
+ end
90
+ end
91
+
92
+ context "when an ID is specified which can't be included in a valid URI" do
93
+ let(:id) { '`' }
94
+
95
+ it "doesn't raise an error" do
96
+ expect { get_response }.to_not raise_error(/bad URI/)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#create' do
102
+ subject(:post_create_response) { client.payer_authorisations.create(params: new_resource) }
103
+ context 'with a valid request' do
104
+ let(:new_resource) do
105
+ {
106
+
107
+ 'bank_account' => 'bank_account-input',
108
+ 'created_at' => 'created_at-input',
109
+ 'customer' => 'customer-input',
110
+ 'id' => 'id-input',
111
+ 'incomplete_fields' => 'incomplete_fields-input',
112
+ 'links' => 'links-input',
113
+ 'mandate' => 'mandate-input',
114
+ 'status' => 'status-input',
115
+ }
116
+ end
117
+
118
+ before do
119
+ stub_request(:post, %r{.*api.gocardless.com/payer_authorisations}).
120
+ with(
121
+ body: {
122
+ 'payer_authorisations' => {
123
+
124
+ 'bank_account' => 'bank_account-input',
125
+ 'created_at' => 'created_at-input',
126
+ 'customer' => 'customer-input',
127
+ 'id' => 'id-input',
128
+ 'incomplete_fields' => 'incomplete_fields-input',
129
+ 'links' => 'links-input',
130
+ 'mandate' => 'mandate-input',
131
+ 'status' => 'status-input',
132
+ },
133
+ }
134
+ ).
135
+ to_return(
136
+ body: {
137
+ 'payer_authorisations' =>
138
+
139
+ {
140
+
141
+ 'bank_account' => 'bank_account-input',
142
+ 'created_at' => 'created_at-input',
143
+ 'customer' => 'customer-input',
144
+ 'id' => 'id-input',
145
+ 'incomplete_fields' => 'incomplete_fields-input',
146
+ 'links' => 'links-input',
147
+ 'mandate' => 'mandate-input',
148
+ 'status' => 'status-input',
149
+ },
150
+
151
+ }.to_json,
152
+ headers: response_headers
153
+ )
154
+ end
155
+
156
+ it 'creates and returns the resource' do
157
+ expect(post_create_response).to be_a(GoCardlessPro::Resources::PayerAuthorisation)
158
+ end
159
+ end
160
+
161
+ context 'with a request that returns a validation error' do
162
+ let(:new_resource) { {} }
163
+
164
+ before do
165
+ stub_request(:post, %r{.*api.gocardless.com/payer_authorisations}).to_return(
166
+ body: {
167
+ error: {
168
+ type: 'validation_failed',
169
+ code: 422,
170
+ errors: [
171
+ { message: 'test error message', field: 'test_field' },
172
+ ],
173
+ },
174
+ }.to_json,
175
+ headers: response_headers,
176
+ status: 422
177
+ )
178
+ end
179
+
180
+ it 'throws the correct error' do
181
+ expect { post_create_response }.to raise_error(GoCardlessPro::ValidationError)
182
+ end
183
+ end
184
+
185
+ context 'with a request that returns an idempotent creation conflict error' do
186
+ let(:id) { 'ID123' }
187
+
188
+ let(:new_resource) do
189
+ {
190
+
191
+ 'bank_account' => 'bank_account-input',
192
+ 'created_at' => 'created_at-input',
193
+ 'customer' => 'customer-input',
194
+ 'id' => 'id-input',
195
+ 'incomplete_fields' => 'incomplete_fields-input',
196
+ 'links' => 'links-input',
197
+ 'mandate' => 'mandate-input',
198
+ 'status' => 'status-input',
199
+ }
200
+ end
201
+
202
+ let!(:post_stub) do
203
+ stub_request(:post, %r{.*api.gocardless.com/payer_authorisations}).to_return(
204
+ body: {
205
+ error: {
206
+ type: 'invalid_state',
207
+ code: 409,
208
+ errors: [
209
+ {
210
+ message: 'A resource has already been created with this idempotency key',
211
+ reason: 'idempotent_creation_conflict',
212
+ links: {
213
+ conflicting_resource_id: id,
214
+ },
215
+ },
216
+ ],
217
+ },
218
+ }.to_json,
219
+ headers: response_headers,
220
+ status: 409
221
+ )
222
+ end
223
+
224
+ let!(:get_stub) do
225
+ stub_url = "/payer_authorisations/#{id}"
226
+ stub_request(:get, /.*api.gocardless.com#{stub_url}/).
227
+ to_return(
228
+ body: {
229
+ 'payer_authorisations' => {
230
+
231
+ 'bank_account' => 'bank_account-input',
232
+ 'created_at' => 'created_at-input',
233
+ 'customer' => 'customer-input',
234
+ 'id' => 'id-input',
235
+ 'incomplete_fields' => 'incomplete_fields-input',
236
+ 'links' => 'links-input',
237
+ 'mandate' => 'mandate-input',
238
+ 'status' => 'status-input',
239
+ },
240
+ }.to_json,
241
+ headers: response_headers
242
+ )
243
+ end
244
+
245
+ it 'fetches the already-created resource' do
246
+ post_create_response
247
+ expect(post_stub).to have_been_requested
248
+ expect(get_stub).to have_been_requested
249
+ end
250
+ end
251
+ end
252
+
253
+ describe '#update' do
254
+ subject(:put_update_response) { client.payer_authorisations.update(id, params: update_params) }
255
+ let(:id) { 'ABC123' }
256
+
257
+ context 'with a valid request' do
258
+ let(:update_params) { { 'hello' => 'world' } }
259
+
260
+ let!(:stub) do
261
+ stub_url = '/payer_authorisations/:identity'.gsub(':identity', id)
262
+ stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
263
+ body: {
264
+ 'payer_authorisations' => {
265
+
266
+ 'bank_account' => 'bank_account-input',
267
+ 'created_at' => 'created_at-input',
268
+ 'customer' => 'customer-input',
269
+ 'id' => 'id-input',
270
+ 'incomplete_fields' => 'incomplete_fields-input',
271
+ 'links' => 'links-input',
272
+ 'mandate' => 'mandate-input',
273
+ 'status' => 'status-input',
274
+ },
275
+ }.to_json,
276
+ headers: response_headers
277
+ )
278
+ end
279
+
280
+ it 'updates and returns the resource' do
281
+ expect(put_update_response).to be_a(GoCardlessPro::Resources::PayerAuthorisation)
282
+ expect(stub).to have_been_requested
283
+ end
284
+ end
285
+ end
286
+
287
+ describe '#submit' do
288
+ subject(:post_response) { client.payer_authorisations.submit(resource_id) }
289
+
290
+ let(:resource_id) { 'ABC123' }
291
+
292
+ let!(:stub) do
293
+ # /payer_authorisations/%v/actions/submit
294
+ stub_url = '/payer_authorisations/:identity/actions/submit'.gsub(':identity', resource_id)
295
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
296
+ body: {
297
+ 'payer_authorisations' => {
298
+
299
+ 'bank_account' => 'bank_account-input',
300
+ 'created_at' => 'created_at-input',
301
+ 'customer' => 'customer-input',
302
+ 'id' => 'id-input',
303
+ 'incomplete_fields' => 'incomplete_fields-input',
304
+ 'links' => 'links-input',
305
+ 'mandate' => 'mandate-input',
306
+ 'status' => 'status-input',
307
+ },
308
+ }.to_json,
309
+ headers: response_headers
310
+ )
311
+ end
312
+
313
+ it 'wraps the response and calls the right endpoint' do
314
+ expect(post_response).to be_a(GoCardlessPro::Resources::PayerAuthorisation)
315
+
316
+ expect(stub).to have_been_requested
317
+ end
318
+
319
+ context 'when the request needs a body and custom header' do
320
+ let(:body) { { foo: 'bar' } }
321
+ let(:headers) { { 'Foo' => 'Bar' } }
322
+ subject(:post_response) { client.payer_authorisations.submit(resource_id, body, headers) }
323
+
324
+ let(:resource_id) { 'ABC123' }
325
+
326
+ let!(:stub) do
327
+ # /payer_authorisations/%v/actions/submit
328
+ stub_url = '/payer_authorisations/:identity/actions/submit'.gsub(':identity', resource_id)
329
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
330
+ with(
331
+ body: { foo: 'bar' },
332
+ headers: { 'Foo' => 'Bar' }
333
+ ).to_return(
334
+ body: {
335
+ 'payer_authorisations' => {
336
+
337
+ 'bank_account' => 'bank_account-input',
338
+ 'created_at' => 'created_at-input',
339
+ 'customer' => 'customer-input',
340
+ 'id' => 'id-input',
341
+ 'incomplete_fields' => 'incomplete_fields-input',
342
+ 'links' => 'links-input',
343
+ 'mandate' => 'mandate-input',
344
+ 'status' => 'status-input',
345
+ },
346
+ }.to_json,
347
+ headers: response_headers
348
+ )
349
+ end
350
+ end
351
+ end
352
+
353
+ describe '#confirm' do
354
+ subject(:post_response) { client.payer_authorisations.confirm(resource_id) }
355
+
356
+ let(:resource_id) { 'ABC123' }
357
+
358
+ let!(:stub) do
359
+ # /payer_authorisations/%v/actions/confirm
360
+ stub_url = '/payer_authorisations/:identity/actions/confirm'.gsub(':identity', resource_id)
361
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
362
+ body: {
363
+ 'payer_authorisations' => {
364
+
365
+ 'bank_account' => 'bank_account-input',
366
+ 'created_at' => 'created_at-input',
367
+ 'customer' => 'customer-input',
368
+ 'id' => 'id-input',
369
+ 'incomplete_fields' => 'incomplete_fields-input',
370
+ 'links' => 'links-input',
371
+ 'mandate' => 'mandate-input',
372
+ 'status' => 'status-input',
373
+ },
374
+ }.to_json,
375
+ headers: response_headers
376
+ )
377
+ end
378
+
379
+ it 'wraps the response and calls the right endpoint' do
380
+ expect(post_response).to be_a(GoCardlessPro::Resources::PayerAuthorisation)
381
+
382
+ expect(stub).to have_been_requested
383
+ end
384
+
385
+ context 'when the request needs a body and custom header' do
386
+ let(:body) { { foo: 'bar' } }
387
+ let(:headers) { { 'Foo' => 'Bar' } }
388
+ subject(:post_response) { client.payer_authorisations.confirm(resource_id, body, headers) }
389
+
390
+ let(:resource_id) { 'ABC123' }
391
+
392
+ let!(:stub) do
393
+ # /payer_authorisations/%v/actions/confirm
394
+ stub_url = '/payer_authorisations/:identity/actions/confirm'.gsub(':identity', resource_id)
395
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
396
+ with(
397
+ body: { foo: 'bar' },
398
+ headers: { 'Foo' => 'Bar' }
399
+ ).to_return(
400
+ body: {
401
+ 'payer_authorisations' => {
402
+
403
+ 'bank_account' => 'bank_account-input',
404
+ 'created_at' => 'created_at-input',
405
+ 'customer' => 'customer-input',
406
+ 'id' => 'id-input',
407
+ 'incomplete_fields' => 'incomplete_fields-input',
408
+ 'links' => 'links-input',
409
+ 'mandate' => 'mandate-input',
410
+ 'status' => 'status-input',
411
+ },
412
+ }.to_json,
413
+ headers: response_headers
414
+ )
415
+ end
416
+ end
417
+ end
418
+ end
@@ -20,6 +20,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
20
20
  'description' => 'description-input',
21
21
  'id' => 'id-input',
22
22
  'links' => 'links-input',
23
+ 'mandate_reference' => 'mandate_reference-input',
23
24
  'metadata' => 'metadata-input',
24
25
  'redirect_url' => 'redirect_url-input',
25
26
  'scheme' => 'scheme-input',
@@ -39,6 +40,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
39
40
  'description' => 'description-input',
40
41
  'id' => 'id-input',
41
42
  'links' => 'links-input',
43
+ 'mandate_reference' => 'mandate_reference-input',
42
44
  'metadata' => 'metadata-input',
43
45
  'redirect_url' => 'redirect_url-input',
44
46
  'scheme' => 'scheme-input',
@@ -58,6 +60,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
58
60
  'description' => 'description-input',
59
61
  'id' => 'id-input',
60
62
  'links' => 'links-input',
63
+ 'mandate_reference' => 'mandate_reference-input',
61
64
  'metadata' => 'metadata-input',
62
65
  'redirect_url' => 'redirect_url-input',
63
66
  'scheme' => 'scheme-input',
@@ -110,6 +113,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
110
113
  'description' => 'description-input',
111
114
  'id' => 'id-input',
112
115
  'links' => 'links-input',
116
+ 'mandate_reference' => 'mandate_reference-input',
113
117
  'metadata' => 'metadata-input',
114
118
  'redirect_url' => 'redirect_url-input',
115
119
  'scheme' => 'scheme-input',
@@ -152,6 +156,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
152
156
  'description' => 'description-input',
153
157
  'id' => 'id-input',
154
158
  'links' => 'links-input',
159
+ 'mandate_reference' => 'mandate_reference-input',
155
160
  'metadata' => 'metadata-input',
156
161
  'redirect_url' => 'redirect_url-input',
157
162
  'scheme' => 'scheme-input',
@@ -190,6 +195,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
190
195
  'description' => 'description-input',
191
196
  'id' => 'id-input',
192
197
  'links' => 'links-input',
198
+ 'mandate_reference' => 'mandate_reference-input',
193
199
  'metadata' => 'metadata-input',
194
200
  'redirect_url' => 'redirect_url-input',
195
201
  'scheme' => 'scheme-input',
@@ -225,6 +231,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
225
231
  'description' => 'description-input',
226
232
  'id' => 'id-input',
227
233
  'links' => 'links-input',
234
+ 'mandate_reference' => 'mandate_reference-input',
228
235
  'metadata' => 'metadata-input',
229
236
  'redirect_url' => 'redirect_url-input',
230
237
  'scheme' => 'scheme-input',
@@ -281,6 +288,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
281
288
  'description' => 'description-input',
282
289
  'id' => 'id-input',
283
290
  'links' => 'links-input',
291
+ 'mandate_reference' => 'mandate_reference-input',
284
292
  'metadata' => 'metadata-input',
285
293
  'redirect_url' => 'redirect_url-input',
286
294
  'scheme' => 'scheme-input',
@@ -321,6 +329,7 @@ describe GoCardlessPro::Resources::RedirectFlow do
321
329
  'description' => 'description-input',
322
330
  'id' => 'id-input',
323
331
  'links' => 'links-input',
332
+ 'mandate_reference' => 'mandate_reference-input',
324
333
  'metadata' => 'metadata-input',
325
334
  'redirect_url' => 'redirect_url-input',
326
335
  'scheme' => 'scheme-input',
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoCardlessPro::Resources::ScenarioSimulator 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 '#run' do
13
+ subject(:post_response) { client.scenario_simulators.run(resource_id) }
14
+
15
+ let(:resource_id) { 'ABC123' }
16
+
17
+ let!(:stub) do
18
+ # /scenario_simulators/%v/actions/run
19
+ stub_url = '/scenario_simulators/:identity/actions/run'.gsub(':identity', resource_id)
20
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
21
+ body: {
22
+ 'scenario_simulators' => {
23
+
24
+ 'id' => 'id-input',
25
+ },
26
+ }.to_json,
27
+ headers: response_headers
28
+ )
29
+ end
30
+
31
+ it 'wraps the response and calls the right endpoint' do
32
+ expect(post_response).to be_a(GoCardlessPro::Resources::ScenarioSimulator)
33
+
34
+ expect(stub).to have_been_requested
35
+ end
36
+
37
+ context 'when the request needs a body and custom header' do
38
+ let(:body) { { foo: 'bar' } }
39
+ let(:headers) { { 'Foo' => 'Bar' } }
40
+ subject(:post_response) { client.scenario_simulators.run(resource_id, body, headers) }
41
+
42
+ let(:resource_id) { 'ABC123' }
43
+
44
+ let!(:stub) do
45
+ # /scenario_simulators/%v/actions/run
46
+ stub_url = '/scenario_simulators/:identity/actions/run'.gsub(':identity', resource_id)
47
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
48
+ with(
49
+ body: { foo: 'bar' },
50
+ headers: { 'Foo' => 'Bar' }
51
+ ).to_return(
52
+ body: {
53
+ 'scenario_simulators' => {
54
+
55
+ 'id' => 'id-input',
56
+ },
57
+ }.to_json,
58
+ headers: response_headers
59
+ )
60
+ end
61
+ end
62
+ end
63
+ end