gocardless_pro 2.30.0 → 2.32.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1591576f071daabb20a04e9e91a7e802be0efed1b3e71910e33c35335589cdf4
4
- data.tar.gz: 763c87329cc80eba691ae417c58b3344abbc7ffc48fe554be85fedcc24c1e80d
3
+ metadata.gz: f717c8978ddc773f1e969653eeac91e91829c453b1ecf68da04ec9a9aa6a705b
4
+ data.tar.gz: 55c2a686cf9f74b43c3f85b808fecb589a704881fc3eee218c845413682129ac
5
5
  SHA512:
6
- metadata.gz: 7b8552085fb1ec811f6398ed9f52990853a48c4836e8f6092273366dcd0a9e1f27e4399cc8489322a726e94153dd221e1a4cd20b68f72a0c371d4b62984ac0bb
7
- data.tar.gz: ec4ab730899aad19e7a670b5da2378e651db3bb1e88734e9794967ef33ac764e973b70e7c2a61613065a8284a1cf8afbf6879e8c7eaa13cda53a3176527be200
6
+ metadata.gz: f7e7459e76bbd33f58290cfd0822dcf796d4f2de2f4b7041984a8f4ac496ec7f43d0f16bd6f174169e0eaa77422d89f653b5c1e6cd1ae35d539a5a5f3294d61b
7
+ data.tar.gz: 5fb0db3f9079ba61f759651abf993119445a247a0ee78fd04b09f207b04b7cda7f09ab95ac43e0caa741ce6608edf81a95380c761cf1f73f22b83fd162d64087
data/.circleci/config.yml CHANGED
@@ -25,7 +25,7 @@ jobs:
25
25
  printf -- "---\n:rubygems_api_key: $RUBYGEM_PUBLISH_API_KEY\n" > $HOME/.gem/credentials
26
26
  gem build *.gemspec
27
27
  gem push *.gem
28
-
28
+
29
29
  workflows:
30
30
  version: 2
31
31
  tests:
@@ -34,18 +34,14 @@ workflows:
34
34
  matrix:
35
35
  parameters:
36
36
  faraday-version: ["0.9.2", "1.0"]
37
- ruby-version: ["2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "3.0"]
37
+ ruby-version: ["2.3", "2.4", "2.5", "2.6", "2.7", "3.0"]
38
38
  exclude:
39
- - faraday-version: "1.0"
40
- ruby-version: "2.1"
41
- - faraday-version: "1.0"
42
- ruby-version: "2.2"
43
39
  - faraday-version: "0.9.2"
44
40
  ruby-version: "3.0"
45
41
  - publish:
46
42
  filters:
47
43
  branches:
48
44
  only:
49
- - master
45
+ - master
50
46
  requires:
51
47
  - test
data/.travis.yml CHANGED
@@ -2,8 +2,6 @@ language: ruby
2
2
 
3
3
  rvm:
4
4
  - 2.3.0
5
- - 2.2
6
- - 2.1
7
5
  - 2.0.0
8
6
 
9
7
  sudo: false
@@ -198,7 +198,7 @@ module GoCardlessPro
198
198
  'User-Agent' => user_agent.to_s,
199
199
  'Content-Type' => 'application/json',
200
200
  'GoCardless-Client-Library' => 'gocardless-pro-ruby',
201
- 'GoCardless-Client-Version' => '2.30.0',
201
+ 'GoCardless-Client-Version' => '2.32.0',
202
202
  },
203
203
  }
204
204
  end
@@ -97,6 +97,10 @@ module GoCardlessPro
97
97
  @links['mandate_request_mandate']
98
98
  end
99
99
 
100
+ def organisation
101
+ @links['organisation']
102
+ end
103
+
100
104
  def payment_request
101
105
  @links['payment_request']
102
106
  end
@@ -23,7 +23,10 @@ module GoCardlessPro
23
23
  attr_reader :expires_at
24
24
  attr_reader :id
25
25
  attr_reader :lock_bank_account
26
+ attr_reader :lock_currency
26
27
  attr_reader :lock_customer_details
28
+ attr_reader :prefilled_bank_account
29
+ attr_reader :prefilled_customer
27
30
  attr_reader :redirect_uri
28
31
  attr_reader :session_token
29
32
  attr_reader :show_redirect_buttons
@@ -41,7 +44,10 @@ module GoCardlessPro
41
44
  @id = object['id']
42
45
  @links = object['links']
43
46
  @lock_bank_account = object['lock_bank_account']
47
+ @lock_currency = object['lock_currency']
44
48
  @lock_customer_details = object['lock_customer_details']
49
+ @prefilled_bank_account = object['prefilled_bank_account']
50
+ @prefilled_customer = object['prefilled_customer']
45
51
  @redirect_uri = object['redirect_uri']
46
52
  @session_token = object['session_token']
47
53
  @show_redirect_buttons = object['show_redirect_buttons']
@@ -22,6 +22,13 @@ module GoCardlessPro
22
22
  # account. You may wish to handle this by updating the existing record
23
23
  # instead, the ID of which will be provided as
24
24
  # `links[customer_bank_account]` in the error response.
25
+ #
26
+ # _Note:_ To ensure the customer's bank accounts are valid, verify them
27
+ # first
28
+ # using
29
+ #
30
+ # [bank_details_lookups](#bank-details-lookups-perform-a-bank-details-lookup),
31
+ # before proceeding with creating the accounts
25
32
  class CustomerBankAccount
26
33
  attr_reader :account_holder_name
27
34
  attr_reader :account_number_ending
@@ -14,8 +14,10 @@ module GoCardlessPro
14
14
 
15
15
  # Events are stored for all webhooks. An event refers to a resource which
16
16
  # has been updated, for example a payment which has been collected, or a
17
- # mandate which has been transferred. See [here](#event-actions) for a
18
- # complete list of event types.
17
+ # mandate which has been transferred. Event creation is an asynchronous
18
+ # process, so it can take some time between an action occurring and its
19
+ # corresponding event getting included in API responses. See
20
+ # [here](#event-actions) for a complete list of event types.
19
21
  class Event
20
22
  attr_reader :action
21
23
  attr_reader :created_at
@@ -19,6 +19,7 @@ module GoCardlessPro
19
19
  # Not all institutions support both Payment Initiation (PIS) and Account
20
20
  # Information (AIS) services.
21
21
  class Institution
22
+ attr_reader :bank_redirect
22
23
  attr_reader :country_code
23
24
  attr_reader :icon_url
24
25
  attr_reader :id
@@ -30,6 +31,7 @@ module GoCardlessPro
30
31
  def initialize(object, response = nil)
31
32
  @object = object
32
33
 
34
+ @bank_redirect = object['bank_redirect']
33
35
  @country_code = object['country_code']
34
36
  @icon_url = object['icon_url']
35
37
  @id = object['id']
@@ -23,6 +23,12 @@ module GoCardlessPro
23
23
  # Bank account details may be supplied using [local
24
24
  # details](#appendix-local-bank-details) or an IBAN.
25
25
  #
26
+ # _ACH scheme_ For compliance reasons, an extra validation step is done using
27
+ # a third-party provider to make sure the customer's bank account can accept
28
+ # Direct Debit. If a bank account is discovered to be closed or invalid, the
29
+ # customer is requested to adjust the account number/routing number and
30
+ # succeed in this check to continue with the flow.
31
+ #
26
32
  # _Note:_ Usage of this endpoint is monitored. If your organisation relies on
27
33
  # GoCardless for
28
34
  # modulus or reachability checking but not for payment collection, please get in
@@ -144,6 +144,12 @@ module GoCardlessPro
144
144
  # The endpoint takes the same payload as Customer Bank Accounts, but check
145
145
  # the bank account is valid for the billing request scheme before creating
146
146
  # and attaching it.
147
+ #
148
+ # _ACH scheme_ For compliance reasons, an extra validation step is done using
149
+ # a third-party provider to make sure the customer's bank account can accept
150
+ # Direct Debit. If a bank account is discovered to be closed or invalid, the
151
+ # customer is requested to adjust the account number/routing number and
152
+ # succeed in this check to continue with the flow.
147
153
  # Example URL: /billing_requests/:identity/actions/collect_bank_account
148
154
  #
149
155
  # @param identity # Unique identifier, beginning with "BRQ".
@@ -218,6 +224,46 @@ module GoCardlessPro
218
224
  Resources::BillingRequest.new(unenvelope_body(response.body), response)
219
225
  end
220
226
 
227
+ # This will allow for the updating of the currency and subsequently the scheme
228
+ # if needed for a billing request
229
+ # this will only be available for mandate only flows, it will not support
230
+ # payments requests or plans
231
+ # Example URL: /billing_requests/:identity/actions/choose_currency
232
+ #
233
+ # @param identity # Unique identifier, beginning with "BRQ".
234
+ # @param options [Hash] parameters as a hash, under a params key.
235
+ def choose_currency(identity, options = {})
236
+ path = sub_url('/billing_requests/:identity/actions/choose_currency', 'identity' => identity)
237
+
238
+ params = options.delete(:params) || {}
239
+ options[:params] = {}
240
+ options[:params]['data'] = params
241
+
242
+ options[:retry_failures] = false
243
+
244
+ begin
245
+ response = make_request(:post, path, options)
246
+
247
+ # Response doesn't raise any errors until #body is called
248
+ response.tap(&:body)
249
+ rescue InvalidStateError => e
250
+ if e.idempotent_creation_conflict?
251
+ case @api_service.on_idempotency_conflict
252
+ when :raise
253
+ raise IdempotencyConflict, e.error
254
+ when :fetch
255
+ return get(e.conflicting_resource_id)
256
+ end
257
+ end
258
+
259
+ raise e
260
+ end
261
+
262
+ return if response.body.nil?
263
+
264
+ Resources::BillingRequest.new(unenvelope_body(response.body), response)
265
+ end
266
+
221
267
  # This is needed when you have a mandate request. As a scheme compliance rule we
222
268
  # are required to
223
269
  # allow the payer to crosscheck the details entered by them and confirm it.
@@ -119,11 +119,10 @@ module GoCardlessPro
119
119
  # refund must start in `pending_submission`.</li>
120
120
  # <li>`payout_bounced`: Transitions a payout to `bounced`. It must start
121
121
  # in the `paid` state.</li>
122
- # <li>`billing_request_fulfilled`: Authorises the billing request, fulfils
123
- # it, and moves the associated payment to `failed`. The billing request
124
- # must be in the `pending` state, with all actions completed except for
125
- # `bank_authorisation`. Only billing requests with a `payment_request` are
126
- # supported.</li>
122
+ # <li>`billing_request_fulfilled`: Authorises the billing request, and
123
+ # then fulfils it. The billing request must be in the `pending` state,
124
+ # with all actions completed except for `bank_authorisation`. Only billing
125
+ # requests with a `payment_request` are supported.</li>
127
126
  # <li>`billing_request_fulfilled_and_payment_failed`: Authorises the
128
127
  # billing request, fulfils it, and moves the associated payment to
129
128
  # `failed`. The billing request must be in the `pending` state, with all
@@ -4,5 +4,5 @@ end
4
4
 
5
5
  module GoCardlessPro
6
6
  # Current version of the GC gem
7
- VERSION = '2.30.0'.freeze
7
+ VERSION = '2.32.0'.freeze
8
8
  end
@@ -23,7 +23,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
23
23
  'id' => 'id-input',
24
24
  'links' => 'links-input',
25
25
  'lock_bank_account' => 'lock_bank_account-input',
26
+ 'lock_currency' => 'lock_currency-input',
26
27
  'lock_customer_details' => 'lock_customer_details-input',
28
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
29
+ 'prefilled_customer' => 'prefilled_customer-input',
27
30
  'redirect_uri' => 'redirect_uri-input',
28
31
  'session_token' => 'session_token-input',
29
32
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -44,7 +47,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
44
47
  'id' => 'id-input',
45
48
  'links' => 'links-input',
46
49
  'lock_bank_account' => 'lock_bank_account-input',
50
+ 'lock_currency' => 'lock_currency-input',
47
51
  'lock_customer_details' => 'lock_customer_details-input',
52
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
53
+ 'prefilled_customer' => 'prefilled_customer-input',
48
54
  'redirect_uri' => 'redirect_uri-input',
49
55
  'session_token' => 'session_token-input',
50
56
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -65,7 +71,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
65
71
  'id' => 'id-input',
66
72
  'links' => 'links-input',
67
73
  'lock_bank_account' => 'lock_bank_account-input',
74
+ 'lock_currency' => 'lock_currency-input',
68
75
  'lock_customer_details' => 'lock_customer_details-input',
76
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
77
+ 'prefilled_customer' => 'prefilled_customer-input',
69
78
  'redirect_uri' => 'redirect_uri-input',
70
79
  'session_token' => 'session_token-input',
71
80
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -119,7 +128,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
119
128
  'id' => 'id-input',
120
129
  'links' => 'links-input',
121
130
  'lock_bank_account' => 'lock_bank_account-input',
131
+ 'lock_currency' => 'lock_currency-input',
122
132
  'lock_customer_details' => 'lock_customer_details-input',
133
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
134
+ 'prefilled_customer' => 'prefilled_customer-input',
123
135
  'redirect_uri' => 'redirect_uri-input',
124
136
  'session_token' => 'session_token-input',
125
137
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -176,7 +188,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
176
188
  'id' => 'id-input',
177
189
  'links' => 'links-input',
178
190
  'lock_bank_account' => 'lock_bank_account-input',
191
+ 'lock_currency' => 'lock_currency-input',
179
192
  'lock_customer_details' => 'lock_customer_details-input',
193
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
194
+ 'prefilled_customer' => 'prefilled_customer-input',
180
195
  'redirect_uri' => 'redirect_uri-input',
181
196
  'session_token' => 'session_token-input',
182
197
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -219,7 +234,10 @@ describe GoCardlessPro::Resources::BillingRequestFlow do
219
234
  'id' => 'id-input',
220
235
  'links' => 'links-input',
221
236
  'lock_bank_account' => 'lock_bank_account-input',
237
+ 'lock_currency' => 'lock_currency-input',
222
238
  'lock_customer_details' => 'lock_customer_details-input',
239
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
240
+ 'prefilled_customer' => 'prefilled_customer-input',
223
241
  'redirect_uri' => 'redirect_uri-input',
224
242
  'session_token' => 'session_token-input',
225
243
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -600,6 +600,78 @@ describe GoCardlessPro::Resources::BillingRequest do
600
600
  end
601
601
  end
602
602
 
603
+ describe '#choose_currency' do
604
+ subject(:post_response) { client.billing_requests.choose_currency(resource_id) }
605
+
606
+ let(:resource_id) { 'ABC123' }
607
+
608
+ let!(:stub) do
609
+ # /billing_requests/%v/actions/choose_currency
610
+ stub_url = '/billing_requests/:identity/actions/choose_currency'.gsub(':identity', resource_id)
611
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
612
+
613
+ body: {
614
+ 'billing_requests' => {
615
+
616
+ 'actions' => 'actions-input',
617
+ 'created_at' => 'created_at-input',
618
+ 'fallback_enabled' => 'fallback_enabled-input',
619
+ 'id' => 'id-input',
620
+ 'links' => 'links-input',
621
+ 'mandate_request' => 'mandate_request-input',
622
+ 'metadata' => 'metadata-input',
623
+ 'payment_request' => 'payment_request-input',
624
+ 'resources' => 'resources-input',
625
+ 'status' => 'status-input',
626
+ },
627
+ }.to_json,
628
+
629
+ headers: response_headers
630
+ )
631
+ end
632
+
633
+ it 'wraps the response and calls the right endpoint' do
634
+ expect(post_response).to be_a(GoCardlessPro::Resources::BillingRequest)
635
+
636
+ expect(stub).to have_been_requested
637
+ end
638
+
639
+ context 'when the request needs a body and custom header' do
640
+ let(:body) { { foo: 'bar' } }
641
+ let(:headers) { { 'Foo' => 'Bar' } }
642
+ subject(:post_response) { client.billing_requests.choose_currency(resource_id, body, headers) }
643
+
644
+ let(:resource_id) { 'ABC123' }
645
+
646
+ let!(:stub) do
647
+ # /billing_requests/%v/actions/choose_currency
648
+ stub_url = '/billing_requests/:identity/actions/choose_currency'.gsub(':identity', resource_id)
649
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
650
+ with(
651
+ body: { foo: 'bar' },
652
+ headers: { 'Foo' => 'Bar' }
653
+ ).to_return(
654
+ body: {
655
+ 'billing_requests' => {
656
+
657
+ 'actions' => 'actions-input',
658
+ 'created_at' => 'created_at-input',
659
+ 'fallback_enabled' => 'fallback_enabled-input',
660
+ 'id' => 'id-input',
661
+ 'links' => 'links-input',
662
+ 'mandate_request' => 'mandate_request-input',
663
+ 'metadata' => 'metadata-input',
664
+ 'payment_request' => 'payment_request-input',
665
+ 'resources' => 'resources-input',
666
+ 'status' => 'status-input',
667
+ },
668
+ }.to_json,
669
+ headers: response_headers
670
+ )
671
+ end
672
+ end
673
+ end
674
+
603
675
  describe '#confirm_payer_details' do
604
676
  subject(:post_response) { client.billing_requests.confirm_payer_details(resource_id) }
605
677
 
@@ -18,6 +18,7 @@ describe GoCardlessPro::Resources::Institution do
18
18
  body: {
19
19
  'institutions' => [{
20
20
 
21
+ 'bank_redirect' => 'bank_redirect-input',
21
22
  'country_code' => 'country_code-input',
22
23
  'icon_url' => 'icon_url-input',
23
24
  'id' => 'id-input',
@@ -38,6 +39,8 @@ describe GoCardlessPro::Resources::Institution do
38
39
  it 'wraps each item in the resource class' do
39
40
  expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::Institution)
40
41
 
42
+ expect(get_list_response.records.first.bank_redirect).to eq('bank_redirect-input')
43
+
41
44
  expect(get_list_response.records.first.country_code).to eq('country_code-input')
42
45
 
43
46
  expect(get_list_response.records.first.icon_url).to eq('icon_url-input')
@@ -64,6 +67,7 @@ describe GoCardlessPro::Resources::Institution do
64
67
  body: {
65
68
  'institutions' => [{
66
69
 
70
+ 'bank_redirect' => 'bank_redirect-input',
67
71
  'country_code' => 'country_code-input',
68
72
  'icon_url' => 'icon_url-input',
69
73
  'id' => 'id-input',
@@ -84,6 +88,7 @@ describe GoCardlessPro::Resources::Institution do
84
88
  body: {
85
89
  'institutions' => [{
86
90
 
91
+ 'bank_redirect' => 'bank_redirect-input',
87
92
  'country_code' => 'country_code-input',
88
93
  'icon_url' => 'icon_url-input',
89
94
  'id' => 'id-input',
@@ -23,7 +23,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
23
23
  'id' => 'id-input',
24
24
  'links' => 'links-input',
25
25
  'lock_bank_account' => 'lock_bank_account-input',
26
+ 'lock_currency' => 'lock_currency-input',
26
27
  'lock_customer_details' => 'lock_customer_details-input',
28
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
29
+ 'prefilled_customer' => 'prefilled_customer-input',
27
30
  'redirect_uri' => 'redirect_uri-input',
28
31
  'session_token' => 'session_token-input',
29
32
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -44,7 +47,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
44
47
  'id' => 'id-input',
45
48
  'links' => 'links-input',
46
49
  'lock_bank_account' => 'lock_bank_account-input',
50
+ 'lock_currency' => 'lock_currency-input',
47
51
  'lock_customer_details' => 'lock_customer_details-input',
52
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
53
+ 'prefilled_customer' => 'prefilled_customer-input',
48
54
  'redirect_uri' => 'redirect_uri-input',
49
55
  'session_token' => 'session_token-input',
50
56
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -65,7 +71,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
65
71
  'id' => 'id-input',
66
72
  'links' => 'links-input',
67
73
  'lock_bank_account' => 'lock_bank_account-input',
74
+ 'lock_currency' => 'lock_currency-input',
68
75
  'lock_customer_details' => 'lock_customer_details-input',
76
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
77
+ 'prefilled_customer' => 'prefilled_customer-input',
69
78
  'redirect_uri' => 'redirect_uri-input',
70
79
  'session_token' => 'session_token-input',
71
80
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -142,7 +151,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
142
151
  'id' => 'id-input',
143
152
  'links' => 'links-input',
144
153
  'lock_bank_account' => 'lock_bank_account-input',
154
+ 'lock_currency' => 'lock_currency-input',
145
155
  'lock_customer_details' => 'lock_customer_details-input',
156
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
157
+ 'prefilled_customer' => 'prefilled_customer-input',
146
158
  'redirect_uri' => 'redirect_uri-input',
147
159
  'session_token' => 'session_token-input',
148
160
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -199,7 +211,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
199
211
  'id' => 'id-input',
200
212
  'links' => 'links-input',
201
213
  'lock_bank_account' => 'lock_bank_account-input',
214
+ 'lock_currency' => 'lock_currency-input',
202
215
  'lock_customer_details' => 'lock_customer_details-input',
216
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
217
+ 'prefilled_customer' => 'prefilled_customer-input',
203
218
  'redirect_uri' => 'redirect_uri-input',
204
219
  'session_token' => 'session_token-input',
205
220
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -253,7 +268,10 @@ describe GoCardlessPro::Services::BillingRequestFlowsService do
253
268
  'id' => 'id-input',
254
269
  'links' => 'links-input',
255
270
  'lock_bank_account' => 'lock_bank_account-input',
271
+ 'lock_currency' => 'lock_currency-input',
256
272
  'lock_customer_details' => 'lock_customer_details-input',
273
+ 'prefilled_bank_account' => 'prefilled_bank_account-input',
274
+ 'prefilled_customer' => 'prefilled_customer-input',
257
275
  'redirect_uri' => 'redirect_uri-input',
258
276
  'session_token' => 'session_token-input',
259
277
  'show_redirect_buttons' => 'show_redirect_buttons-input',
@@ -871,6 +871,89 @@ describe GoCardlessPro::Services::BillingRequestsService do
871
871
  end
872
872
  end
873
873
 
874
+ describe '#choose_currency' do
875
+ subject(:post_response) { client.billing_requests.choose_currency(resource_id) }
876
+
877
+ let(:resource_id) { 'ABC123' }
878
+
879
+ let!(:stub) do
880
+ # /billing_requests/%v/actions/choose_currency
881
+ stub_url = '/billing_requests/:identity/actions/choose_currency'.gsub(':identity', resource_id)
882
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).to_return(
883
+
884
+ body: {
885
+ 'billing_requests' => {
886
+
887
+ 'actions' => 'actions-input',
888
+ 'created_at' => 'created_at-input',
889
+ 'fallback_enabled' => 'fallback_enabled-input',
890
+ 'id' => 'id-input',
891
+ 'links' => 'links-input',
892
+ 'mandate_request' => 'mandate_request-input',
893
+ 'metadata' => 'metadata-input',
894
+ 'payment_request' => 'payment_request-input',
895
+ 'resources' => 'resources-input',
896
+ 'status' => 'status-input',
897
+ },
898
+ }.to_json,
899
+
900
+ headers: response_headers
901
+ )
902
+ end
903
+
904
+ it 'wraps the response and calls the right endpoint' do
905
+ expect(post_response).to be_a(GoCardlessPro::Resources::BillingRequest)
906
+
907
+ expect(stub).to have_been_requested
908
+ end
909
+
910
+ describe 'retry behaviour' do
911
+ it "doesn't retry errors" do
912
+ stub_url = '/billing_requests/:identity/actions/choose_currency'.gsub(':identity', resource_id)
913
+ stub = stub_request(:post, /.*api.gocardless.com#{stub_url}/).
914
+ to_timeout
915
+
916
+ expect { post_response }.to raise_error(Faraday::ConnectionFailed)
917
+ expect(stub).to have_been_requested
918
+ end
919
+ end
920
+
921
+ context 'when the request needs a body and custom header' do
922
+ let(:body) { { foo: 'bar' } }
923
+ let(:headers) { { 'Foo' => 'Bar' } }
924
+ subject(:post_response) { client.billing_requests.choose_currency(resource_id, body, headers) }
925
+
926
+ let(:resource_id) { 'ABC123' }
927
+
928
+ let!(:stub) do
929
+ # /billing_requests/%v/actions/choose_currency
930
+ stub_url = '/billing_requests/:identity/actions/choose_currency'.gsub(':identity', resource_id)
931
+ stub_request(:post, /.*api.gocardless.com#{stub_url}/).
932
+ with(
933
+ body: { foo: 'bar' },
934
+ headers: { 'Foo' => 'Bar' }
935
+ ).to_return(
936
+ body: {
937
+ 'billing_requests' => {
938
+
939
+ 'actions' => 'actions-input',
940
+ 'created_at' => 'created_at-input',
941
+ 'fallback_enabled' => 'fallback_enabled-input',
942
+ 'id' => 'id-input',
943
+ 'links' => 'links-input',
944
+ 'mandate_request' => 'mandate_request-input',
945
+ 'metadata' => 'metadata-input',
946
+ 'payment_request' => 'payment_request-input',
947
+ 'resources' => 'resources-input',
948
+ 'status' => 'status-input',
949
+ },
950
+ }.to_json,
951
+ headers: response_headers
952
+ )
953
+ end
954
+ end
955
+ end
956
+
874
957
  describe '#confirm_payer_details' do
875
958
  subject(:post_response) { client.billing_requests.confirm_payer_details(resource_id) }
876
959
 
@@ -17,6 +17,7 @@ describe GoCardlessPro::Services::InstitutionsService do
17
17
  {
18
18
  'institutions' => [{
19
19
 
20
+ 'bank_redirect' => 'bank_redirect-input',
20
21
  'country_code' => 'country_code-input',
21
22
  'icon_url' => 'icon_url-input',
22
23
  'id' => 'id-input',
@@ -42,6 +43,8 @@ describe GoCardlessPro::Services::InstitutionsService do
42
43
  it 'wraps each item in the resource class' do
43
44
  expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::Institution)
44
45
 
46
+ expect(get_list_response.records.first.bank_redirect).to eq('bank_redirect-input')
47
+
45
48
  expect(get_list_response.records.first.country_code).to eq('country_code-input')
46
49
 
47
50
  expect(get_list_response.records.first.icon_url).to eq('icon_url-input')
@@ -91,6 +94,7 @@ describe GoCardlessPro::Services::InstitutionsService do
91
94
  body: {
92
95
  'institutions' => [{
93
96
 
97
+ 'bank_redirect' => 'bank_redirect-input',
94
98
  'country_code' => 'country_code-input',
95
99
  'icon_url' => 'icon_url-input',
96
100
  'id' => 'id-input',
@@ -111,6 +115,7 @@ describe GoCardlessPro::Services::InstitutionsService do
111
115
  body: {
112
116
  'institutions' => [{
113
117
 
118
+ 'bank_redirect' => 'bank_redirect-input',
114
119
  'country_code' => 'country_code-input',
115
120
  'icon_url' => 'icon_url-input',
116
121
  'id' => 'id-input',
@@ -140,6 +145,7 @@ describe GoCardlessPro::Services::InstitutionsService do
140
145
  body: {
141
146
  'institutions' => [{
142
147
 
148
+ 'bank_redirect' => 'bank_redirect-input',
143
149
  'country_code' => 'country_code-input',
144
150
  'icon_url' => 'icon_url-input',
145
151
  'id' => 'id-input',
@@ -160,6 +166,7 @@ describe GoCardlessPro::Services::InstitutionsService do
160
166
  body: {
161
167
  'institutions' => [{
162
168
 
169
+ 'bank_redirect' => 'bank_redirect-input',
163
170
  'country_code' => 'country_code-input',
164
171
  'icon_url' => 'icon_url-input',
165
172
  'id' => 'id-input',
@@ -185,6 +192,7 @@ describe GoCardlessPro::Services::InstitutionsService do
185
192
  body: {
186
193
  'institutions' => [{
187
194
 
195
+ 'bank_redirect' => 'bank_redirect-input',
188
196
  'country_code' => 'country_code-input',
189
197
  'icon_url' => 'icon_url-input',
190
198
  'id' => 'id-input',
@@ -208,6 +216,7 @@ describe GoCardlessPro::Services::InstitutionsService do
208
216
  body: {
209
217
  'institutions' => [{
210
218
 
219
+ 'bank_redirect' => 'bank_redirect-input',
211
220
  'country_code' => 'country_code-input',
212
221
  'icon_url' => 'icon_url-input',
213
222
  'id' => 'id-input',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gocardless_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.30.0
4
+ version: 2.32.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-25 00:00:00.000000000 Z
11
+ date: 2022-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday