gocardless_pro 2.41.0 → 2.41.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/lib/gocardless_pro/api_service.rb +4 -5
  3. data/lib/gocardless_pro/client.rb +3 -3
  4. data/lib/gocardless_pro/error/invalid_state_error.rb +1 -0
  5. data/lib/gocardless_pro/error.rb +1 -0
  6. data/lib/gocardless_pro/middlewares/raise_gocardless_errors.rb +7 -9
  7. data/lib/gocardless_pro/request.rb +5 -7
  8. data/lib/gocardless_pro/resources/bank_authorisation.rb +0 -2
  9. data/lib/gocardless_pro/resources/bank_details_lookup.rb +0 -2
  10. data/lib/gocardless_pro/resources/billing_request.rb +0 -2
  11. data/lib/gocardless_pro/resources/billing_request_flow.rb +0 -2
  12. data/lib/gocardless_pro/resources/billing_request_template.rb +0 -2
  13. data/lib/gocardless_pro/resources/block.rb +0 -2
  14. data/lib/gocardless_pro/resources/creditor.rb +0 -2
  15. data/lib/gocardless_pro/resources/creditor_bank_account.rb +0 -2
  16. data/lib/gocardless_pro/resources/currency_exchange_rate.rb +0 -2
  17. data/lib/gocardless_pro/resources/customer.rb +0 -2
  18. data/lib/gocardless_pro/resources/customer_bank_account.rb +0 -2
  19. data/lib/gocardless_pro/resources/customer_notification.rb +0 -2
  20. data/lib/gocardless_pro/resources/event.rb +0 -2
  21. data/lib/gocardless_pro/resources/instalment_schedule.rb +0 -2
  22. data/lib/gocardless_pro/resources/institution.rb +0 -2
  23. data/lib/gocardless_pro/resources/mandate.rb +0 -2
  24. data/lib/gocardless_pro/resources/mandate_import.rb +0 -2
  25. data/lib/gocardless_pro/resources/mandate_import_entry.rb +0 -2
  26. data/lib/gocardless_pro/resources/mandate_pdf.rb +0 -2
  27. data/lib/gocardless_pro/resources/payer_authorisation.rb +0 -2
  28. data/lib/gocardless_pro/resources/payment.rb +0 -2
  29. data/lib/gocardless_pro/resources/payout.rb +0 -2
  30. data/lib/gocardless_pro/resources/payout_item.rb +0 -2
  31. data/lib/gocardless_pro/resources/redirect_flow.rb +0 -2
  32. data/lib/gocardless_pro/resources/refund.rb +0 -2
  33. data/lib/gocardless_pro/resources/scenario_simulator.rb +0 -2
  34. data/lib/gocardless_pro/resources/scheme_identifier.rb +0 -2
  35. data/lib/gocardless_pro/resources/subscription.rb +0 -2
  36. data/lib/gocardless_pro/resources/tax_rate.rb +0 -2
  37. data/lib/gocardless_pro/resources/verification_detail.rb +0 -2
  38. data/lib/gocardless_pro/resources/webhook.rb +0 -2
  39. data/lib/gocardless_pro/services/bank_authorisations_service.rb +3 -1
  40. data/lib/gocardless_pro/services/billing_request_flows_service.rb +3 -1
  41. data/lib/gocardless_pro/services/billing_request_templates_service.rb +6 -2
  42. data/lib/gocardless_pro/services/billing_requests_service.rb +27 -9
  43. data/lib/gocardless_pro/services/blocks_service.rb +9 -3
  44. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +6 -2
  45. data/lib/gocardless_pro/services/creditors_service.rb +9 -3
  46. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +9 -3
  47. data/lib/gocardless_pro/services/customer_notifications_service.rb +3 -1
  48. data/lib/gocardless_pro/services/customers_service.rb +9 -3
  49. data/lib/gocardless_pro/services/events_service.rb +3 -1
  50. data/lib/gocardless_pro/services/instalment_schedules_service.rb +9 -3
  51. data/lib/gocardless_pro/services/mandate_imports_service.rb +9 -3
  52. data/lib/gocardless_pro/services/mandates_service.rb +12 -4
  53. data/lib/gocardless_pro/services/payer_authorisations_service.rb +12 -4
  54. data/lib/gocardless_pro/services/payments_service.rb +12 -4
  55. data/lib/gocardless_pro/services/payouts_service.rb +6 -2
  56. data/lib/gocardless_pro/services/redirect_flows_service.rb +6 -2
  57. data/lib/gocardless_pro/services/refunds_service.rb +6 -2
  58. data/lib/gocardless_pro/services/scenario_simulators_service.rb +3 -1
  59. data/lib/gocardless_pro/services/scheme_identifiers_service.rb +3 -1
  60. data/lib/gocardless_pro/services/subscriptions_service.rb +15 -5
  61. data/lib/gocardless_pro/services/tax_rates_service.rb +3 -1
  62. data/lib/gocardless_pro/services/webhooks_service.rb +6 -2
  63. data/lib/gocardless_pro/version.rb +1 -2
  64. data/lib/gocardless_pro/webhook.rb +5 -4
  65. data/lib/gocardless_pro.rb +2 -4
  66. metadata +5 -195
  67. data/.github/workflows/tests.yml +0 -40
  68. data/.gitignore +0 -1
  69. data/.rspec +0 -2
  70. data/.rubocop.yml +0 -5
  71. data/.travis.yml +0 -10
  72. data/LICENSE.txt +0 -22
  73. data/demo.rb +0 -9
  74. data/gocardless_pro.gemspec +0 -39
  75. data/spec/api_response_spec.rb +0 -28
  76. data/spec/api_service_spec.rb +0 -188
  77. data/spec/client_spec.rb +0 -19
  78. data/spec/error_spec.rb +0 -53
  79. data/spec/middlewares/raise_gocardless_errors_spec.rb +0 -127
  80. data/spec/resources/bank_authorisation_spec.rb +0 -259
  81. data/spec/resources/bank_details_lookup_spec.rb +0 -121
  82. data/spec/resources/billing_request_flow_spec.rb +0 -257
  83. data/spec/resources/billing_request_spec.rb +0 -962
  84. data/spec/resources/billing_request_template_spec.rb +0 -515
  85. data/spec/resources/block_spec.rb +0 -577
  86. data/spec/resources/creditor_bank_account_spec.rb +0 -472
  87. data/spec/resources/creditor_spec.rb +0 -659
  88. data/spec/resources/currency_exchange_rate_spec.rb +0 -103
  89. data/spec/resources/customer_bank_account_spec.rb +0 -509
  90. data/spec/resources/customer_notification_spec.rb +0 -75
  91. data/spec/resources/customer_spec.rb +0 -616
  92. data/spec/resources/event_spec.rb +0 -210
  93. data/spec/resources/instalment_schedule_spec.rb +0 -636
  94. data/spec/resources/institution_spec.rb +0 -113
  95. data/spec/resources/mandate_import_entry_spec.rb +0 -206
  96. data/spec/resources/mandate_import_spec.rb +0 -344
  97. data/spec/resources/mandate_pdf_spec.rb +0 -117
  98. data/spec/resources/mandate_spec.rb +0 -600
  99. data/spec/resources/payer_authorisation_spec.rb +0 -422
  100. data/spec/resources/payment_spec.rb +0 -617
  101. data/spec/resources/payout_item_spec.rb +0 -101
  102. data/spec/resources/payout_spec.rb +0 -284
  103. data/spec/resources/redirect_flow_spec.rb +0 -347
  104. data/spec/resources/refund_spec.rb +0 -409
  105. data/spec/resources/scenario_simulator_spec.rb +0 -65
  106. data/spec/resources/scheme_identifier_spec.rb +0 -484
  107. data/spec/resources/subscription_spec.rb +0 -828
  108. data/spec/resources/tax_rate_spec.rb +0 -198
  109. data/spec/resources/verification_detail_spec.rb +0 -145
  110. data/spec/resources/webhook_spec.rb +0 -325
  111. data/spec/response_spec.rb +0 -34
  112. data/spec/services/bank_authorisations_service_spec.rb +0 -353
  113. data/spec/services/bank_details_lookups_service_spec.rb +0 -144
  114. data/spec/services/billing_request_flows_service_spec.rb +0 -291
  115. data/spec/services/billing_request_templates_service_spec.rb +0 -806
  116. data/spec/services/billing_requests_service_spec.rb +0 -1288
  117. data/spec/services/blocks_service_spec.rb +0 -840
  118. data/spec/services/creditor_bank_accounts_service_spec.rb +0 -725
  119. data/spec/services/creditors_service_spec.rb +0 -977
  120. data/spec/services/currency_exchange_rates_service_spec.rb +0 -223
  121. data/spec/services/customer_bank_accounts_service_spec.rb +0 -787
  122. data/spec/services/customer_notifications_service_spec.rb +0 -86
  123. data/spec/services/customers_service_spec.rb +0 -922
  124. data/spec/services/events_service_spec.rb +0 -401
  125. data/spec/services/instalment_schedules_service_spec.rb +0 -945
  126. data/spec/services/institutions_service_spec.rb +0 -241
  127. data/spec/services/mandate_import_entries_service_spec.rb +0 -345
  128. data/spec/services/mandate_imports_service_spec.rb +0 -460
  129. data/spec/services/mandate_pdfs_service_spec.rb +0 -140
  130. data/spec/services/mandates_service_spec.rb +0 -893
  131. data/spec/services/payer_authorisations_service_spec.rb +0 -563
  132. data/spec/services/payments_service_spec.rb +0 -914
  133. data/spec/services/payout_items_service_spec.rb +0 -221
  134. data/spec/services/payouts_service_spec.rb +0 -520
  135. data/spec/services/redirect_flows_service_spec.rb +0 -452
  136. data/spec/services/refunds_service_spec.rb +0 -668
  137. data/spec/services/scenario_simulators_service_spec.rb +0 -76
  138. data/spec/services/scheme_identifiers_service_spec.rb +0 -754
  139. data/spec/services/subscriptions_service_spec.rb +0 -1164
  140. data/spec/services/tax_rates_service_spec.rb +0 -381
  141. data/spec/services/verification_details_service_spec.rb +0 -168
  142. data/spec/services/webhooks_service_spec.rb +0 -547
  143. data/spec/spec_helper.rb +0 -90
  144. data/spec/webhook_spec.rb +0 -122
@@ -1,806 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GoCardlessPro::Services::BillingRequestTemplatesService 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 '#list' do
13
- describe 'with no filters' do
14
- subject(:get_list_response) { client.billing_request_templates.list }
15
-
16
- let(:body) do
17
- {
18
- 'billing_request_templates' => [{
19
-
20
- 'authorisation_url' => 'authorisation_url-input',
21
- 'created_at' => 'created_at-input',
22
- 'id' => 'id-input',
23
- 'mandate_request_currency' => 'mandate_request_currency-input',
24
- 'mandate_request_description' => 'mandate_request_description-input',
25
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
26
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
27
- 'mandate_request_verify' => 'mandate_request_verify-input',
28
- 'metadata' => 'metadata-input',
29
- 'name' => 'name-input',
30
- 'payment_request_amount' => 'payment_request_amount-input',
31
- 'payment_request_currency' => 'payment_request_currency-input',
32
- 'payment_request_description' => 'payment_request_description-input',
33
- 'payment_request_metadata' => 'payment_request_metadata-input',
34
- 'payment_request_scheme' => 'payment_request_scheme-input',
35
- 'redirect_uri' => 'redirect_uri-input',
36
- 'updated_at' => 'updated_at-input',
37
- }],
38
- meta: {
39
- cursors: {
40
- before: nil,
41
- after: 'ABC123',
42
- },
43
- },
44
- }.to_json
45
- end
46
-
47
- before do
48
- stub_request(:get, %r{.*api.gocardless.com/billing_request_templates}).to_return(
49
- body: body,
50
- headers: response_headers
51
- )
52
- end
53
-
54
- it 'wraps each item in the resource class' do
55
- expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::BillingRequestTemplate)
56
-
57
- expect(get_list_response.records.first.authorisation_url).to eq('authorisation_url-input')
58
-
59
- expect(get_list_response.records.first.created_at).to eq('created_at-input')
60
-
61
- expect(get_list_response.records.first.id).to eq('id-input')
62
-
63
- expect(get_list_response.records.first.mandate_request_currency).to eq('mandate_request_currency-input')
64
-
65
- expect(get_list_response.records.first.mandate_request_description).to eq('mandate_request_description-input')
66
-
67
- expect(get_list_response.records.first.mandate_request_metadata).to eq('mandate_request_metadata-input')
68
-
69
- expect(get_list_response.records.first.mandate_request_scheme).to eq('mandate_request_scheme-input')
70
-
71
- expect(get_list_response.records.first.mandate_request_verify).to eq('mandate_request_verify-input')
72
-
73
- expect(get_list_response.records.first.metadata).to eq('metadata-input')
74
-
75
- expect(get_list_response.records.first.name).to eq('name-input')
76
-
77
- expect(get_list_response.records.first.payment_request_amount).to eq('payment_request_amount-input')
78
-
79
- expect(get_list_response.records.first.payment_request_currency).to eq('payment_request_currency-input')
80
-
81
- expect(get_list_response.records.first.payment_request_description).to eq('payment_request_description-input')
82
-
83
- expect(get_list_response.records.first.payment_request_metadata).to eq('payment_request_metadata-input')
84
-
85
- expect(get_list_response.records.first.payment_request_scheme).to eq('payment_request_scheme-input')
86
-
87
- expect(get_list_response.records.first.redirect_uri).to eq('redirect_uri-input')
88
-
89
- expect(get_list_response.records.first.updated_at).to eq('updated_at-input')
90
- end
91
-
92
- it 'exposes the cursors for before and after' do
93
- expect(get_list_response.before).to eq(nil)
94
- expect(get_list_response.after).to eq('ABC123')
95
- end
96
-
97
- specify { expect(get_list_response.api_response.headers).to eql('content-type' => 'application/json') }
98
-
99
- describe 'retry behaviour' do
100
- before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
101
-
102
- it 'retries timeouts' do
103
- stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates}).
104
- to_timeout.then.to_return(status: 200, headers: response_headers, body: body)
105
-
106
- get_list_response
107
- expect(stub).to have_been_requested.twice
108
- end
109
-
110
- it 'retries 5XX errors' do
111
- stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates}).
112
- to_return(status: 502,
113
- headers: { 'Content-Type' => 'text/html' },
114
- body: '<html><body>Response from Cloudflare</body></html>').
115
- then.to_return(status: 200, headers: response_headers, body: body)
116
-
117
- get_list_response
118
- expect(stub).to have_been_requested.twice
119
- end
120
- end
121
- end
122
- end
123
-
124
- describe '#all' do
125
- let!(:first_response_stub) do
126
- stub_request(:get, %r{.*api.gocardless.com/billing_request_templates$}).to_return(
127
- body: {
128
- 'billing_request_templates' => [{
129
-
130
- 'authorisation_url' => 'authorisation_url-input',
131
- 'created_at' => 'created_at-input',
132
- 'id' => 'id-input',
133
- 'mandate_request_currency' => 'mandate_request_currency-input',
134
- 'mandate_request_description' => 'mandate_request_description-input',
135
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
136
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
137
- 'mandate_request_verify' => 'mandate_request_verify-input',
138
- 'metadata' => 'metadata-input',
139
- 'name' => 'name-input',
140
- 'payment_request_amount' => 'payment_request_amount-input',
141
- 'payment_request_currency' => 'payment_request_currency-input',
142
- 'payment_request_description' => 'payment_request_description-input',
143
- 'payment_request_metadata' => 'payment_request_metadata-input',
144
- 'payment_request_scheme' => 'payment_request_scheme-input',
145
- 'redirect_uri' => 'redirect_uri-input',
146
- 'updated_at' => 'updated_at-input',
147
- }],
148
- meta: {
149
- cursors: { after: 'AB345' },
150
- limit: 1,
151
- },
152
- }.to_json,
153
- headers: response_headers
154
- )
155
- end
156
-
157
- let!(:second_response_stub) do
158
- stub_request(:get, %r{.*api.gocardless.com/billing_request_templates\?after=AB345}).to_return(
159
- body: {
160
- 'billing_request_templates' => [{
161
-
162
- 'authorisation_url' => 'authorisation_url-input',
163
- 'created_at' => 'created_at-input',
164
- 'id' => 'id-input',
165
- 'mandate_request_currency' => 'mandate_request_currency-input',
166
- 'mandate_request_description' => 'mandate_request_description-input',
167
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
168
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
169
- 'mandate_request_verify' => 'mandate_request_verify-input',
170
- 'metadata' => 'metadata-input',
171
- 'name' => 'name-input',
172
- 'payment_request_amount' => 'payment_request_amount-input',
173
- 'payment_request_currency' => 'payment_request_currency-input',
174
- 'payment_request_description' => 'payment_request_description-input',
175
- 'payment_request_metadata' => 'payment_request_metadata-input',
176
- 'payment_request_scheme' => 'payment_request_scheme-input',
177
- 'redirect_uri' => 'redirect_uri-input',
178
- 'updated_at' => 'updated_at-input',
179
- }],
180
- meta: {
181
- limit: 2,
182
- cursors: {},
183
- },
184
- }.to_json,
185
- headers: response_headers
186
- )
187
- end
188
-
189
- it 'automatically makes the extra requests' do
190
- expect(client.billing_request_templates.all.to_a.length).to eq(2)
191
- expect(first_response_stub).to have_been_requested
192
- expect(second_response_stub).to have_been_requested
193
- end
194
-
195
- describe 'retry behaviour' do
196
- before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
197
-
198
- it 'retries timeouts' do
199
- first_response_stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates$}).to_return(
200
- body: {
201
- 'billing_request_templates' => [{
202
-
203
- 'authorisation_url' => 'authorisation_url-input',
204
- 'created_at' => 'created_at-input',
205
- 'id' => 'id-input',
206
- 'mandate_request_currency' => 'mandate_request_currency-input',
207
- 'mandate_request_description' => 'mandate_request_description-input',
208
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
209
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
210
- 'mandate_request_verify' => 'mandate_request_verify-input',
211
- 'metadata' => 'metadata-input',
212
- 'name' => 'name-input',
213
- 'payment_request_amount' => 'payment_request_amount-input',
214
- 'payment_request_currency' => 'payment_request_currency-input',
215
- 'payment_request_description' => 'payment_request_description-input',
216
- 'payment_request_metadata' => 'payment_request_metadata-input',
217
- 'payment_request_scheme' => 'payment_request_scheme-input',
218
- 'redirect_uri' => 'redirect_uri-input',
219
- 'updated_at' => 'updated_at-input',
220
- }],
221
- meta: {
222
- cursors: { after: 'AB345' },
223
- limit: 1,
224
- },
225
- }.to_json,
226
- headers: response_headers
227
- )
228
-
229
- second_response_stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates\?after=AB345}).
230
- to_timeout.then.
231
- to_return(
232
- body: {
233
- 'billing_request_templates' => [{
234
-
235
- 'authorisation_url' => 'authorisation_url-input',
236
- 'created_at' => 'created_at-input',
237
- 'id' => 'id-input',
238
- 'mandate_request_currency' => 'mandate_request_currency-input',
239
- 'mandate_request_description' => 'mandate_request_description-input',
240
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
241
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
242
- 'mandate_request_verify' => 'mandate_request_verify-input',
243
- 'metadata' => 'metadata-input',
244
- 'name' => 'name-input',
245
- 'payment_request_amount' => 'payment_request_amount-input',
246
- 'payment_request_currency' => 'payment_request_currency-input',
247
- 'payment_request_description' => 'payment_request_description-input',
248
- 'payment_request_metadata' => 'payment_request_metadata-input',
249
- 'payment_request_scheme' => 'payment_request_scheme-input',
250
- 'redirect_uri' => 'redirect_uri-input',
251
- 'updated_at' => 'updated_at-input',
252
- }],
253
- meta: {
254
- limit: 2,
255
- cursors: {},
256
- },
257
- }.to_json,
258
- headers: response_headers
259
- )
260
-
261
- client.billing_request_templates.all.to_a
262
-
263
- expect(first_response_stub).to have_been_requested
264
- expect(second_response_stub).to have_been_requested.twice
265
- end
266
-
267
- it 'retries 5XX errors' do
268
- first_response_stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates$}).to_return(
269
- body: {
270
- 'billing_request_templates' => [{
271
-
272
- 'authorisation_url' => 'authorisation_url-input',
273
- 'created_at' => 'created_at-input',
274
- 'id' => 'id-input',
275
- 'mandate_request_currency' => 'mandate_request_currency-input',
276
- 'mandate_request_description' => 'mandate_request_description-input',
277
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
278
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
279
- 'mandate_request_verify' => 'mandate_request_verify-input',
280
- 'metadata' => 'metadata-input',
281
- 'name' => 'name-input',
282
- 'payment_request_amount' => 'payment_request_amount-input',
283
- 'payment_request_currency' => 'payment_request_currency-input',
284
- 'payment_request_description' => 'payment_request_description-input',
285
- 'payment_request_metadata' => 'payment_request_metadata-input',
286
- 'payment_request_scheme' => 'payment_request_scheme-input',
287
- 'redirect_uri' => 'redirect_uri-input',
288
- 'updated_at' => 'updated_at-input',
289
- }],
290
- meta: {
291
- cursors: { after: 'AB345' },
292
- limit: 1,
293
- },
294
- }.to_json,
295
- headers: response_headers
296
- )
297
-
298
- second_response_stub = stub_request(:get, %r{.*api.gocardless.com/billing_request_templates\?after=AB345}).
299
- to_return(
300
- status: 502,
301
- body: '<html><body>Response from Cloudflare</body></html>',
302
- headers: { 'Content-Type' => 'text/html' }
303
- ).then.to_return(
304
- body: {
305
- 'billing_request_templates' => [{
306
-
307
- 'authorisation_url' => 'authorisation_url-input',
308
- 'created_at' => 'created_at-input',
309
- 'id' => 'id-input',
310
- 'mandate_request_currency' => 'mandate_request_currency-input',
311
- 'mandate_request_description' => 'mandate_request_description-input',
312
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
313
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
314
- 'mandate_request_verify' => 'mandate_request_verify-input',
315
- 'metadata' => 'metadata-input',
316
- 'name' => 'name-input',
317
- 'payment_request_amount' => 'payment_request_amount-input',
318
- 'payment_request_currency' => 'payment_request_currency-input',
319
- 'payment_request_description' => 'payment_request_description-input',
320
- 'payment_request_metadata' => 'payment_request_metadata-input',
321
- 'payment_request_scheme' => 'payment_request_scheme-input',
322
- 'redirect_uri' => 'redirect_uri-input',
323
- 'updated_at' => 'updated_at-input',
324
- }],
325
- meta: {
326
- limit: 2,
327
- cursors: {},
328
- },
329
- }.to_json,
330
- headers: response_headers
331
- )
332
-
333
- client.billing_request_templates.all.to_a
334
-
335
- expect(first_response_stub).to have_been_requested
336
- expect(second_response_stub).to have_been_requested.twice
337
- end
338
- end
339
- end
340
-
341
- describe '#get' do
342
- let(:id) { 'ID123' }
343
-
344
- subject(:get_response) { client.billing_request_templates.get(id) }
345
-
346
- context 'passing in a custom header' do
347
- let!(:stub) do
348
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
349
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).
350
- with(headers: { 'Foo' => 'Bar' }).
351
- to_return(
352
- body: {
353
- 'billing_request_templates' => {
354
-
355
- 'authorisation_url' => 'authorisation_url-input',
356
- 'created_at' => 'created_at-input',
357
- 'id' => 'id-input',
358
- 'mandate_request_currency' => 'mandate_request_currency-input',
359
- 'mandate_request_description' => 'mandate_request_description-input',
360
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
361
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
362
- 'mandate_request_verify' => 'mandate_request_verify-input',
363
- 'metadata' => 'metadata-input',
364
- 'name' => 'name-input',
365
- 'payment_request_amount' => 'payment_request_amount-input',
366
- 'payment_request_currency' => 'payment_request_currency-input',
367
- 'payment_request_description' => 'payment_request_description-input',
368
- 'payment_request_metadata' => 'payment_request_metadata-input',
369
- 'payment_request_scheme' => 'payment_request_scheme-input',
370
- 'redirect_uri' => 'redirect_uri-input',
371
- 'updated_at' => 'updated_at-input',
372
- },
373
- }.to_json,
374
- headers: response_headers
375
- )
376
- end
377
-
378
- subject(:get_response) do
379
- client.billing_request_templates.get(id, headers: {
380
- 'Foo' => 'Bar',
381
- })
382
- end
383
-
384
- it 'includes the header' do
385
- get_response
386
- expect(stub).to have_been_requested
387
- end
388
- end
389
-
390
- context 'when there is a billing_request_template to return' do
391
- before do
392
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
393
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
394
- body: {
395
- 'billing_request_templates' => {
396
-
397
- 'authorisation_url' => 'authorisation_url-input',
398
- 'created_at' => 'created_at-input',
399
- 'id' => 'id-input',
400
- 'mandate_request_currency' => 'mandate_request_currency-input',
401
- 'mandate_request_description' => 'mandate_request_description-input',
402
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
403
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
404
- 'mandate_request_verify' => 'mandate_request_verify-input',
405
- 'metadata' => 'metadata-input',
406
- 'name' => 'name-input',
407
- 'payment_request_amount' => 'payment_request_amount-input',
408
- 'payment_request_currency' => 'payment_request_currency-input',
409
- 'payment_request_description' => 'payment_request_description-input',
410
- 'payment_request_metadata' => 'payment_request_metadata-input',
411
- 'payment_request_scheme' => 'payment_request_scheme-input',
412
- 'redirect_uri' => 'redirect_uri-input',
413
- 'updated_at' => 'updated_at-input',
414
- },
415
- }.to_json,
416
- headers: response_headers
417
- )
418
- end
419
-
420
- it 'wraps the response in a resource' do
421
- expect(get_response).to be_a(GoCardlessPro::Resources::BillingRequestTemplate)
422
- end
423
- end
424
-
425
- context 'when nothing is returned' do
426
- before do
427
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
428
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
429
- body: '',
430
- headers: response_headers
431
- )
432
- end
433
-
434
- it 'returns nil' do
435
- expect(get_response).to be_nil
436
- end
437
- end
438
-
439
- context "when an ID is specified which can't be included in a valid URI" do
440
- let(:id) { '`' }
441
-
442
- it "doesn't raise an error" do
443
- expect { get_response }.to_not raise_error(/bad URI/)
444
- end
445
- end
446
-
447
- describe 'retry behaviour' do
448
- before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
449
-
450
- it 'retries timeouts' do
451
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
452
-
453
- stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
454
- to_timeout.then.to_return(status: 200, headers: response_headers)
455
-
456
- get_response
457
- expect(stub).to have_been_requested.twice
458
- end
459
-
460
- it 'retries 5XX errors, other than 500s' do
461
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
462
-
463
- stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
464
- to_return(status: 502,
465
- headers: { 'Content-Type' => 'text/html' },
466
- body: '<html><body>Response from Cloudflare</body></html>').
467
- then.to_return(status: 200, headers: response_headers)
468
-
469
- get_response
470
- expect(stub).to have_been_requested.twice
471
- end
472
-
473
- it 'retries 500 errors returned by the API' do
474
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
475
-
476
- gocardless_error = {
477
- 'error' => {
478
- 'message' => 'Internal server error',
479
- 'documentation_url' => 'https://developer.gocardless.com/#gocardless',
480
- 'errors' => [{
481
- 'message' => 'Internal server error',
482
- 'reason' => 'internal_server_error',
483
- }],
484
- 'type' => 'gocardless',
485
- 'code' => 500,
486
- 'request_id' => 'dummy_request_id',
487
- 'id' => 'dummy_exception_id',
488
- },
489
- }
490
-
491
- stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
492
- to_return(status: 500,
493
- headers: response_headers,
494
- body: gocardless_error.to_json).
495
- then.to_return(status: 200, headers: response_headers)
496
-
497
- get_response
498
- expect(stub).to have_been_requested.twice
499
- end
500
- end
501
- end
502
-
503
- describe '#create' do
504
- subject(:post_create_response) { client.billing_request_templates.create(params: new_resource) }
505
- context 'with a valid request' do
506
- let(:new_resource) do
507
- {
508
-
509
- 'authorisation_url' => 'authorisation_url-input',
510
- 'created_at' => 'created_at-input',
511
- 'id' => 'id-input',
512
- 'mandate_request_currency' => 'mandate_request_currency-input',
513
- 'mandate_request_description' => 'mandate_request_description-input',
514
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
515
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
516
- 'mandate_request_verify' => 'mandate_request_verify-input',
517
- 'metadata' => 'metadata-input',
518
- 'name' => 'name-input',
519
- 'payment_request_amount' => 'payment_request_amount-input',
520
- 'payment_request_currency' => 'payment_request_currency-input',
521
- 'payment_request_description' => 'payment_request_description-input',
522
- 'payment_request_metadata' => 'payment_request_metadata-input',
523
- 'payment_request_scheme' => 'payment_request_scheme-input',
524
- 'redirect_uri' => 'redirect_uri-input',
525
- 'updated_at' => 'updated_at-input',
526
- }
527
- end
528
-
529
- before do
530
- stub_request(:post, %r{.*api.gocardless.com/billing_request_templates}).
531
- with(
532
- body: {
533
- 'billing_request_templates' => {
534
-
535
- 'authorisation_url' => 'authorisation_url-input',
536
- 'created_at' => 'created_at-input',
537
- 'id' => 'id-input',
538
- 'mandate_request_currency' => 'mandate_request_currency-input',
539
- 'mandate_request_description' => 'mandate_request_description-input',
540
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
541
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
542
- 'mandate_request_verify' => 'mandate_request_verify-input',
543
- 'metadata' => 'metadata-input',
544
- 'name' => 'name-input',
545
- 'payment_request_amount' => 'payment_request_amount-input',
546
- 'payment_request_currency' => 'payment_request_currency-input',
547
- 'payment_request_description' => 'payment_request_description-input',
548
- 'payment_request_metadata' => 'payment_request_metadata-input',
549
- 'payment_request_scheme' => 'payment_request_scheme-input',
550
- 'redirect_uri' => 'redirect_uri-input',
551
- 'updated_at' => 'updated_at-input',
552
- },
553
- }
554
- ).
555
- to_return(
556
- body: {
557
- 'billing_request_templates' =>
558
-
559
- {
560
-
561
- 'authorisation_url' => 'authorisation_url-input',
562
- 'created_at' => 'created_at-input',
563
- 'id' => 'id-input',
564
- 'mandate_request_currency' => 'mandate_request_currency-input',
565
- 'mandate_request_description' => 'mandate_request_description-input',
566
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
567
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
568
- 'mandate_request_verify' => 'mandate_request_verify-input',
569
- 'metadata' => 'metadata-input',
570
- 'name' => 'name-input',
571
- 'payment_request_amount' => 'payment_request_amount-input',
572
- 'payment_request_currency' => 'payment_request_currency-input',
573
- 'payment_request_description' => 'payment_request_description-input',
574
- 'payment_request_metadata' => 'payment_request_metadata-input',
575
- 'payment_request_scheme' => 'payment_request_scheme-input',
576
- 'redirect_uri' => 'redirect_uri-input',
577
- 'updated_at' => 'updated_at-input',
578
- },
579
-
580
- }.to_json,
581
- headers: response_headers
582
- )
583
- end
584
-
585
- it 'creates and returns the resource' do
586
- expect(post_create_response).to be_a(GoCardlessPro::Resources::BillingRequestTemplate)
587
- end
588
-
589
- describe 'retry behaviour' do
590
- before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
591
-
592
- it 'retries timeouts' do
593
- stub = stub_request(:post, %r{.*api.gocardless.com/billing_request_templates}).
594
- to_timeout.then.to_return(status: 200, headers: response_headers)
595
-
596
- post_create_response
597
- expect(stub).to have_been_requested.twice
598
- end
599
-
600
- it 'retries 5XX errors' do
601
- stub = stub_request(:post, %r{.*api.gocardless.com/billing_request_templates}).
602
- to_return(status: 502,
603
- headers: { 'Content-Type' => 'text/html' },
604
- body: '<html><body>Response from Cloudflare</body></html>').
605
- then.to_return(status: 200, headers: response_headers)
606
-
607
- post_create_response
608
- expect(stub).to have_been_requested.twice
609
- end
610
- end
611
- end
612
-
613
- context 'with a request that returns a validation error' do
614
- let(:new_resource) { {} }
615
-
616
- before do
617
- stub_request(:post, %r{.*api.gocardless.com/billing_request_templates}).to_return(
618
- body: {
619
- error: {
620
- type: 'validation_failed',
621
- code: 422,
622
- errors: [
623
- { message: 'test error message', field: 'test_field' },
624
- ],
625
- },
626
- }.to_json,
627
- headers: response_headers,
628
- status: 422
629
- )
630
- end
631
-
632
- it 'throws the correct error' do
633
- expect { post_create_response }.to raise_error(GoCardlessPro::ValidationError)
634
- end
635
- end
636
-
637
- context 'with a request that returns an idempotent creation conflict error' do
638
- let(:id) { 'ID123' }
639
-
640
- let(:new_resource) do
641
- {
642
-
643
- 'authorisation_url' => 'authorisation_url-input',
644
- 'created_at' => 'created_at-input',
645
- 'id' => 'id-input',
646
- 'mandate_request_currency' => 'mandate_request_currency-input',
647
- 'mandate_request_description' => 'mandate_request_description-input',
648
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
649
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
650
- 'mandate_request_verify' => 'mandate_request_verify-input',
651
- 'metadata' => 'metadata-input',
652
- 'name' => 'name-input',
653
- 'payment_request_amount' => 'payment_request_amount-input',
654
- 'payment_request_currency' => 'payment_request_currency-input',
655
- 'payment_request_description' => 'payment_request_description-input',
656
- 'payment_request_metadata' => 'payment_request_metadata-input',
657
- 'payment_request_scheme' => 'payment_request_scheme-input',
658
- 'redirect_uri' => 'redirect_uri-input',
659
- 'updated_at' => 'updated_at-input',
660
- }
661
- end
662
-
663
- let!(:post_stub) do
664
- stub_request(:post, %r{.*api.gocardless.com/billing_request_templates}).to_return(
665
- body: {
666
- error: {
667
- type: 'invalid_state',
668
- code: 409,
669
- errors: [
670
- {
671
- message: 'A resource has already been created with this idempotency key',
672
- reason: 'idempotent_creation_conflict',
673
- links: {
674
- conflicting_resource_id: id,
675
- },
676
- },
677
- ],
678
- },
679
- }.to_json,
680
- headers: response_headers,
681
- status: 409
682
- )
683
- end
684
-
685
- let!(:get_stub) do
686
- stub_url = "/billing_request_templates/#{id}"
687
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).
688
- to_return(
689
- body: {
690
- 'billing_request_templates' => {
691
-
692
- 'authorisation_url' => 'authorisation_url-input',
693
- 'created_at' => 'created_at-input',
694
- 'id' => 'id-input',
695
- 'mandate_request_currency' => 'mandate_request_currency-input',
696
- 'mandate_request_description' => 'mandate_request_description-input',
697
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
698
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
699
- 'mandate_request_verify' => 'mandate_request_verify-input',
700
- 'metadata' => 'metadata-input',
701
- 'name' => 'name-input',
702
- 'payment_request_amount' => 'payment_request_amount-input',
703
- 'payment_request_currency' => 'payment_request_currency-input',
704
- 'payment_request_description' => 'payment_request_description-input',
705
- 'payment_request_metadata' => 'payment_request_metadata-input',
706
- 'payment_request_scheme' => 'payment_request_scheme-input',
707
- 'redirect_uri' => 'redirect_uri-input',
708
- 'updated_at' => 'updated_at-input',
709
- },
710
- }.to_json,
711
- headers: response_headers
712
- )
713
- end
714
-
715
- context 'with default behaviour' do
716
- it 'fetches the already-created resource' do
717
- post_create_response
718
- expect(post_stub).to have_been_requested
719
- expect(get_stub).to have_been_requested
720
- end
721
- end
722
-
723
- context 'with on_idempotency_conflict: :raise' do
724
- let(:client) do
725
- GoCardlessPro::Client.new(
726
- access_token: 'SECRET_TOKEN',
727
- on_idempotency_conflict: :raise
728
- )
729
- end
730
-
731
- it 'raises an IdempotencyConflict error' do
732
- expect { post_create_response }.
733
- to raise_error(GoCardlessPro::IdempotencyConflict)
734
- end
735
- end
736
- end
737
- end
738
-
739
- describe '#update' do
740
- subject(:put_update_response) { client.billing_request_templates.update(id, params: update_params) }
741
- let(:id) { 'ABC123' }
742
-
743
- context 'with a valid request' do
744
- let(:update_params) { { 'hello' => 'world' } }
745
-
746
- let!(:stub) do
747
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
748
- stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
749
- body: {
750
- 'billing_request_templates' => {
751
-
752
- 'authorisation_url' => 'authorisation_url-input',
753
- 'created_at' => 'created_at-input',
754
- 'id' => 'id-input',
755
- 'mandate_request_currency' => 'mandate_request_currency-input',
756
- 'mandate_request_description' => 'mandate_request_description-input',
757
- 'mandate_request_metadata' => 'mandate_request_metadata-input',
758
- 'mandate_request_scheme' => 'mandate_request_scheme-input',
759
- 'mandate_request_verify' => 'mandate_request_verify-input',
760
- 'metadata' => 'metadata-input',
761
- 'name' => 'name-input',
762
- 'payment_request_amount' => 'payment_request_amount-input',
763
- 'payment_request_currency' => 'payment_request_currency-input',
764
- 'payment_request_description' => 'payment_request_description-input',
765
- 'payment_request_metadata' => 'payment_request_metadata-input',
766
- 'payment_request_scheme' => 'payment_request_scheme-input',
767
- 'redirect_uri' => 'redirect_uri-input',
768
- 'updated_at' => 'updated_at-input',
769
- },
770
- }.to_json,
771
- headers: response_headers
772
- )
773
- end
774
-
775
- it 'updates and returns the resource' do
776
- expect(put_update_response).to be_a(GoCardlessPro::Resources::BillingRequestTemplate)
777
- expect(stub).to have_been_requested
778
- end
779
-
780
- describe 'retry behaviour' do
781
- before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
782
-
783
- it 'retries timeouts' do
784
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
785
- stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
786
- to_timeout.then.to_return(status: 200, headers: response_headers)
787
-
788
- put_update_response
789
- expect(stub).to have_been_requested.twice
790
- end
791
-
792
- it 'retries 5XX errors' do
793
- stub_url = '/billing_request_templates/:identity'.gsub(':identity', id)
794
- stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
795
- to_return(status: 502,
796
- headers: { 'Content-Type' => 'text/html' },
797
- body: '<html><body>Response from Cloudflare</body></html>').
798
- then.to_return(status: 200, headers: response_headers)
799
-
800
- put_update_response
801
- expect(stub).to have_been_requested.twice
802
- end
803
- end
804
- end
805
- end
806
- end