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,616 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GoCardlessPro::Resources::Customer 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 '#create' do
13
- subject(:post_create_response) { client.customers.create(params: new_resource) }
14
- context 'with a valid request' do
15
- let(:new_resource) do
16
- {
17
-
18
- 'address_line1' => 'address_line1-input',
19
- 'address_line2' => 'address_line2-input',
20
- 'address_line3' => 'address_line3-input',
21
- 'city' => 'city-input',
22
- 'company_name' => 'company_name-input',
23
- 'country_code' => 'country_code-input',
24
- 'created_at' => 'created_at-input',
25
- 'danish_identity_number' => 'danish_identity_number-input',
26
- 'email' => 'email-input',
27
- 'family_name' => 'family_name-input',
28
- 'given_name' => 'given_name-input',
29
- 'id' => 'id-input',
30
- 'language' => 'language-input',
31
- 'metadata' => 'metadata-input',
32
- 'phone_number' => 'phone_number-input',
33
- 'postal_code' => 'postal_code-input',
34
- 'region' => 'region-input',
35
- 'swedish_identity_number' => 'swedish_identity_number-input',
36
- }
37
- end
38
-
39
- before do
40
- stub_request(:post, %r{.*api.gocardless.com/customers}).
41
- with(
42
- body: {
43
- 'customers' => {
44
-
45
- 'address_line1' => 'address_line1-input',
46
- 'address_line2' => 'address_line2-input',
47
- 'address_line3' => 'address_line3-input',
48
- 'city' => 'city-input',
49
- 'company_name' => 'company_name-input',
50
- 'country_code' => 'country_code-input',
51
- 'created_at' => 'created_at-input',
52
- 'danish_identity_number' => 'danish_identity_number-input',
53
- 'email' => 'email-input',
54
- 'family_name' => 'family_name-input',
55
- 'given_name' => 'given_name-input',
56
- 'id' => 'id-input',
57
- 'language' => 'language-input',
58
- 'metadata' => 'metadata-input',
59
- 'phone_number' => 'phone_number-input',
60
- 'postal_code' => 'postal_code-input',
61
- 'region' => 'region-input',
62
- 'swedish_identity_number' => 'swedish_identity_number-input',
63
- },
64
- }
65
- ).
66
- to_return(
67
- body: {
68
- 'customers' =>
69
-
70
- {
71
-
72
- 'address_line1' => 'address_line1-input',
73
- 'address_line2' => 'address_line2-input',
74
- 'address_line3' => 'address_line3-input',
75
- 'city' => 'city-input',
76
- 'company_name' => 'company_name-input',
77
- 'country_code' => 'country_code-input',
78
- 'created_at' => 'created_at-input',
79
- 'danish_identity_number' => 'danish_identity_number-input',
80
- 'email' => 'email-input',
81
- 'family_name' => 'family_name-input',
82
- 'given_name' => 'given_name-input',
83
- 'id' => 'id-input',
84
- 'language' => 'language-input',
85
- 'metadata' => 'metadata-input',
86
- 'phone_number' => 'phone_number-input',
87
- 'postal_code' => 'postal_code-input',
88
- 'region' => 'region-input',
89
- 'swedish_identity_number' => 'swedish_identity_number-input',
90
- },
91
-
92
- }.to_json,
93
- headers: response_headers
94
- )
95
- end
96
-
97
- it 'creates and returns the resource' do
98
- expect(post_create_response).to be_a(GoCardlessPro::Resources::Customer)
99
- end
100
- end
101
-
102
- context 'with a request that returns a validation error' do
103
- let(:new_resource) { {} }
104
-
105
- before do
106
- stub_request(:post, %r{.*api.gocardless.com/customers}).to_return(
107
- body: {
108
- error: {
109
- type: 'validation_failed',
110
- code: 422,
111
- errors: [
112
- { message: 'test error message', field: 'test_field' },
113
- ],
114
- },
115
- }.to_json,
116
- headers: response_headers,
117
- status: 422
118
- )
119
- end
120
-
121
- it 'throws the correct error' do
122
- expect { post_create_response }.to raise_error(GoCardlessPro::ValidationError)
123
- end
124
- end
125
-
126
- context 'with a request that returns an idempotent creation conflict error' do
127
- let(:id) { 'ID123' }
128
-
129
- let(:new_resource) do
130
- {
131
-
132
- 'address_line1' => 'address_line1-input',
133
- 'address_line2' => 'address_line2-input',
134
- 'address_line3' => 'address_line3-input',
135
- 'city' => 'city-input',
136
- 'company_name' => 'company_name-input',
137
- 'country_code' => 'country_code-input',
138
- 'created_at' => 'created_at-input',
139
- 'danish_identity_number' => 'danish_identity_number-input',
140
- 'email' => 'email-input',
141
- 'family_name' => 'family_name-input',
142
- 'given_name' => 'given_name-input',
143
- 'id' => 'id-input',
144
- 'language' => 'language-input',
145
- 'metadata' => 'metadata-input',
146
- 'phone_number' => 'phone_number-input',
147
- 'postal_code' => 'postal_code-input',
148
- 'region' => 'region-input',
149
- 'swedish_identity_number' => 'swedish_identity_number-input',
150
- }
151
- end
152
-
153
- let!(:post_stub) do
154
- stub_request(:post, %r{.*api.gocardless.com/customers}).to_return(
155
- body: {
156
- error: {
157
- type: 'invalid_state',
158
- code: 409,
159
- errors: [
160
- {
161
- message: 'A resource has already been created with this idempotency key',
162
- reason: 'idempotent_creation_conflict',
163
- links: {
164
- conflicting_resource_id: id,
165
- },
166
- },
167
- ],
168
- },
169
- }.to_json,
170
- headers: response_headers,
171
- status: 409
172
- )
173
- end
174
-
175
- let!(:get_stub) do
176
- stub_url = "/customers/#{id}"
177
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).
178
- to_return(
179
- body: {
180
- 'customers' => {
181
-
182
- 'address_line1' => 'address_line1-input',
183
- 'address_line2' => 'address_line2-input',
184
- 'address_line3' => 'address_line3-input',
185
- 'city' => 'city-input',
186
- 'company_name' => 'company_name-input',
187
- 'country_code' => 'country_code-input',
188
- 'created_at' => 'created_at-input',
189
- 'danish_identity_number' => 'danish_identity_number-input',
190
- 'email' => 'email-input',
191
- 'family_name' => 'family_name-input',
192
- 'given_name' => 'given_name-input',
193
- 'id' => 'id-input',
194
- 'language' => 'language-input',
195
- 'metadata' => 'metadata-input',
196
- 'phone_number' => 'phone_number-input',
197
- 'postal_code' => 'postal_code-input',
198
- 'region' => 'region-input',
199
- 'swedish_identity_number' => 'swedish_identity_number-input',
200
- },
201
- }.to_json,
202
- headers: response_headers
203
- )
204
- end
205
-
206
- it 'fetches the already-created resource' do
207
- post_create_response
208
- expect(post_stub).to have_been_requested
209
- expect(get_stub).to have_been_requested
210
- end
211
- end
212
- end
213
-
214
- describe '#list' do
215
- describe 'with no filters' do
216
- subject(:get_list_response) { client.customers.list }
217
-
218
- before do
219
- stub_request(:get, %r{.*api.gocardless.com/customers}).to_return(
220
- body: {
221
- 'customers' => [{
222
-
223
- 'address_line1' => 'address_line1-input',
224
- 'address_line2' => 'address_line2-input',
225
- 'address_line3' => 'address_line3-input',
226
- 'city' => 'city-input',
227
- 'company_name' => 'company_name-input',
228
- 'country_code' => 'country_code-input',
229
- 'created_at' => 'created_at-input',
230
- 'danish_identity_number' => 'danish_identity_number-input',
231
- 'email' => 'email-input',
232
- 'family_name' => 'family_name-input',
233
- 'given_name' => 'given_name-input',
234
- 'id' => 'id-input',
235
- 'language' => 'language-input',
236
- 'metadata' => 'metadata-input',
237
- 'phone_number' => 'phone_number-input',
238
- 'postal_code' => 'postal_code-input',
239
- 'region' => 'region-input',
240
- 'swedish_identity_number' => 'swedish_identity_number-input',
241
- }],
242
- meta: {
243
- cursors: {
244
- before: nil,
245
- after: 'ABC123',
246
- },
247
- },
248
- }.to_json,
249
- headers: response_headers
250
- )
251
- end
252
-
253
- it 'wraps each item in the resource class' do
254
- expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::Customer)
255
-
256
- expect(get_list_response.records.first.address_line1).to eq('address_line1-input')
257
-
258
- expect(get_list_response.records.first.address_line2).to eq('address_line2-input')
259
-
260
- expect(get_list_response.records.first.address_line3).to eq('address_line3-input')
261
-
262
- expect(get_list_response.records.first.city).to eq('city-input')
263
-
264
- expect(get_list_response.records.first.company_name).to eq('company_name-input')
265
-
266
- expect(get_list_response.records.first.country_code).to eq('country_code-input')
267
-
268
- expect(get_list_response.records.first.created_at).to eq('created_at-input')
269
-
270
- expect(get_list_response.records.first.danish_identity_number).to eq('danish_identity_number-input')
271
-
272
- expect(get_list_response.records.first.email).to eq('email-input')
273
-
274
- expect(get_list_response.records.first.family_name).to eq('family_name-input')
275
-
276
- expect(get_list_response.records.first.given_name).to eq('given_name-input')
277
-
278
- expect(get_list_response.records.first.id).to eq('id-input')
279
-
280
- expect(get_list_response.records.first.language).to eq('language-input')
281
-
282
- expect(get_list_response.records.first.metadata).to eq('metadata-input')
283
-
284
- expect(get_list_response.records.first.phone_number).to eq('phone_number-input')
285
-
286
- expect(get_list_response.records.first.postal_code).to eq('postal_code-input')
287
-
288
- expect(get_list_response.records.first.region).to eq('region-input')
289
-
290
- expect(get_list_response.records.first.swedish_identity_number).to eq('swedish_identity_number-input')
291
- end
292
-
293
- it 'exposes the cursors for before and after' do
294
- expect(get_list_response.before).to eq(nil)
295
- expect(get_list_response.after).to eq('ABC123')
296
- end
297
-
298
- specify { expect(get_list_response.api_response.headers).to eql('content-type' => 'application/json') }
299
- end
300
- end
301
-
302
- describe '#all' do
303
- let!(:first_response_stub) do
304
- stub_request(:get, %r{.*api.gocardless.com/customers$}).to_return(
305
- body: {
306
- 'customers' => [{
307
-
308
- 'address_line1' => 'address_line1-input',
309
- 'address_line2' => 'address_line2-input',
310
- 'address_line3' => 'address_line3-input',
311
- 'city' => 'city-input',
312
- 'company_name' => 'company_name-input',
313
- 'country_code' => 'country_code-input',
314
- 'created_at' => 'created_at-input',
315
- 'danish_identity_number' => 'danish_identity_number-input',
316
- 'email' => 'email-input',
317
- 'family_name' => 'family_name-input',
318
- 'given_name' => 'given_name-input',
319
- 'id' => 'id-input',
320
- 'language' => 'language-input',
321
- 'metadata' => 'metadata-input',
322
- 'phone_number' => 'phone_number-input',
323
- 'postal_code' => 'postal_code-input',
324
- 'region' => 'region-input',
325
- 'swedish_identity_number' => 'swedish_identity_number-input',
326
- }],
327
- meta: {
328
- cursors: { after: 'AB345' },
329
- limit: 1,
330
- },
331
- }.to_json,
332
- headers: response_headers
333
- )
334
- end
335
-
336
- let!(:second_response_stub) do
337
- stub_request(:get, %r{.*api.gocardless.com/customers\?after=AB345}).to_return(
338
- body: {
339
- 'customers' => [{
340
-
341
- 'address_line1' => 'address_line1-input',
342
- 'address_line2' => 'address_line2-input',
343
- 'address_line3' => 'address_line3-input',
344
- 'city' => 'city-input',
345
- 'company_name' => 'company_name-input',
346
- 'country_code' => 'country_code-input',
347
- 'created_at' => 'created_at-input',
348
- 'danish_identity_number' => 'danish_identity_number-input',
349
- 'email' => 'email-input',
350
- 'family_name' => 'family_name-input',
351
- 'given_name' => 'given_name-input',
352
- 'id' => 'id-input',
353
- 'language' => 'language-input',
354
- 'metadata' => 'metadata-input',
355
- 'phone_number' => 'phone_number-input',
356
- 'postal_code' => 'postal_code-input',
357
- 'region' => 'region-input',
358
- 'swedish_identity_number' => 'swedish_identity_number-input',
359
- }],
360
- meta: {
361
- limit: 2,
362
- cursors: {},
363
- },
364
- }.to_json,
365
- headers: response_headers
366
- )
367
- end
368
-
369
- it 'automatically makes the extra requests' do
370
- expect(client.customers.all.to_a.length).to eq(2)
371
- expect(first_response_stub).to have_been_requested
372
- expect(second_response_stub).to have_been_requested
373
- end
374
- end
375
-
376
- describe '#get' do
377
- let(:id) { 'ID123' }
378
-
379
- subject(:get_response) { client.customers.get(id) }
380
-
381
- context 'passing in a custom header' do
382
- let!(:stub) do
383
- stub_url = '/customers/:identity'.gsub(':identity', id)
384
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).
385
- with(headers: { 'Foo' => 'Bar' }).
386
- to_return(
387
- body: {
388
- 'customers' => {
389
-
390
- 'address_line1' => 'address_line1-input',
391
- 'address_line2' => 'address_line2-input',
392
- 'address_line3' => 'address_line3-input',
393
- 'city' => 'city-input',
394
- 'company_name' => 'company_name-input',
395
- 'country_code' => 'country_code-input',
396
- 'created_at' => 'created_at-input',
397
- 'danish_identity_number' => 'danish_identity_number-input',
398
- 'email' => 'email-input',
399
- 'family_name' => 'family_name-input',
400
- 'given_name' => 'given_name-input',
401
- 'id' => 'id-input',
402
- 'language' => 'language-input',
403
- 'metadata' => 'metadata-input',
404
- 'phone_number' => 'phone_number-input',
405
- 'postal_code' => 'postal_code-input',
406
- 'region' => 'region-input',
407
- 'swedish_identity_number' => 'swedish_identity_number-input',
408
- },
409
- }.to_json,
410
- headers: response_headers
411
- )
412
- end
413
-
414
- subject(:get_response) do
415
- client.customers.get(id, headers: {
416
- 'Foo' => 'Bar',
417
- })
418
- end
419
-
420
- it 'includes the header' do
421
- get_response
422
- expect(stub).to have_been_requested
423
- end
424
- end
425
-
426
- context 'when there is a customer to return' do
427
- before do
428
- stub_url = '/customers/:identity'.gsub(':identity', id)
429
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
430
- body: {
431
- 'customers' => {
432
-
433
- 'address_line1' => 'address_line1-input',
434
- 'address_line2' => 'address_line2-input',
435
- 'address_line3' => 'address_line3-input',
436
- 'city' => 'city-input',
437
- 'company_name' => 'company_name-input',
438
- 'country_code' => 'country_code-input',
439
- 'created_at' => 'created_at-input',
440
- 'danish_identity_number' => 'danish_identity_number-input',
441
- 'email' => 'email-input',
442
- 'family_name' => 'family_name-input',
443
- 'given_name' => 'given_name-input',
444
- 'id' => 'id-input',
445
- 'language' => 'language-input',
446
- 'metadata' => 'metadata-input',
447
- 'phone_number' => 'phone_number-input',
448
- 'postal_code' => 'postal_code-input',
449
- 'region' => 'region-input',
450
- 'swedish_identity_number' => 'swedish_identity_number-input',
451
- },
452
- }.to_json,
453
- headers: response_headers
454
- )
455
- end
456
-
457
- it 'wraps the response in a resource' do
458
- expect(get_response).to be_a(GoCardlessPro::Resources::Customer)
459
- end
460
- end
461
-
462
- context 'when nothing is returned' do
463
- before do
464
- stub_url = '/customers/:identity'.gsub(':identity', id)
465
- stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
466
- body: '',
467
- headers: response_headers
468
- )
469
- end
470
-
471
- it 'returns nil' do
472
- expect(get_response).to be_nil
473
- end
474
- end
475
-
476
- context "when an ID is specified which can't be included in a valid URI" do
477
- let(:id) { '`' }
478
-
479
- it "doesn't raise an error" do
480
- expect { get_response }.to_not raise_error(/bad URI/)
481
- end
482
- end
483
- end
484
-
485
- describe '#update' do
486
- subject(:put_update_response) { client.customers.update(id, params: update_params) }
487
- let(:id) { 'ABC123' }
488
-
489
- context 'with a valid request' do
490
- let(:update_params) { { 'hello' => 'world' } }
491
-
492
- let!(:stub) do
493
- stub_url = '/customers/:identity'.gsub(':identity', id)
494
- stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
495
- body: {
496
- 'customers' => {
497
-
498
- 'address_line1' => 'address_line1-input',
499
- 'address_line2' => 'address_line2-input',
500
- 'address_line3' => 'address_line3-input',
501
- 'city' => 'city-input',
502
- 'company_name' => 'company_name-input',
503
- 'country_code' => 'country_code-input',
504
- 'created_at' => 'created_at-input',
505
- 'danish_identity_number' => 'danish_identity_number-input',
506
- 'email' => 'email-input',
507
- 'family_name' => 'family_name-input',
508
- 'given_name' => 'given_name-input',
509
- 'id' => 'id-input',
510
- 'language' => 'language-input',
511
- 'metadata' => 'metadata-input',
512
- 'phone_number' => 'phone_number-input',
513
- 'postal_code' => 'postal_code-input',
514
- 'region' => 'region-input',
515
- 'swedish_identity_number' => 'swedish_identity_number-input',
516
- },
517
- }.to_json,
518
- headers: response_headers
519
- )
520
- end
521
-
522
- it 'updates and returns the resource' do
523
- expect(put_update_response).to be_a(GoCardlessPro::Resources::Customer)
524
- expect(stub).to have_been_requested
525
- end
526
- end
527
- end
528
-
529
- describe '#remove' do
530
- subject(:delete_response) { client.customers.remove(resource_id) }
531
-
532
- let(:resource_id) { 'ABC123' }
533
-
534
- let!(:stub) do
535
- # /customers/%v
536
- stub_url = '/customers/:identity'.gsub(':identity', resource_id)
537
- stub_request(:delete, /.*api.gocardless.com#{stub_url}/).to_return(
538
-
539
- body: {
540
- 'customers' => {
541
-
542
- 'address_line1' => 'address_line1-input',
543
- 'address_line2' => 'address_line2-input',
544
- 'address_line3' => 'address_line3-input',
545
- 'city' => 'city-input',
546
- 'company_name' => 'company_name-input',
547
- 'country_code' => 'country_code-input',
548
- 'created_at' => 'created_at-input',
549
- 'danish_identity_number' => 'danish_identity_number-input',
550
- 'email' => 'email-input',
551
- 'family_name' => 'family_name-input',
552
- 'given_name' => 'given_name-input',
553
- 'id' => 'id-input',
554
- 'language' => 'language-input',
555
- 'metadata' => 'metadata-input',
556
- 'phone_number' => 'phone_number-input',
557
- 'postal_code' => 'postal_code-input',
558
- 'region' => 'region-input',
559
- 'swedish_identity_number' => 'swedish_identity_number-input',
560
- },
561
- }.to_json,
562
-
563
- headers: response_headers
564
- )
565
- end
566
-
567
- it 'wraps the response and calls the right endpoint' do
568
- expect(delete_response).to be_a(GoCardlessPro::Resources::Customer)
569
-
570
- expect(stub).to have_been_requested
571
- end
572
-
573
- context 'when the request needs a body and custom header' do
574
- let(:body) { { foo: 'bar' } }
575
- let(:headers) { { 'Foo' => 'Bar' } }
576
- subject(:delete_response) { client.customers.remove(resource_id, body, headers) }
577
-
578
- let(:resource_id) { 'ABC123' }
579
-
580
- let!(:stub) do
581
- # /customers/%v
582
- stub_url = '/customers/:identity'.gsub(':identity', resource_id)
583
- stub_request(:delete, /.*api.gocardless.com#{stub_url}/).
584
- with(
585
- body: { foo: 'bar' },
586
- headers: { 'Foo' => 'Bar' }
587
- ).to_return(
588
- body: {
589
- 'customers' => {
590
-
591
- 'address_line1' => 'address_line1-input',
592
- 'address_line2' => 'address_line2-input',
593
- 'address_line3' => 'address_line3-input',
594
- 'city' => 'city-input',
595
- 'company_name' => 'company_name-input',
596
- 'country_code' => 'country_code-input',
597
- 'created_at' => 'created_at-input',
598
- 'danish_identity_number' => 'danish_identity_number-input',
599
- 'email' => 'email-input',
600
- 'family_name' => 'family_name-input',
601
- 'given_name' => 'given_name-input',
602
- 'id' => 'id-input',
603
- 'language' => 'language-input',
604
- 'metadata' => 'metadata-input',
605
- 'phone_number' => 'phone_number-input',
606
- 'postal_code' => 'postal_code-input',
607
- 'region' => 'region-input',
608
- 'swedish_identity_number' => 'swedish_identity_number-input',
609
- },
610
- }.to_json,
611
- headers: response_headers
612
- )
613
- end
614
- end
615
- end
616
- end