buckaruby 1.7.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -54
  3. data/README.md +54 -18
  4. data/lib/buckaruby/action.rb +4 -4
  5. data/lib/buckaruby/amount.rb +25 -0
  6. data/lib/buckaruby/configuration.rb +35 -40
  7. data/lib/buckaruby/currency.rb +3 -3
  8. data/lib/buckaruby/exception.rb +9 -8
  9. data/lib/buckaruby/gateway.rb +64 -72
  10. data/lib/buckaruby/operation.rb +5 -5
  11. data/lib/buckaruby/payment_method.rb +20 -12
  12. data/lib/buckaruby/request.rb +62 -68
  13. data/lib/buckaruby/response.rb +69 -67
  14. data/lib/buckaruby/signature.rb +26 -7
  15. data/lib/buckaruby/transaction_type.rb +24 -21
  16. data/lib/buckaruby/version.rb +1 -1
  17. data/lib/buckaruby.rb +1 -2
  18. metadata +16 -97
  19. data/.github/workflows/test.yml +0 -23
  20. data/.gitignore +0 -19
  21. data/.rubocop.yml +0 -107
  22. data/Gemfile +0 -12
  23. data/Gemfile.lock +0 -71
  24. data/Rakefile +0 -10
  25. data/buckaruby.gemspec +0 -28
  26. data/lib/buckaruby/iban.rb +0 -29
  27. data/lib/buckaruby/ideal.rb +0 -21
  28. data/spec/buckaruby/configuration_spec.rb +0 -113
  29. data/spec/buckaruby/field_mapper_spec.rb +0 -69
  30. data/spec/buckaruby/gateway_spec.rb +0 -803
  31. data/spec/buckaruby/iban_spec.rb +0 -75
  32. data/spec/buckaruby/signature_spec.rb +0 -89
  33. data/spec/buckaruby/support/case_insensitive_hash_spec.rb +0 -74
  34. data/spec/fixtures/responses/callback_invalid_signature.txt +0 -1
  35. data/spec/fixtures/responses/callback_payment_amex.txt +0 -1
  36. data/spec/fixtures/responses/callback_payment_cancelled.txt +0 -1
  37. data/spec/fixtures/responses/callback_payment_empty_transaction_type.txt +0 -1
  38. data/spec/fixtures/responses/callback_payment_failed.txt +0 -1
  39. data/spec/fixtures/responses/callback_payment_giropay.txt +0 -1
  40. data/spec/fixtures/responses/callback_payment_pending.txt +0 -1
  41. data/spec/fixtures/responses/callback_payment_rejected.txt +0 -1
  42. data/spec/fixtures/responses/callback_payment_sepa.txt +0 -1
  43. data/spec/fixtures/responses/callback_payment_sofort.txt +0 -1
  44. data/spec/fixtures/responses/callback_payment_success.txt +0 -1
  45. data/spec/fixtures/responses/callback_payment_visa.txt +0 -1
  46. data/spec/fixtures/responses/callback_recurrent_sepa.txt +0 -1
  47. data/spec/fixtures/responses/callback_recurrent_visa.txt +0 -1
  48. data/spec/fixtures/responses/callback_refund_amex.txt +0 -1
  49. data/spec/fixtures/responses/callback_refund_ideal.txt +0 -1
  50. data/spec/fixtures/responses/callback_refund_paypal.txt +0 -1
  51. data/spec/fixtures/responses/callback_reversal_paypal.txt +0 -1
  52. data/spec/fixtures/responses/callback_reversal_sepa.txt +0 -1
  53. data/spec/fixtures/responses/callback_valid_signature.txt +0 -1
  54. data/spec/fixtures/responses/cancel_success.txt +0 -1
  55. data/spec/fixtures/responses/recurrent_transaction_success.txt +0 -1
  56. data/spec/fixtures/responses/refund_info_error.txt +0 -1
  57. data/spec/fixtures/responses/refund_info_success.txt +0 -1
  58. data/spec/fixtures/responses/refund_transaction_success.txt +0 -1
  59. data/spec/fixtures/responses/setup_transaction_success.txt +0 -1
  60. data/spec/fixtures/responses/specify_transaction_success.txt +0 -1
  61. data/spec/fixtures/responses/status_cancellable.txt +0 -1
  62. data/spec/fixtures/responses/status_noncancellable.txt +0 -1
  63. data/spec/fixtures/responses/status_success.txt +0 -1
  64. data/spec/spec_helper.rb +0 -16
@@ -1,803 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Buckaruby::Gateway do
6
- describe 'initialization' do
7
- describe 'bad parameters' do
8
- it 'raises an exception when creating a new instance with invalid parameters' do
9
- expect {
10
- Buckaruby::Gateway.new
11
- }.to raise_error(ArgumentError)
12
-
13
- expect {
14
- Buckaruby::Gateway.new(website: "12345678")
15
- }.to raise_error(ArgumentError)
16
-
17
- expect {
18
- Buckaruby::Gateway.new(secret: "7C222FB2927D828AF22F592134E8932480637C0D")
19
- }.to raise_error(ArgumentError)
20
-
21
- expect {
22
- Buckaruby::Gateway.new(website: "", secret: "")
23
- }.to raise_error(ArgumentError)
24
- end
25
- end
26
- end
27
-
28
- subject { Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D") }
29
-
30
- it { expect(subject).to be_an_instance_of(Buckaruby::Gateway) }
31
-
32
- describe '#payment_methods' do
33
- before do
34
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequestSpecification").to_return(body: File.read("spec/fixtures/responses/specify_transaction_success.txt"))
35
- end
36
-
37
- it 'returns the payment methods enabled by Buckaroo and supported by this library' do
38
- payment_methods = subject.payment_methods
39
- expect(payment_methods).to eq([Buckaruby::PaymentMethod::IDEAL, Buckaruby::PaymentMethod::VISA])
40
- end
41
- end
42
-
43
- describe '#issuers' do
44
- context 'when no or false parameters are passed' do
45
- it 'raises an ArgumentError' do
46
- expect { subject.issuers }.to raise_error(ArgumentError)
47
- expect { subject.issuers(:wrong) }.to raise_error(ArgumentError)
48
- end
49
- end
50
-
51
- context 'when ideal is passed' do
52
- let(:issuers) { subject.issuers(Buckaruby::PaymentMethod::IDEAL) }
53
-
54
- it { expect(issuers.length).to be > 0 }
55
- it { expect(issuers).to include("INGBNL2A" => "ING") }
56
- end
57
-
58
- context 'when ideal processing is passed' do
59
- let(:issuers) { subject.issuers(Buckaruby::PaymentMethod::IDEAL_PROCESSING) }
60
-
61
- it { expect(issuers.length).to be > 0 }
62
- it { expect(issuers).to include("RABONL2U" => "Rabobank") }
63
- end
64
-
65
- context 'when visa, mastercard, maestro, bankcontact, sepa direct debit or paypal is passed' do
66
- it 'raises an ArgumentError' do
67
- expect { subject.issuers(Buckaruby::PaymentMethod::VISA) }.to raise_error(ArgumentError)
68
- expect { subject.issuers(Buckaruby::PaymentMethod::MASTER_CARD) }.to raise_error(ArgumentError)
69
- expect { subject.issuers(Buckaruby::PaymentMethod::MAESTRO) }.to raise_error(ArgumentError)
70
- expect { subject.issuers(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT) }.to raise_error(ArgumentError)
71
- expect { subject.issuers(Buckaruby::PaymentMethod::BANCONTACT_MISTER_CASH) }.to raise_error(ArgumentError)
72
- expect { subject.issuers(Buckaruby::PaymentMethod::PAYPAL) }.to raise_error(ArgumentError)
73
- end
74
- end
75
- end
76
-
77
- describe '#setup_transaction' do
78
- before do
79
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/setup_transaction_success.txt"))
80
- end
81
-
82
- it 'raises an exception when initiating a transaction with missing parameters' do
83
- expect {
84
- subject.setup_transaction(amount: 10)
85
- }.to raise_error(ArgumentError)
86
-
87
- expect {
88
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL)
89
- }.to raise_error(ArgumentError)
90
-
91
- expect {
92
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first)
93
- }.to raise_error(ArgumentError)
94
-
95
- expect {
96
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345")
97
- }.to raise_error(ArgumentError)
98
- end
99
-
100
- it 'raises an exception when initiating a transaction with invalid amount' do
101
- expect {
102
- subject.setup_transaction(amount: 0, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
103
- }.to raise_error(ArgumentError)
104
-
105
- expect {
106
- subject.setup_transaction(amount: -1, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
107
- }.to raise_error(ArgumentError)
108
- end
109
-
110
- it 'raises an exception when initiating a transaction with invalid payment method' do
111
- expect {
112
- subject.setup_transaction(amount: 10, payment_method: "abc", payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
113
- }.to raise_error(ArgumentError)
114
- end
115
-
116
- it 'raises an exception when initiating a transaction with invalid payment issuer' do
117
- expect {
118
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: "abc", invoicenumber: "12345", return_url: "http://www.return.url/")
119
- }.to raise_error(ArgumentError)
120
- end
121
-
122
- it 'raises a ConnectionException when connection the Buckaroo fails' do
123
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_raise(Errno::ECONNREFUSED)
124
-
125
- expect {
126
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
127
- }.to raise_error(Buckaruby::ConnectionException)
128
- end
129
-
130
- it 'raises an InvalidResponseException when Buckaroo returns an invalid response' do
131
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(status: 500)
132
-
133
- expect {
134
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
135
- }.to raise_error(Buckaruby::InvalidResponseException)
136
- end
137
-
138
- it 'raises an ApiException when API result Fail is returned' do
139
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: "BRQ_APIRESULT=Fail&BRQ_APIERRORMESSAGE=Invalid+request")
140
-
141
- expect {
142
- subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
143
- }.to raise_error(Buckaruby::ApiException)
144
- end
145
-
146
- describe 'initiates a transaction when amount is integer, decimal or string' do
147
- context 'when amount is an integer' do
148
- let(:response) { subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/") }
149
-
150
- it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
151
- it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
152
- it { expect(response.redirect_url).not_to be nil }
153
- end
154
-
155
- context 'when amount is a decimal' do
156
- let(:response) { subject.setup_transaction(amount: 10.50, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/") }
157
-
158
- it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
159
- it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
160
- it { expect(response.redirect_url).not_to be nil }
161
- end
162
-
163
- context 'when amount is a string' do
164
- let(:response) { subject.setup_transaction(amount: '10', payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/") }
165
-
166
- it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
167
- it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
168
- it { expect(response.redirect_url).not_to be nil }
169
- end
170
- end
171
-
172
- it 'initiates a transaction for payment method ideal' do
173
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
174
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
175
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
176
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
177
- expect(response.redirect_url).not_to be nil
178
- expect(response.timestamp).to be_an_instance_of(Time)
179
- expect(response.to_h).to be_an_instance_of(Hash)
180
- end
181
-
182
- it 'initiates a transaction for payment method visa' do
183
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345", return_url: "http://www.return.url/")
184
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
185
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
186
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
187
- expect(response.redirect_url).not_to be nil
188
- expect(response.timestamp).to be_an_instance_of(Time)
189
- expect(response.to_h).to be_an_instance_of(Hash)
190
- end
191
-
192
- it 'initiates a transaction for payment method mastercard' do
193
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::MASTER_CARD, invoicenumber: "12345", return_url: "http://www.return.url/")
194
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
195
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
196
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
197
- expect(response.redirect_url).not_to be nil
198
- expect(response.timestamp).to be_an_instance_of(Time)
199
- expect(response.to_h).to be_an_instance_of(Hash)
200
- end
201
-
202
- it 'initiates a transaction for payment method sepa direct debit' do
203
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT, invoicenumber: "12345", return_url: "http://www.return.url/", account_iban: "NL13TEST0123456789", account_name: "J. Tester", mandate_reference: "00P12345", collect_date: Date.new(2016, 1, 1))
204
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
205
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
206
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
207
- expect(response.timestamp).to be_an_instance_of(Time)
208
- expect(response.to_h).to be_an_instance_of(Hash)
209
- end
210
-
211
- it 'initiates a transaction for payment method paypal' do
212
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::PAYPAL, invoicenumber: "12345", return_url: "http://www.return.url/")
213
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
214
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
215
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
216
- expect(response.redirect_url).not_to be nil
217
- expect(response.timestamp).to be_an_instance_of(Time)
218
- expect(response.to_h).to be_an_instance_of(Hash)
219
- end
220
-
221
- it 'initiates a transaction for payment method sofort' do
222
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::SOFORT, invoicenumber: "12345", return_url: "http://www.return.url/")
223
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
224
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
225
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
226
- expect(response.redirect_url).not_to be nil
227
- expect(response.timestamp).to be_an_instance_of(Time)
228
- expect(response.to_h).to be_an_instance_of(Hash)
229
- end
230
-
231
- it 'initiates a transaction for payment method giropay' do
232
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::GIROPAY, invoicenumber: "12345", return_url: "http://www.return.url/")
233
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
234
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
235
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
236
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
237
- expect(response.redirect_url).not_to be nil
238
- expect(response.timestamp).to be_an_instance_of(Time)
239
- end
240
-
241
- context 'with custom variables' do
242
- it 'sends the custom variables with the request' do
243
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: "ABNANL2A", invoicenumber: "12345", return_url: "http://www.return.url/", custom: { foo: :bar, quux: "42" })
244
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
245
- expect(response.custom[:foo]).to eq("bar")
246
- expect(response.custom[:quux]).to eq("42")
247
-
248
- expect(WebMock).to have_requested(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
249
- .with(body: "brq_websitekey=12345678&brq_payment_method=ideal&brq_culture=nl-NL&brq_currency=EUR&brq_amount=10.0&brq_invoicenumber=12345&brq_service_ideal_action=Pay&brq_service_ideal_issuer=ABNANL2A&brq_service_ideal_version=2&brq_return=http%3A%2F%2Fwww.return.url%2F&cust_foo=bar&cust_quux=42&add_buckaruby=Buckaruby+#{Buckaruby::VERSION}&brq_signature=979f64bc651c9e780844c0866380fa2554897131")
250
- end
251
- end
252
-
253
- context 'with additional variables' do
254
- it 'sends the additional variables with the request' do
255
- response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: "ABNANL2A", invoicenumber: "12345", return_url: "http://www.return.url/", additional: { myreference: "12345" })
256
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
257
- expect(response.additional[:buckaruby]).to eq("1.2.0")
258
- expect(response.additional[:myreference]).to eq("12345")
259
-
260
- expect(WebMock).to have_requested(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
261
- .with(body: "brq_websitekey=12345678&brq_payment_method=ideal&brq_culture=nl-NL&brq_currency=EUR&brq_amount=10.0&brq_invoicenumber=12345&brq_service_ideal_action=Pay&brq_service_ideal_issuer=ABNANL2A&brq_service_ideal_version=2&brq_return=http%3A%2F%2Fwww.return.url%2F&add_myreference=12345&add_buckaruby=Buckaruby+#{Buckaruby::VERSION}&brq_signature=b3b7db8c80ea3260f86aa916de1a057ffce3db78")
262
- end
263
- end
264
- end
265
-
266
- describe '#recurrent_transaction' do
267
- before do
268
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/recurrent_transaction_success.txt"))
269
- end
270
-
271
- it 'raises an exception when initiating a recurrent transaction with missing parameters' do
272
- expect {
273
- subject.recurrent_transaction(amount: 10)
274
- }.to raise_error(ArgumentError)
275
-
276
- expect {
277
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA)
278
- }.to raise_error(ArgumentError)
279
-
280
- expect {
281
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345")
282
- }.to raise_error(ArgumentError)
283
- end
284
-
285
- it 'raises an exception when initiating a transaction with invalid payment method' do
286
- expect {
287
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, invoicenumber: "12345", transaction_id: "12345")
288
- }.to raise_error(ArgumentError)
289
- end
290
-
291
- it 'initiates a recurrent transaction for payment method visa' do
292
- response = subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345", transaction_id: "12345")
293
- expect(response).to be_an_instance_of(Buckaruby::RecurrentTransactionResponse)
294
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
295
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
296
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
297
- expect(response.invoicenumber).to eq("12345")
298
- expect(response.timestamp).to be_an_instance_of(Time)
299
- expect(response.to_h).to be_an_instance_of(Hash)
300
- end
301
- end
302
-
303
- describe '#refundable?' do
304
- it 'raises an exception when required parameters are missing' do
305
- expect {
306
- subject.refundable?
307
- }.to raise_error(ArgumentError)
308
- end
309
-
310
- it 'returns true when the transaction is refundable' do
311
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
312
-
313
- response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
314
- expect(response).to be true
315
- end
316
-
317
- it 'returns false when the transaction was not found' do
318
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
319
-
320
- response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
321
- expect(response).to be false
322
- end
323
- end
324
-
325
- describe '#refund_transaction' do
326
- it 'raises an exception when required parameters are missing' do
327
- expect {
328
- subject.refund_transaction
329
- }.to raise_error(ArgumentError)
330
- end
331
-
332
- it 'raises an exception when the transaction is not refundable' do
333
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
334
-
335
- expect {
336
- subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
337
- }.to raise_error(Buckaruby::NonRefundableTransactionException)
338
- end
339
-
340
- it 'refunds the transaction' do
341
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
342
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/refund_transaction_success.txt"))
343
-
344
- response = subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
345
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
346
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
347
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
348
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
349
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
350
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
351
- expect(response.invoicenumber).to eq("12345")
352
- expect(response.timestamp).to be_an_instance_of(Time)
353
- expect(response.to_h).to be_an_instance_of(Hash)
354
- end
355
- end
356
-
357
- describe '#status' do
358
- before do
359
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_success.txt"))
360
- end
361
-
362
- it 'raises an exception when required parameters are missing' do
363
- expect {
364
- subject.status
365
- }.to raise_error(ArgumentError)
366
- end
367
-
368
- it { expect(subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")).to be_an_instance_of(Buckaruby::StatusResponse) }
369
-
370
- it 'returns transaction status' do
371
- response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
372
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
373
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
374
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
375
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
376
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
377
- expect(response.invoicenumber).to eq("12345")
378
- expect(response.timestamp).to be_an_instance_of(Time)
379
- expect(response.to_h).to be_an_instance_of(Hash)
380
- end
381
-
382
- it 'includes account iban, bic and name for an ideal response' do
383
- response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
384
- expect(response.account_iban).to eq("NL44RABO0123456789")
385
- expect(response.account_bic).to eq("RABONL2U")
386
- expect(response.account_name).to eq("J. de Tester")
387
- end
388
- end
389
-
390
- describe '#cancellable?' do
391
- it 'raises an exception when required parameters are missing' do
392
- expect {
393
- subject.cancellable?
394
- }.to raise_error(ArgumentError)
395
- end
396
-
397
- it 'returns true when the transaction is cancellable' do
398
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
399
-
400
- response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
401
- expect(response).to be true
402
- end
403
-
404
- it 'returns false when the transaction is not cancellable' do
405
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
406
-
407
- response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
408
- expect(response).to be false
409
- end
410
- end
411
-
412
- describe '#cancel_transaction' do
413
- it 'raises an exception when required parameters are missing' do
414
- expect {
415
- subject.cancel_transaction
416
- }.to raise_error(ArgumentError)
417
- end
418
-
419
- it 'raises an exception when the transaction is not cancellable' do
420
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
421
-
422
- expect {
423
- subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
424
- }.to raise_error(Buckaruby::NonCancellableTransactionException)
425
- end
426
-
427
- it 'cancels the transaction' do
428
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
429
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=CancelTransaction").to_return(body: File.read("spec/fixtures/responses/cancel_success.txt"))
430
-
431
- response = subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
432
- expect(response).to be_an_instance_of(Buckaruby::CancelResponse)
433
- end
434
- end
435
-
436
- describe '#specify_transaction' do
437
- before do
438
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequestSpecification").to_return(body: File.read("spec/fixtures/responses/specify_transaction_success.txt"))
439
- end
440
-
441
- it 'retrieves the specification for setting up a transaction' do
442
- response = subject.specify_transaction
443
- expect(response).to be_an_instance_of(Buckaruby::TransactionSpecificationResponse)
444
-
445
- services = response.services
446
- expect(services).to be_an_instance_of(Array)
447
- expect(services.length).to eq(2)
448
-
449
- service = services.last
450
- expect(service).to be_an_instance_of(Buckaruby::Support::CaseInsensitiveHash)
451
- expect(service[:name]).to eq(Buckaruby::PaymentMethod::VISA)
452
- expect(service[:description]).to eq("Visa")
453
- expect(service[:version]).to eq("1")
454
-
455
- currencies = service[:supportedcurrencies]
456
- expect(currencies).to be_an_instance_of(Array)
457
- expect(currencies.length).to eq(21)
458
-
459
- currency = currencies.last
460
- expect(currency).to be_an_instance_of(Buckaruby::Support::CaseInsensitiveHash)
461
- expect(currency[:name]).to eq("US Dollar")
462
- expect(currency[:code]).to eq(Buckaruby::Currency::US_DOLLAR)
463
- end
464
- end
465
-
466
- describe '#callback' do
467
- it 'raises an exception when parameters are missing' do
468
- expect {
469
- subject.callback
470
- }.to raise_error(ArgumentError)
471
- end
472
-
473
- it 'raises an exception when parameter is an empty Hash' do
474
- expect {
475
- subject.callback({})
476
- }.to raise_error(ArgumentError)
477
- end
478
-
479
- it 'raises an exception when parameter is an empty String' do
480
- expect {
481
- subject.callback("")
482
- }.to raise_error(ArgumentError)
483
- end
484
-
485
- it 'raises a SignatureException when the signature is invalid' do
486
- params = File.read("spec/fixtures/responses/callback_invalid_signature.txt")
487
-
488
- expect {
489
- subject.callback(params)
490
- }.to raise_error(Buckaruby::SignatureException, "Sent signature (abcdefgh1234567890abcdefgh1234567890) doesn't match generated signature (0a74bba15fccd8094f33678c001b44851643876d)")
491
- end
492
-
493
- it 'returns the status when the signature is valid' do
494
- params = File.read("spec/fixtures/responses/callback_valid_signature.txt")
495
-
496
- response = subject.callback(params)
497
- expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
498
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
499
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
500
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
501
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
502
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
503
- expect(response.invoicenumber).to eq("12345")
504
- expect(response.timestamp).to be_an_instance_of(Time)
505
- expect(response.to_h).to be_an_instance_of(Hash)
506
- end
507
-
508
- it 'accepts a Hash as parameters' do
509
- params = { "brq_amount" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "J. de Tester", "brq_description" => "Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Collecting", "brq_payer_hash" => "e02377112efcd30bb7420bb1b9855a3778864572", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_service_ideal_consumerbic" => "RABONL2U", "brq_service_ideal_consumeriban" => "NL44RABO0123456789", "brq_service_ideal_consumerissuer" => "Rabobank", "brq_service_ideal_consumername" => "J. de Tester", "brq_statuscode" => "190", "brq_statuscode_detail" => "S001", "brq_statusmessage" => "Transaction successfully processed", "brq_test" => "true", "brq_timestamp" => "2014-11-05 13:10:42", "brq_transaction_method" => "ideal", "brq_transaction_type" => "C021", "brq_transactions" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_websitekey" => "12345678", "brq_signature" => "0a74bba15fccd8094f33678c001b44851643876d" }
510
-
511
- response = subject.callback(params)
512
- expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
513
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
514
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
515
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
516
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
517
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
518
- expect(response.invoicenumber).to eq("12345")
519
- expect(response.timestamp).to be_an_instance_of(Time)
520
- expect(response.to_h).to be_an_instance_of(Hash)
521
- end
522
-
523
- context 'when callback is a payment response' do
524
- it 'sets the success status when payment status is success' do
525
- params = File.read("spec/fixtures/responses/callback_payment_success.txt")
526
-
527
- response = subject.callback(params)
528
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
529
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
530
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
531
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
532
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
533
- expect(response.invoicenumber).to eq("12345")
534
- expect(response.timestamp).to be_an_instance_of(Time)
535
- expect(response.to_h).to be_an_instance_of(Hash)
536
- end
537
-
538
- it 'sets the failed status when payment status is failed' do
539
- params = File.read("spec/fixtures/responses/callback_payment_failed.txt")
540
-
541
- response = subject.callback(params)
542
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::FAILED)
543
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
544
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
545
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
546
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
547
- expect(response.invoicenumber).to eq("12345")
548
- expect(response.timestamp).to be_an_instance_of(Time)
549
- expect(response.to_h).to be_an_instance_of(Hash)
550
- end
551
-
552
- it 'sets the rejected status when payment status is rejected' do
553
- params = File.read("spec/fixtures/responses/callback_payment_rejected.txt")
554
-
555
- response = subject.callback(params)
556
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::REJECTED)
557
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
558
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
559
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
560
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
561
- expect(response.invoicenumber).to eq("12345")
562
- expect(response.timestamp).to be_an_instance_of(Time)
563
- expect(response.to_h).to be_an_instance_of(Hash)
564
- end
565
-
566
- it 'sets the cancelled status when payment status is cancelled' do
567
- params = File.read("spec/fixtures/responses/callback_payment_cancelled.txt")
568
-
569
- response = subject.callback(params)
570
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
571
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
572
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
573
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
574
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
575
- expect(response.invoicenumber).to eq("12345")
576
- expect(response.timestamp).to be_an_instance_of(Time)
577
- expect(response.to_h).to be_an_instance_of(Hash)
578
- end
579
-
580
- it 'sets the pending status when payment status is pending' do
581
- params = File.read("spec/fixtures/responses/callback_payment_pending.txt")
582
-
583
- response = subject.callback(params)
584
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
585
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
586
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
587
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
588
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
589
- expect(response.invoicenumber).to eq("12345")
590
- expect(response.timestamp).to be_an_instance_of(Time)
591
- expect(response.to_h).to be_an_instance_of(Hash)
592
- end
593
-
594
- it 'includes account iban, bic and name for an ideal response' do
595
- params = File.read("spec/fixtures/responses/callback_payment_success.txt")
596
-
597
- response = subject.callback(params)
598
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
599
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
600
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
601
- expect(response.account_iban).to eq("NL44RABO0123456789")
602
- expect(response.account_bic).to eq("RABONL2U")
603
- expect(response.account_name).to eq("J. de Tester")
604
- expect(response.timestamp).to be_an_instance_of(Time)
605
- expect(response.to_h).to be_an_instance_of(Hash)
606
- end
607
-
608
- it 'includes account iban, name, mandate reference and collect date for a sepa direct debit response' do
609
- params = File.read("spec/fixtures/responses/callback_payment_sepa.txt")
610
-
611
- response = subject.callback(params)
612
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
613
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
614
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
615
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
616
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
617
- expect(response.invoicenumber).to eq("12345")
618
- expect(response.account_iban).to eq("NL13TEST0123456789")
619
- expect(response.account_name).to eq("J. Tester")
620
- expect(response.mandate_reference).to eq("012345")
621
- expect(response.collect_date).to eq(Date.new(2014, 11, 13))
622
- expect(response.timestamp).to be_an_instance_of(Time)
623
- expect(response.to_h).to be_an_instance_of(Hash)
624
- end
625
-
626
- it 'returns transaction type payment when cancelling a visa or mastercard transaction (empty transaction type)' do
627
- params = File.read("spec/fixtures/responses/callback_payment_empty_transaction_type.txt")
628
-
629
- response = subject.callback(params)
630
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
631
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
632
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
633
- expect(response.invoicenumber).to eq("12345")
634
- expect(response.timestamp).to be_an_instance_of(Time)
635
- expect(response.to_h).to be_an_instance_of(Hash)
636
- end
637
-
638
- it 'sets the transaction type to payment and payment method to VISA for visa callback' do
639
- params = File.read("spec/fixtures/responses/callback_payment_visa.txt")
640
-
641
- response = subject.callback(params)
642
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
643
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
644
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
645
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
646
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
647
- expect(response.invoicenumber).to eq("12345")
648
- expect(response.timestamp).to be_an_instance_of(Time)
649
- expect(response.to_h).to be_an_instance_of(Hash)
650
- end
651
-
652
- it 'sets the transaction type to payment and payment method to American Express for amex callback' do
653
- params = File.read("spec/fixtures/responses/callback_payment_amex.txt")
654
-
655
- response = subject.callback(params)
656
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
657
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
658
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::AMERICAN_EXPRESS)
659
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
660
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
661
- expect(response.invoicenumber).to eq("12345")
662
- expect(response.timestamp).to be_an_instance_of(Time)
663
- expect(response.to_h).to be_an_instance_of(Hash)
664
- end
665
-
666
- it 'sets the transaction type to payment and payment method to Sofrt for sort callback' do
667
- params = File.read("spec/fixtures/responses/callback_payment_sofort.txt")
668
-
669
- response = subject.callback(params)
670
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
671
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
672
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SOFORT)
673
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
674
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
675
- expect(response.invoicenumber).to eq("12345")
676
- expect(response.timestamp).to be_an_instance_of(Time)
677
- expect(response.to_h).to be_an_instance_of(Hash)
678
- end
679
-
680
- it 'sets the transaction type to payment and payment method to Giropay for giropay callback' do
681
- params = File.read("spec/fixtures/responses/callback_payment_giropay.txt")
682
-
683
- response = subject.callback(params)
684
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
685
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
686
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::GIROPAY)
687
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
688
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
689
- expect(response.invoicenumber).to eq("12345")
690
- expect(response.timestamp).to be_an_instance_of(Time)
691
- end
692
- end
693
-
694
- context 'when callback is a payment recurrent response' do
695
- it 'recognizes a visa payment recurrent response' do
696
- params = File.read("spec/fixtures/responses/callback_recurrent_visa.txt")
697
-
698
- response = subject.callback(params)
699
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
700
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT_RECURRENT)
701
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
702
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
703
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
704
- expect(response.invoicenumber).to eq("12345")
705
- expect(response.timestamp).to be_an_instance_of(Time)
706
- expect(response.to_h).to be_an_instance_of(Hash)
707
- end
708
-
709
- it 'recognizes a sepa direct debit payment recurrent response' do
710
- params = File.read("spec/fixtures/responses/callback_recurrent_sepa.txt")
711
-
712
- response = subject.callback(params)
713
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
714
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT_RECURRENT)
715
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
716
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
717
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
718
- expect(response.invoicenumber).to eq("12345")
719
- expect(response.timestamp).to be_an_instance_of(Time)
720
- expect(response.to_h).to be_an_instance_of(Hash)
721
- end
722
- end
723
-
724
- context 'when callback is a refund response' do
725
- it 'recognizes an ideal refund response' do
726
- params = File.read("spec/fixtures/responses/callback_refund_ideal.txt")
727
-
728
- response = subject.callback(params)
729
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
730
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
731
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
732
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
733
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
734
- expect(response.invoicenumber).to eq("12345")
735
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
736
- expect(response.timestamp).to be_an_instance_of(Time)
737
- expect(response.to_h).to be_an_instance_of(Hash)
738
- end
739
-
740
- it 'recognizes a paypal refund response' do
741
- params = File.read("spec/fixtures/responses/callback_refund_paypal.txt")
742
-
743
- response = subject.callback(params)
744
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
745
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
746
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
747
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
748
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
749
- expect(response.invoicenumber).to eq("12345")
750
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
751
- expect(response.timestamp).to be_an_instance_of(Time)
752
- expect(response.to_h).to be_an_instance_of(Hash)
753
- end
754
-
755
- it 'recognizes an amex refund response' do
756
- params = File.read("spec/fixtures/responses/callback_refund_amex.txt")
757
-
758
- response = subject.callback(params)
759
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
760
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
761
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::AMERICAN_EXPRESS)
762
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
763
- expect(response.payment_id).to be nil
764
- expect(response.invoicenumber).to eq("12345")
765
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
766
- expect(response.timestamp).to be_an_instance_of(Time)
767
- expect(response.to_h).to be_an_instance_of(Hash)
768
- end
769
- end
770
-
771
- context 'when callback is a reversal response' do
772
- it 'recognizes a sepa direct debit reversal response' do
773
- params = File.read("spec/fixtures/responses/callback_reversal_sepa.txt")
774
-
775
- response = subject.callback(params)
776
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
777
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
778
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
779
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
780
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
781
- expect(response.invoicenumber).to eq("12345")
782
- expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
783
- expect(response.timestamp).to be_an_instance_of(Time)
784
- expect(response.to_h).to be_an_instance_of(Hash)
785
- end
786
-
787
- it 'recognizes a paypal reversal response' do
788
- params = File.read("spec/fixtures/responses/callback_reversal_paypal.txt")
789
-
790
- response = subject.callback(params)
791
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
792
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
793
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
794
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
795
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
796
- expect(response.invoicenumber).to eq("12345")
797
- expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
798
- expect(response.timestamp).to be_an_instance_of(Time)
799
- expect(response.to_h).to be_an_instance_of(Hash)
800
- end
801
- end
802
- end
803
- end