gocardless_pro 2.30.0 → 2.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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