gocardless_pro 2.27.0 → 2.28.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +20 -1
  3. data/lib/gocardless_pro.rb +6 -0
  4. data/lib/gocardless_pro/api_service.rb +4 -0
  5. data/lib/gocardless_pro/client.rb +6 -1
  6. data/lib/gocardless_pro/error/authentication_error.rb +4 -0
  7. data/lib/gocardless_pro/error/permission_error.rb +4 -0
  8. data/lib/gocardless_pro/error/rate_limit_error.rb +4 -0
  9. data/lib/gocardless_pro/middlewares/raise_gocardless_errors.rb +12 -1
  10. data/lib/gocardless_pro/resources/bank_authorisation.rb +3 -5
  11. data/lib/gocardless_pro/resources/billing_request.rb +29 -7
  12. data/lib/gocardless_pro/resources/billing_request_flow.rb +10 -0
  13. data/lib/gocardless_pro/resources/billing_request_template.rb +68 -0
  14. data/lib/gocardless_pro/resources/payer_authorisation.rb +9 -0
  15. data/lib/gocardless_pro/services/bank_authorisations_service.rb +0 -2
  16. data/lib/gocardless_pro/services/billing_request_flows_service.rb +23 -0
  17. data/lib/gocardless_pro/services/billing_request_templates_service.rb +131 -0
  18. data/lib/gocardless_pro/services/billing_requests_service.rb +49 -22
  19. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +0 -4
  20. data/lib/gocardless_pro/services/creditors_service.rb +0 -2
  21. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +0 -4
  22. data/lib/gocardless_pro/services/customers_service.rb +0 -2
  23. data/lib/gocardless_pro/services/instalment_schedules_service.rb +0 -6
  24. data/lib/gocardless_pro/services/mandate_imports_service.rb +0 -6
  25. data/lib/gocardless_pro/services/mandates_service.rb +0 -6
  26. data/lib/gocardless_pro/services/payer_authorisations_service.rb +0 -6
  27. data/lib/gocardless_pro/services/payments_service.rb +0 -6
  28. data/lib/gocardless_pro/services/redirect_flows_service.rb +0 -4
  29. data/lib/gocardless_pro/services/refunds_service.rb +0 -2
  30. data/lib/gocardless_pro/services/scenario_simulators_service.rb +28 -6
  31. data/lib/gocardless_pro/services/subscriptions_service.rb +2 -10
  32. data/lib/gocardless_pro/services/webhooks_service.rb +0 -2
  33. data/lib/gocardless_pro/version.rb +1 -1
  34. data/spec/api_service_spec.rb +12 -1
  35. data/spec/middlewares/raise_gocardless_errors_spec.rb +30 -0
  36. data/spec/resources/bank_authorisation_spec.rb +7 -7
  37. data/spec/resources/billing_request_flow_spec.rb +90 -0
  38. data/spec/resources/billing_request_spec.rb +75 -29
  39. data/spec/resources/billing_request_template_spec.rb +502 -0
  40. data/spec/services/bank_authorisations_service_spec.rb +7 -20
  41. data/spec/services/billing_request_flows_service_spec.rb +101 -0
  42. data/spec/services/billing_request_templates_service_spec.rb +789 -0
  43. data/spec/services/billing_requests_service_spec.rb +87 -47
  44. data/spec/services/creditor_bank_accounts_service_spec.rb +0 -13
  45. data/spec/services/creditors_service_spec.rb +0 -13
  46. data/spec/services/customer_bank_accounts_service_spec.rb +0 -13
  47. data/spec/services/customers_service_spec.rb +0 -13
  48. data/spec/services/instalment_schedules_service_spec.rb +0 -26
  49. data/spec/services/mandate_imports_service_spec.rb +0 -13
  50. data/spec/services/mandates_service_spec.rb +0 -13
  51. data/spec/services/payer_authorisations_service_spec.rb +0 -13
  52. data/spec/services/payments_service_spec.rb +0 -13
  53. data/spec/services/redirect_flows_service_spec.rb +0 -13
  54. data/spec/services/refunds_service_spec.rb +0 -13
  55. data/spec/services/subscriptions_service_spec.rb +0 -13
  56. metadata +16 -7
@@ -82,8 +82,6 @@ module GoCardlessPro
82
82
  raise IdempotencyConflict, e.error
83
83
  when :fetch
84
84
  return get(e.conflicting_resource_id)
85
- else
86
- raise ArgumentError, 'Unknown mode for :on_idempotency_conflict'
87
85
  end
88
86
  end
89
87
 
@@ -4,5 +4,5 @@ end
4
4
 
5
5
  module GoCardlessPro
6
6
  # Current version of the GC gem
7
- VERSION = '2.27.0'.freeze
7
+ VERSION = '2.28.0'.freeze
8
8
  end
@@ -1,8 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe GoCardlessPro::ApiService do
4
- subject(:service) { described_class.new('https://api.example.com', 'secret_token') }
4
+ subject(:service) do
5
+ described_class.new('https://api.example.com', 'secret_token', options)
6
+ end
5
7
 
8
+ let(:options) { {} }
6
9
  let(:default_response) do
7
10
  {
8
11
  status: 200,
@@ -174,4 +177,12 @@ describe GoCardlessPro::ApiService do
174
177
  expect(stub).to have_been_requested
175
178
  end
176
179
  end
180
+
181
+ describe 'when passing an invalid :on_idempotency_conflict' do
182
+ let(:options) { { on_idempotency_conflict: :junk } }
183
+
184
+ it 'raises an error' do
185
+ expect { service }.to raise_error(ArgumentError)
186
+ end
187
+ end
177
188
  end
@@ -74,6 +74,36 @@ describe GoCardlessPro::Middlewares::RaiseGoCardlessErrors do
74
74
  end
75
75
  end
76
76
 
77
+ context 'for a Permission error' do
78
+ let(:status) { 403 }
79
+ let(:body) { { error: { type: 'invalid_api_usage' } }.to_json }
80
+
81
+ it 'raises a GoCardlessError' do
82
+ expect { connection.post('https://api.gocardless.com/widgets') }.
83
+ to raise_error(GoCardlessPro::PermissionError)
84
+ end
85
+ end
86
+
87
+ context 'for a RateLimit error' do
88
+ let(:status) { 429 }
89
+ let(:body) { { error: { type: 'invalid_api_usage' } }.to_json }
90
+
91
+ it 'raises a GoCardlessError' do
92
+ expect { connection.post('https://api.gocardless.com/widgets') }.
93
+ to raise_error(GoCardlessPro::RateLimitError)
94
+ end
95
+ end
96
+
97
+ context 'for a Authentication error' do
98
+ let(:status) { 401 }
99
+ let(:body) { { error: { type: 'invalid_api_usage' } }.to_json }
100
+
101
+ it 'raises a GoCardlessError' do
102
+ expect { connection.post('https://api.gocardless.com/widgets') }.
103
+ to raise_error(GoCardlessPro::AuthenticationError)
104
+ end
105
+ end
106
+
77
107
  context 'for an invalid API usage error' do
78
108
  let(:status) { 400 }
79
109
  let(:body) { { error: { type: 'invalid_api_usage' } }.to_json }
@@ -24,13 +24,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
24
24
  'bank_authorisations' => {
25
25
 
26
26
  'authorisation_type' => 'authorisation_type-input',
27
+ 'authorised_at' => 'authorised_at-input',
27
28
  'created_at' => 'created_at-input',
28
29
  'expires_at' => 'expires_at-input',
29
30
  'id' => 'id-input',
30
31
  'last_visited_at' => 'last_visited_at-input',
31
32
  'links' => 'links-input',
32
33
  'redirect_uri' => 'redirect_uri-input',
33
- 'short_url' => 'short_url-input',
34
34
  'url' => 'url-input',
35
35
  },
36
36
  }.to_json,
@@ -58,13 +58,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
58
58
  'bank_authorisations' => {
59
59
 
60
60
  'authorisation_type' => 'authorisation_type-input',
61
+ 'authorised_at' => 'authorised_at-input',
61
62
  'created_at' => 'created_at-input',
62
63
  'expires_at' => 'expires_at-input',
63
64
  'id' => 'id-input',
64
65
  'last_visited_at' => 'last_visited_at-input',
65
66
  'links' => 'links-input',
66
67
  'redirect_uri' => 'redirect_uri-input',
67
- 'short_url' => 'short_url-input',
68
68
  'url' => 'url-input',
69
69
  },
70
70
  }.to_json,
@@ -107,13 +107,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
107
107
  {
108
108
 
109
109
  'authorisation_type' => 'authorisation_type-input',
110
+ 'authorised_at' => 'authorised_at-input',
110
111
  'created_at' => 'created_at-input',
111
112
  'expires_at' => 'expires_at-input',
112
113
  'id' => 'id-input',
113
114
  'last_visited_at' => 'last_visited_at-input',
114
115
  'links' => 'links-input',
115
116
  'redirect_uri' => 'redirect_uri-input',
116
- 'short_url' => 'short_url-input',
117
117
  'url' => 'url-input',
118
118
  }
119
119
  end
@@ -125,13 +125,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
125
125
  'bank_authorisations' => {
126
126
 
127
127
  'authorisation_type' => 'authorisation_type-input',
128
+ 'authorised_at' => 'authorised_at-input',
128
129
  'created_at' => 'created_at-input',
129
130
  'expires_at' => 'expires_at-input',
130
131
  'id' => 'id-input',
131
132
  'last_visited_at' => 'last_visited_at-input',
132
133
  'links' => 'links-input',
133
134
  'redirect_uri' => 'redirect_uri-input',
134
- 'short_url' => 'short_url-input',
135
135
  'url' => 'url-input',
136
136
  },
137
137
  }
@@ -143,13 +143,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
143
143
  {
144
144
 
145
145
  'authorisation_type' => 'authorisation_type-input',
146
+ 'authorised_at' => 'authorised_at-input',
146
147
  'created_at' => 'created_at-input',
147
148
  'expires_at' => 'expires_at-input',
148
149
  'id' => 'id-input',
149
150
  'last_visited_at' => 'last_visited_at-input',
150
151
  'links' => 'links-input',
151
152
  'redirect_uri' => 'redirect_uri-input',
152
- 'short_url' => 'short_url-input',
153
153
  'url' => 'url-input',
154
154
  },
155
155
 
@@ -194,13 +194,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
194
194
  {
195
195
 
196
196
  'authorisation_type' => 'authorisation_type-input',
197
+ 'authorised_at' => 'authorised_at-input',
197
198
  'created_at' => 'created_at-input',
198
199
  'expires_at' => 'expires_at-input',
199
200
  'id' => 'id-input',
200
201
  'last_visited_at' => 'last_visited_at-input',
201
202
  'links' => 'links-input',
202
203
  'redirect_uri' => 'redirect_uri-input',
203
- 'short_url' => 'short_url-input',
204
204
  'url' => 'url-input',
205
205
  }
206
206
  end
@@ -235,13 +235,13 @@ describe GoCardlessPro::Resources::BankAuthorisation do
235
235
  'bank_authorisations' => {
236
236
 
237
237
  'authorisation_type' => 'authorisation_type-input',
238
+ 'authorised_at' => 'authorised_at-input',
238
239
  'created_at' => 'created_at-input',
239
240
  'expires_at' => 'expires_at-input',
240
241
  'id' => 'id-input',
241
242
  'last_visited_at' => 'last_visited_at-input',
242
243
  'links' => 'links-input',
243
244
  'redirect_uri' => 'redirect_uri-input',
244
- 'short_url' => 'short_url-input',
245
245
  'url' => 'url-input',
246
246
  },
247
247
  }.to_json,
@@ -16,10 +16,15 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
16
16
  {
17
17
 
18
18
  'authorisation_url' => 'authorisation_url-input',
19
+ 'auto_fulfil' => 'auto_fulfil-input',
19
20
  'created_at' => 'created_at-input',
20
21
  'expires_at' => 'expires_at-input',
22
+ 'id' => 'id-input',
21
23
  'links' => 'links-input',
24
+ 'lock_bank_account' => 'lock_bank_account-input',
25
+ 'lock_customer_details' => 'lock_customer_details-input',
22
26
  'redirect_uri' => 'redirect_uri-input',
27
+ 'session_token' => 'session_token-input',
23
28
  }
24
29
  end
25
30
 
@@ -30,10 +35,15 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
30
35
  'billing_request_flows' => {
31
36
 
32
37
  'authorisation_url' => 'authorisation_url-input',
38
+ 'auto_fulfil' => 'auto_fulfil-input',
33
39
  'created_at' => 'created_at-input',
34
40
  'expires_at' => 'expires_at-input',
41
+ 'id' => 'id-input',
35
42
  'links' => 'links-input',
43
+ 'lock_bank_account' => 'lock_bank_account-input',
44
+ 'lock_customer_details' => 'lock_customer_details-input',
36
45
  'redirect_uri' => 'redirect_uri-input',
46
+ 'session_token' => 'session_token-input',
37
47
  },
38
48
  }
39
49
  ).
@@ -44,10 +54,15 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
44
54
  {
45
55
 
46
56
  'authorisation_url' => 'authorisation_url-input',
57
+ 'auto_fulfil' => 'auto_fulfil-input',
47
58
  'created_at' => 'created_at-input',
48
59
  'expires_at' => 'expires_at-input',
60
+ 'id' => 'id-input',
49
61
  'links' => 'links-input',
62
+ 'lock_bank_account' => 'lock_bank_account-input',
63
+ 'lock_customer_details' => 'lock_customer_details-input',
50
64
  'redirect_uri' => 'redirect_uri-input',
65
+ 'session_token' => 'session_token-input',
51
66
  },
52
67
 
53
68
  }.to_json,
@@ -91,10 +106,15 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
91
106
  {
92
107
 
93
108
  'authorisation_url' => 'authorisation_url-input',
109
+ 'auto_fulfil' => 'auto_fulfil-input',
94
110
  'created_at' => 'created_at-input',
95
111
  'expires_at' => 'expires_at-input',
112
+ 'id' => 'id-input',
96
113
  'links' => 'links-input',
114
+ 'lock_bank_account' => 'lock_bank_account-input',
115
+ 'lock_customer_details' => 'lock_customer_details-input',
97
116
  'redirect_uri' => 'redirect_uri-input',
117
+ 'session_token' => 'session_token-input',
98
118
  }
99
119
  end
100
120
 
@@ -126,4 +146,74 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
126
146
  end
127
147
  end
128
148
  end
149
+
150
+ describe '#initialise' do
151
+ subject(:post_response) { client.billing_request_flows.initialise(resource_id) }
152
+
153
+ let(:resource_id) { 'ABC123' }
154
+
155
+ let!(:stub) do
156
+ # /billing_request_flows/%v/actions/initialise
157
+ stub_url = '/billing_request_flows/:identity/actions/initialise'.gsub(':identity', resource_id)
158
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
159
+ body: {
160
+ 'billing_request_flows' => {
161
+
162
+ 'authorisation_url' => 'authorisation_url-input',
163
+ 'auto_fulfil' => 'auto_fulfil-input',
164
+ 'created_at' => 'created_at-input',
165
+ 'expires_at' => 'expires_at-input',
166
+ 'id' => 'id-input',
167
+ 'links' => 'links-input',
168
+ 'lock_bank_account' => 'lock_bank_account-input',
169
+ 'lock_customer_details' => 'lock_customer_details-input',
170
+ 'redirect_uri' => 'redirect_uri-input',
171
+ 'session_token' => 'session_token-input',
172
+ },
173
+ }.to_json,
174
+ headers: response_headers
175
+ )
176
+ end
177
+
178
+ it 'wraps the response and calls the right endpoint' do
179
+ expect(post_response).to be_a(GoCardlessPro::Resources::BillingRequestFlow)
180
+
181
+ expect(stub).to have_been_requested
182
+ end
183
+
184
+ context 'when the request needs a body and custom header' do
185
+ let(:body) { { foo: 'bar' } }
186
+ let(:headers) { { 'Foo' => 'Bar' } }
187
+ subject(:post_response) { client.billing_request_flows.initialise(resource_id, body, headers) }
188
+
189
+ let(:resource_id) { 'ABC123' }
190
+
191
+ let!(:stub) do
192
+ # /billing_request_flows/%v/actions/initialise
193
+ stub_url = '/billing_request_flows/:identity/actions/initialise'.gsub(':identity', resource_id)
194
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
195
+ with(
196
+ body: { foo: 'bar' },
197
+ headers: { 'Foo' => 'Bar' }
198
+ ).to_return(
199
+ body: {
200
+ 'billing_request_flows' => {
201
+
202
+ 'authorisation_url' => 'authorisation_url-input',
203
+ 'auto_fulfil' => 'auto_fulfil-input',
204
+ 'created_at' => 'created_at-input',
205
+ 'expires_at' => 'expires_at-input',
206
+ 'id' => 'id-input',
207
+ 'links' => 'links-input',
208
+ 'lock_bank_account' => 'lock_bank_account-input',
209
+ 'lock_customer_details' => 'lock_customer_details-input',
210
+ 'redirect_uri' => 'redirect_uri-input',
211
+ 'session_token' => 'session_token-input',
212
+ },
213
+ }.to_json,
214
+ headers: response_headers
215
+ )
216
+ end
217
+ end
218
+ end
129
219
  end
@@ -19,7 +19,6 @@ describe GoCardlessPro::Resources::BillingRequest do
19
19
  'billing_requests' => [{
20
20
 
21
21
  'actions' => 'actions-input',
22
- 'auto_fulfil' => 'auto_fulfil-input',
23
22
  'created_at' => 'created_at-input',
24
23
  'id' => 'id-input',
25
24
  'links' => 'links-input',
@@ -45,8 +44,6 @@ describe GoCardlessPro::Resources::BillingRequest do
45
44
 
46
45
  expect(get_list_response.records.first.actions).to eq('actions-input')
47
46
 
48
- expect(get_list_response.records.first.auto_fulfil).to eq('auto_fulfil-input')
49
-
50
47
  expect(get_list_response.records.first.created_at).to eq('created_at-input')
51
48
 
52
49
  expect(get_list_response.records.first.id).to eq('id-input')
@@ -78,7 +75,6 @@ describe GoCardlessPro::Resources::BillingRequest do
78
75
  'billing_requests' => [{
79
76
 
80
77
  'actions' => 'actions-input',
81
- 'auto_fulfil' => 'auto_fulfil-input',
82
78
  'created_at' => 'created_at-input',
83
79
  'id' => 'id-input',
84
80
  'links' => 'links-input',
@@ -103,7 +99,6 @@ describe GoCardlessPro::Resources::BillingRequest do
103
99
  'billing_requests' => [{
104
100
 
105
101
  'actions' => 'actions-input',
106
- 'auto_fulfil' => 'auto_fulfil-input',
107
102
  'created_at' => 'created_at-input',
108
103
  'id' => 'id-input',
109
104
  'links' => 'links-input',
@@ -136,7 +131,6 @@ describe GoCardlessPro::Resources::BillingRequest do
136
131
  {
137
132
 
138
133
  'actions' => 'actions-input',
139
- 'auto_fulfil' => 'auto_fulfil-input',
140
134
  'created_at' => 'created_at-input',
141
135
  'id' => 'id-input',
142
136
  'links' => 'links-input',
@@ -155,7 +149,6 @@ describe GoCardlessPro::Resources::BillingRequest do
155
149
  'billing_requests' => {
156
150
 
157
151
  'actions' => 'actions-input',
158
- 'auto_fulfil' => 'auto_fulfil-input',
159
152
  'created_at' => 'created_at-input',
160
153
  'id' => 'id-input',
161
154
  'links' => 'links-input',
@@ -174,7 +167,6 @@ describe GoCardlessPro::Resources::BillingRequest do
174
167
  {
175
168
 
176
169
  'actions' => 'actions-input',
177
- 'auto_fulfil' => 'auto_fulfil-input',
178
170
  'created_at' => 'created_at-input',
179
171
  'id' => 'id-input',
180
172
  'links' => 'links-input',
@@ -226,7 +218,6 @@ describe GoCardlessPro::Resources::BillingRequest do
226
218
  {
227
219
 
228
220
  'actions' => 'actions-input',
229
- 'auto_fulfil' => 'auto_fulfil-input',
230
221
  'created_at' => 'created_at-input',
231
222
  'id' => 'id-input',
232
223
  'links' => 'links-input',
@@ -268,7 +259,6 @@ describe GoCardlessPro::Resources::BillingRequest do
268
259
  'billing_requests' => {
269
260
 
270
261
  'actions' => 'actions-input',
271
- 'auto_fulfil' => 'auto_fulfil-input',
272
262
  'created_at' => 'created_at-input',
273
263
  'id' => 'id-input',
274
264
  'links' => 'links-input',
@@ -306,7 +296,6 @@ describe GoCardlessPro::Resources::BillingRequest do
306
296
  'billing_requests' => {
307
297
 
308
298
  'actions' => 'actions-input',
309
- 'auto_fulfil' => 'auto_fulfil-input',
310
299
  'created_at' => 'created_at-input',
311
300
  'id' => 'id-input',
312
301
  'links' => 'links-input',
@@ -341,7 +330,6 @@ describe GoCardlessPro::Resources::BillingRequest do
341
330
  'billing_requests' => {
342
331
 
343
332
  'actions' => 'actions-input',
344
- 'auto_fulfil' => 'auto_fulfil-input',
345
333
  'created_at' => 'created_at-input',
346
334
  'id' => 'id-input',
347
335
  'links' => 'links-input',
@@ -397,7 +385,6 @@ describe GoCardlessPro::Resources::BillingRequest do
397
385
  'billing_requests' => {
398
386
 
399
387
  'actions' => 'actions-input',
400
- 'auto_fulfil' => 'auto_fulfil-input',
401
388
  'created_at' => 'created_at-input',
402
389
  'id' => 'id-input',
403
390
  'links' => 'links-input',
@@ -437,7 +424,6 @@ describe GoCardlessPro::Resources::BillingRequest do
437
424
  'billing_requests' => {
438
425
 
439
426
  'actions' => 'actions-input',
440
- 'auto_fulfil' => 'auto_fulfil-input',
441
427
  'created_at' => 'created_at-input',
442
428
  'id' => 'id-input',
443
429
  'links' => 'links-input',
@@ -454,20 +440,19 @@ describe GoCardlessPro::Resources::BillingRequest do
454
440
  end
455
441
  end
456
442
 
457
- describe '#collect_bank_account_details' do
458
- subject(:post_response) { client.billing_requests.collect_bank_account_details(resource_id) }
443
+ describe '#collect_bank_account' do
444
+ subject(:post_response) { client.billing_requests.collect_bank_account(resource_id) }
459
445
 
460
446
  let(:resource_id) { 'ABC123' }
461
447
 
462
448
  let!(:stub) do
463
- # /billing_requests/%v/actions/collect_bank_account_details
464
- stub_url = '/billing_requests/:identity/actions/collect_bank_account_details'.gsub(':identity', resource_id)
449
+ # /billing_requests/%v/actions/collect_bank_account
450
+ stub_url = '/billing_requests/:identity/actions/collect_bank_account'.gsub(':identity', resource_id)
465
451
  stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
466
452
  body: {
467
453
  'billing_requests' => {
468
454
 
469
455
  'actions' => 'actions-input',
470
- 'auto_fulfil' => 'auto_fulfil-input',
471
456
  'created_at' => 'created_at-input',
472
457
  'id' => 'id-input',
473
458
  'links' => 'links-input',
@@ -491,13 +476,13 @@ describe GoCardlessPro::Resources::BillingRequest do
491
476
  context 'when the request needs a body and custom header' do
492
477
  let(:body) { { foo: 'bar' } }
493
478
  let(:headers) { { 'Foo' => 'Bar' } }
494
- subject(:post_response) { client.billing_requests.collect_bank_account_details(resource_id, body, headers) }
479
+ subject(:post_response) { client.billing_requests.collect_bank_account(resource_id, body, headers) }
495
480
 
496
481
  let(:resource_id) { 'ABC123' }
497
482
 
498
483
  let!(:stub) do
499
- # /billing_requests/%v/actions/collect_bank_account_details
500
- stub_url = '/billing_requests/:identity/actions/collect_bank_account_details'.gsub(':identity', resource_id)
484
+ # /billing_requests/%v/actions/collect_bank_account
485
+ stub_url = '/billing_requests/:identity/actions/collect_bank_account'.gsub(':identity', resource_id)
501
486
  stub_request(:post, /.*api.gocardless.com#{stub_url}/).
502
487
  with(
503
488
  body: { foo: 'bar' },
@@ -507,7 +492,6 @@ describe GoCardlessPro::Resources::BillingRequest do
507
492
  'billing_requests' => {
508
493
 
509
494
  'actions' => 'actions-input',
510
- 'auto_fulfil' => 'auto_fulfil-input',
511
495
  'created_at' => 'created_at-input',
512
496
  'id' => 'id-input',
513
497
  'links' => 'links-input',
@@ -537,7 +521,6 @@ describe GoCardlessPro::Resources::BillingRequest do
537
521
  'billing_requests' => {
538
522
 
539
523
  'actions' => 'actions-input',
540
- 'auto_fulfil' => 'auto_fulfil-input',
541
524
  'created_at' => 'created_at-input',
542
525
  'id' => 'id-input',
543
526
  'links' => 'links-input',
@@ -577,7 +560,74 @@ describe GoCardlessPro::Resources::BillingRequest do
577
560
  'billing_requests' => {
578
561
 
579
562
  'actions' => 'actions-input',
580
- 'auto_fulfil' => 'auto_fulfil-input',
563
+ 'created_at' => 'created_at-input',
564
+ 'id' => 'id-input',
565
+ 'links' => 'links-input',
566
+ 'mandate_request' => 'mandate_request-input',
567
+ 'metadata' => 'metadata-input',
568
+ 'payment_request' => 'payment_request-input',
569
+ 'resources' => 'resources-input',
570
+ 'status' => 'status-input',
571
+ },
572
+ }.to_json,
573
+ headers: response_headers
574
+ )
575
+ end
576
+ end
577
+ end
578
+
579
+ describe '#confirm_payer_details' do
580
+ subject(:post_response) { client.billing_requests.confirm_payer_details(resource_id) }
581
+
582
+ let(:resource_id) { 'ABC123' }
583
+
584
+ let!(:stub) do
585
+ # /billing_requests/%v/actions/confirm_payer_details
586
+ stub_url = '/billing_requests/:identity/actions/confirm_payer_details'.gsub(':identity', resource_id)
587
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
588
+ body: {
589
+ 'billing_requests' => {
590
+
591
+ 'actions' => 'actions-input',
592
+ 'created_at' => 'created_at-input',
593
+ 'id' => 'id-input',
594
+ 'links' => 'links-input',
595
+ 'mandate_request' => 'mandate_request-input',
596
+ 'metadata' => 'metadata-input',
597
+ 'payment_request' => 'payment_request-input',
598
+ 'resources' => 'resources-input',
599
+ 'status' => 'status-input',
600
+ },
601
+ }.to_json,
602
+ headers: response_headers
603
+ )
604
+ end
605
+
606
+ it 'wraps the response and calls the right endpoint' do
607
+ expect(post_response).to be_a(GoCardlessPro::Resources::BillingRequest)
608
+
609
+ expect(stub).to have_been_requested
610
+ end
611
+
612
+ context 'when the request needs a body and custom header' do
613
+ let(:body) { { foo: 'bar' } }
614
+ let(:headers) { { 'Foo' => 'Bar' } }
615
+ subject(:post_response) { client.billing_requests.confirm_payer_details(resource_id, body, headers) }
616
+
617
+ let(:resource_id) { 'ABC123' }
618
+
619
+ let!(:stub) do
620
+ # /billing_requests/%v/actions/confirm_payer_details
621
+ stub_url = '/billing_requests/:identity/actions/confirm_payer_details'.gsub(':identity', resource_id)
622
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
623
+ with(
624
+ body: { foo: 'bar' },
625
+ headers: { 'Foo' => 'Bar' }
626
+ ).to_return(
627
+ body: {
628
+ 'billing_requests' => {
629
+
630
+ 'actions' => 'actions-input',
581
631
  'created_at' => 'created_at-input',
582
632
  'id' => 'id-input',
583
633
  'links' => 'links-input',
@@ -607,7 +657,6 @@ describe GoCardlessPro::Resources::BillingRequest do
607
657
  'billing_requests' => {
608
658
 
609
659
  'actions' => 'actions-input',
610
- 'auto_fulfil' => 'auto_fulfil-input',
611
660
  'created_at' => 'created_at-input',
612
661
  'id' => 'id-input',
613
662
  'links' => 'links-input',
@@ -647,7 +696,6 @@ describe GoCardlessPro::Resources::BillingRequest do
647
696
  'billing_requests' => {
648
697
 
649
698
  'actions' => 'actions-input',
650
- 'auto_fulfil' => 'auto_fulfil-input',
651
699
  'created_at' => 'created_at-input',
652
700
  'id' => 'id-input',
653
701
  'links' => 'links-input',
@@ -677,7 +725,6 @@ describe GoCardlessPro::Resources::BillingRequest do
677
725
  'billing_requests' => {
678
726
 
679
727
  'actions' => 'actions-input',
680
- 'auto_fulfil' => 'auto_fulfil-input',
681
728
  'created_at' => 'created_at-input',
682
729
  'id' => 'id-input',
683
730
  'links' => 'links-input',
@@ -717,7 +764,6 @@ describe GoCardlessPro::Resources::BillingRequest do
717
764
  'billing_requests' => {
718
765
 
719
766
  'actions' => 'actions-input',
720
- 'auto_fulfil' => 'auto_fulfil-input',
721
767
  'created_at' => 'created_at-input',
722
768
  'id' => 'id-input',
723
769
  'links' => 'links-input',