buckaruby 1.5.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -46
  3. data/README.md +55 -19
  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 -11
  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 +5 -3
  16. data/lib/buckaruby/version.rb +1 -1
  17. data/lib/buckaruby.rb +1 -2
  18. metadata +16 -95
  19. data/.gitignore +0 -19
  20. data/.rubocop.yml +0 -107
  21. data/.travis.yml +0 -11
  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 -20
  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 -780
  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_pending.txt +0 -1
  40. data/spec/fixtures/responses/callback_payment_rejected.txt +0 -1
  41. data/spec/fixtures/responses/callback_payment_sepa.txt +0 -1
  42. data/spec/fixtures/responses/callback_payment_sofort.txt +0 -1
  43. data/spec/fixtures/responses/callback_payment_success.txt +0 -1
  44. data/spec/fixtures/responses/callback_payment_visa.txt +0 -1
  45. data/spec/fixtures/responses/callback_recurrent_sepa.txt +0 -1
  46. data/spec/fixtures/responses/callback_recurrent_visa.txt +0 -1
  47. data/spec/fixtures/responses/callback_refund_amex.txt +0 -1
  48. data/spec/fixtures/responses/callback_refund_ideal.txt +0 -1
  49. data/spec/fixtures/responses/callback_refund_paypal.txt +0 -1
  50. data/spec/fixtures/responses/callback_reversal_paypal.txt +0 -1
  51. data/spec/fixtures/responses/callback_reversal_sepa.txt +0 -1
  52. data/spec/fixtures/responses/callback_valid_signature.txt +0 -1
  53. data/spec/fixtures/responses/cancel_success.txt +0 -1
  54. data/spec/fixtures/responses/recurrent_transaction_success.txt +0 -1
  55. data/spec/fixtures/responses/refund_info_error.txt +0 -1
  56. data/spec/fixtures/responses/refund_info_success.txt +0 -1
  57. data/spec/fixtures/responses/refund_transaction_success.txt +0 -1
  58. data/spec/fixtures/responses/setup_transaction_success.txt +0 -1
  59. data/spec/fixtures/responses/specify_transaction_success.txt +0 -1
  60. data/spec/fixtures/responses/status_cancellable.txt +0 -1
  61. data/spec/fixtures/responses/status_noncancellable.txt +0 -1
  62. data/spec/fixtures/responses/status_success.txt +0 -1
  63. data/spec/spec_helper.rb +0 -16
@@ -1,780 +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
- context 'with custom variables' do
232
- it 'sends the custom variables with the request' do
233
- 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" })
234
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
235
- expect(response.custom[:foo]).to eq("bar")
236
- expect(response.custom[:quux]).to eq("42")
237
-
238
- expect(WebMock).to have_requested(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
239
- .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=93952aef5786f00f62e4aa33597672845b2ac8dd")
240
- end
241
- end
242
-
243
- context 'with additional variables' do
244
- it 'sends the additional variables with the request' do
245
- 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" })
246
- expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
247
- expect(response.additional[:buckaruby]).to eq("1.2.0")
248
- expect(response.additional[:myreference]).to eq("12345")
249
-
250
- expect(WebMock).to have_requested(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
251
- .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=b7332fefcf5a9aeb02b9c242ef52eaad118e2da4")
252
- end
253
- end
254
- end
255
-
256
- describe '#recurrent_transaction' do
257
- before do
258
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/recurrent_transaction_success.txt"))
259
- end
260
-
261
- it 'raises an exception when initiating a recurrent transaction with missing parameters' do
262
- expect {
263
- subject.recurrent_transaction(amount: 10)
264
- }.to raise_error(ArgumentError)
265
-
266
- expect {
267
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA)
268
- }.to raise_error(ArgumentError)
269
-
270
- expect {
271
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345")
272
- }.to raise_error(ArgumentError)
273
- end
274
-
275
- it 'raises an exception when initiating a transaction with invalid payment method' do
276
- expect {
277
- subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, invoicenumber: "12345", transaction_id: "12345")
278
- }.to raise_error(ArgumentError)
279
- end
280
-
281
- it 'initiates a recurrent transaction for payment method visa' do
282
- response = subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345", transaction_id: "12345")
283
- expect(response).to be_an_instance_of(Buckaruby::RecurrentTransactionResponse)
284
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
285
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
286
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
287
- expect(response.invoicenumber).to eq("12345")
288
- expect(response.timestamp).to be_an_instance_of(Time)
289
- expect(response.to_h).to be_an_instance_of(Hash)
290
- end
291
- end
292
-
293
- describe '#refundable?' do
294
- it 'raises an exception when required parameters are missing' do
295
- expect {
296
- subject.refundable?
297
- }.to raise_error(ArgumentError)
298
- end
299
-
300
- it 'returns true when the transaction is refundable' do
301
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
302
-
303
- response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
304
- expect(response).to be true
305
- end
306
-
307
- it 'returns false when the transaction was not found' do
308
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
309
-
310
- response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
311
- expect(response).to be false
312
- end
313
- end
314
-
315
- describe '#refund_transaction' do
316
- it 'raises an exception when required parameters are missing' do
317
- expect {
318
- subject.refund_transaction
319
- }.to raise_error(ArgumentError)
320
- end
321
-
322
- it 'raises an exception when the transaction is not refundable' do
323
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
324
-
325
- expect {
326
- subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
327
- }.to raise_error(Buckaruby::NonRefundableTransactionException)
328
- end
329
-
330
- it 'refunds the transaction' do
331
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
332
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/refund_transaction_success.txt"))
333
-
334
- response = subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
335
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
336
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
337
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
338
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
339
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
340
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
341
- expect(response.invoicenumber).to eq("12345")
342
- expect(response.timestamp).to be_an_instance_of(Time)
343
- expect(response.to_h).to be_an_instance_of(Hash)
344
- end
345
- end
346
-
347
- describe '#status' do
348
- before do
349
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_success.txt"))
350
- end
351
-
352
- it 'raises an exception when required parameters are missing' do
353
- expect {
354
- subject.status
355
- }.to raise_error(ArgumentError)
356
- end
357
-
358
- it { expect(subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")).to be_an_instance_of(Buckaruby::StatusResponse) }
359
-
360
- it 'returns transaction status' do
361
- response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
362
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
363
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
364
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
365
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
366
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
367
- expect(response.invoicenumber).to eq("12345")
368
- expect(response.timestamp).to be_an_instance_of(Time)
369
- expect(response.to_h).to be_an_instance_of(Hash)
370
- end
371
-
372
- it 'includes account iban, bic and name for an ideal response' do
373
- response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
374
- expect(response.account_iban).to eq("NL44RABO0123456789")
375
- expect(response.account_bic).to eq("RABONL2U")
376
- expect(response.account_name).to eq("J. de Tester")
377
- end
378
- end
379
-
380
- describe '#cancellable?' do
381
- it 'raises an exception when required parameters are missing' do
382
- expect {
383
- subject.cancellable?
384
- }.to raise_error(ArgumentError)
385
- end
386
-
387
- it 'returns true when the transaction is cancellable' do
388
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
389
-
390
- response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
391
- expect(response).to be true
392
- end
393
-
394
- it 'returns false when the transaction is not cancellable' do
395
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
396
-
397
- response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
398
- expect(response).to be false
399
- end
400
- end
401
-
402
- describe '#cancel_transaction' do
403
- it 'raises an exception when required parameters are missing' do
404
- expect {
405
- subject.cancel_transaction
406
- }.to raise_error(ArgumentError)
407
- end
408
-
409
- it 'raises an exception when the transaction is not cancellable' do
410
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
411
-
412
- expect {
413
- subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
414
- }.to raise_error(Buckaruby::NonCancellableTransactionException)
415
- end
416
-
417
- it 'cancels the transaction' do
418
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
419
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=CancelTransaction").to_return(body: File.read("spec/fixtures/responses/cancel_success.txt"))
420
-
421
- response = subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
422
- expect(response).to be_an_instance_of(Buckaruby::CancelResponse)
423
- end
424
- end
425
-
426
- describe '#specify_transaction' do
427
- before do
428
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequestSpecification").to_return(body: File.read("spec/fixtures/responses/specify_transaction_success.txt"))
429
- end
430
-
431
- it 'retrieves the specification for setting up a transaction' do
432
- response = subject.specify_transaction
433
- expect(response).to be_an_instance_of(Buckaruby::TransactionSpecificationResponse)
434
-
435
- services = response.services
436
- expect(services).to be_an_instance_of(Array)
437
- expect(services.length).to eq(2)
438
-
439
- service = services.last
440
- expect(service).to be_an_instance_of(Buckaruby::Support::CaseInsensitiveHash)
441
- expect(service[:name]).to eq(Buckaruby::PaymentMethod::VISA)
442
- expect(service[:description]).to eq("Visa")
443
- expect(service[:version]).to eq("1")
444
-
445
- currencies = service[:supportedcurrencies]
446
- expect(currencies).to be_an_instance_of(Array)
447
- expect(currencies.length).to eq(21)
448
-
449
- currency = currencies.last
450
- expect(currency).to be_an_instance_of(Buckaruby::Support::CaseInsensitiveHash)
451
- expect(currency[:name]).to eq("US Dollar")
452
- expect(currency[:code]).to eq(Buckaruby::Currency::US_DOLLAR)
453
- end
454
- end
455
-
456
- describe '#callback' do
457
- it 'raises an exception when parameters are missing' do
458
- expect {
459
- subject.callback
460
- }.to raise_error(ArgumentError)
461
- end
462
-
463
- it 'raises an exception when parameter is an empty Hash' do
464
- expect {
465
- subject.callback({})
466
- }.to raise_error(ArgumentError)
467
- end
468
-
469
- it 'raises an exception when parameter is an empty String' do
470
- expect {
471
- subject.callback("")
472
- }.to raise_error(ArgumentError)
473
- end
474
-
475
- it 'raises a SignatureException when the signature is invalid' do
476
- params = File.read("spec/fixtures/responses/callback_invalid_signature.txt")
477
-
478
- expect {
479
- subject.callback(params)
480
- }.to raise_error(Buckaruby::SignatureException, "Sent signature (abcdefgh1234567890abcdefgh1234567890) doesn't match generated signature (0a74bba15fccd8094f33678c001b44851643876d)")
481
- end
482
-
483
- it 'returns the status when the signature is valid' do
484
- params = File.read("spec/fixtures/responses/callback_valid_signature.txt")
485
-
486
- response = subject.callback(params)
487
- expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
488
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
489
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
490
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
491
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
492
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
493
- expect(response.invoicenumber).to eq("12345")
494
- expect(response.timestamp).to be_an_instance_of(Time)
495
- expect(response.to_h).to be_an_instance_of(Hash)
496
- end
497
-
498
- it 'accepts a Hash as parameters' do
499
- 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" }
500
-
501
- response = subject.callback(params)
502
- expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
503
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
504
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
505
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
506
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
507
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
508
- expect(response.invoicenumber).to eq("12345")
509
- expect(response.timestamp).to be_an_instance_of(Time)
510
- expect(response.to_h).to be_an_instance_of(Hash)
511
- end
512
-
513
- context 'when callback is a payment response' do
514
- it 'sets the success status when payment status is success' do
515
- params = File.read("spec/fixtures/responses/callback_payment_success.txt")
516
-
517
- response = subject.callback(params)
518
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
519
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
520
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
521
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
522
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
523
- expect(response.invoicenumber).to eq("12345")
524
- expect(response.timestamp).to be_an_instance_of(Time)
525
- expect(response.to_h).to be_an_instance_of(Hash)
526
- end
527
-
528
- it 'sets the failed status when payment status is failed' do
529
- params = File.read("spec/fixtures/responses/callback_payment_failed.txt")
530
-
531
- response = subject.callback(params)
532
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::FAILED)
533
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
534
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
535
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
536
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
537
- expect(response.invoicenumber).to eq("12345")
538
- expect(response.timestamp).to be_an_instance_of(Time)
539
- expect(response.to_h).to be_an_instance_of(Hash)
540
- end
541
-
542
- it 'sets the rejected status when payment status is rejected' do
543
- params = File.read("spec/fixtures/responses/callback_payment_rejected.txt")
544
-
545
- response = subject.callback(params)
546
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::REJECTED)
547
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
548
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
549
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
550
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
551
- expect(response.invoicenumber).to eq("12345")
552
- expect(response.timestamp).to be_an_instance_of(Time)
553
- expect(response.to_h).to be_an_instance_of(Hash)
554
- end
555
-
556
- it 'sets the cancelled status when payment status is cancelled' do
557
- params = File.read("spec/fixtures/responses/callback_payment_cancelled.txt")
558
-
559
- response = subject.callback(params)
560
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
561
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
562
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
563
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
564
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
565
- expect(response.invoicenumber).to eq("12345")
566
- expect(response.timestamp).to be_an_instance_of(Time)
567
- expect(response.to_h).to be_an_instance_of(Hash)
568
- end
569
-
570
- it 'sets the pending status when payment status is pending' do
571
- params = File.read("spec/fixtures/responses/callback_payment_pending.txt")
572
-
573
- response = subject.callback(params)
574
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
575
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
576
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
577
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
578
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
579
- expect(response.invoicenumber).to eq("12345")
580
- expect(response.timestamp).to be_an_instance_of(Time)
581
- expect(response.to_h).to be_an_instance_of(Hash)
582
- end
583
-
584
- it 'includes account iban, bic and name for an ideal response' do
585
- params = File.read("spec/fixtures/responses/callback_payment_success.txt")
586
-
587
- response = subject.callback(params)
588
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
589
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
590
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
591
- expect(response.account_iban).to eq("NL44RABO0123456789")
592
- expect(response.account_bic).to eq("RABONL2U")
593
- expect(response.account_name).to eq("J. de Tester")
594
- expect(response.timestamp).to be_an_instance_of(Time)
595
- expect(response.to_h).to be_an_instance_of(Hash)
596
- end
597
-
598
- it 'includes account iban, name, mandate reference and collect date for a sepa direct debit response' do
599
- params = File.read("spec/fixtures/responses/callback_payment_sepa.txt")
600
-
601
- response = subject.callback(params)
602
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
603
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
604
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
605
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
606
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
607
- expect(response.invoicenumber).to eq("12345")
608
- expect(response.account_iban).to eq("NL13TEST0123456789")
609
- expect(response.account_name).to eq("J. Tester")
610
- expect(response.mandate_reference).to eq("012345")
611
- expect(response.collect_date).to eq(Date.new(2014, 11, 13))
612
- expect(response.timestamp).to be_an_instance_of(Time)
613
- expect(response.to_h).to be_an_instance_of(Hash)
614
- end
615
-
616
- it 'returns transaction type payment when cancelling a visa or mastercard transaction (empty transaction type)' do
617
- params = File.read("spec/fixtures/responses/callback_payment_empty_transaction_type.txt")
618
-
619
- response = subject.callback(params)
620
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
621
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
622
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
623
- expect(response.invoicenumber).to eq("12345")
624
- expect(response.timestamp).to be_an_instance_of(Time)
625
- expect(response.to_h).to be_an_instance_of(Hash)
626
- end
627
-
628
- it 'sets the transaction type to payment and payment method to VISA for visa callback' do
629
- params = File.read("spec/fixtures/responses/callback_payment_visa.txt")
630
-
631
- response = subject.callback(params)
632
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
633
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
634
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
635
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
636
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
637
- expect(response.invoicenumber).to eq("12345")
638
- expect(response.timestamp).to be_an_instance_of(Time)
639
- expect(response.to_h).to be_an_instance_of(Hash)
640
- end
641
-
642
- it 'sets the transaction type to payment and payment method to American Express for amex callback' do
643
- params = File.read("spec/fixtures/responses/callback_payment_amex.txt")
644
-
645
- response = subject.callback(params)
646
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
647
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
648
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::AMERICAN_EXPRESS)
649
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
650
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
651
- expect(response.invoicenumber).to eq("12345")
652
- expect(response.timestamp).to be_an_instance_of(Time)
653
- expect(response.to_h).to be_an_instance_of(Hash)
654
- end
655
-
656
- it 'sets the transaction type to payment and payment method to Sofrt for sort callback' do
657
- params = File.read("spec/fixtures/responses/callback_payment_sofort.txt")
658
-
659
- response = subject.callback(params)
660
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
661
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
662
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SOFORT)
663
- expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
664
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
665
- expect(response.invoicenumber).to eq("12345")
666
- expect(response.timestamp).to be_an_instance_of(Time)
667
- expect(response.to_h).to be_an_instance_of(Hash)
668
- end
669
- end
670
-
671
- context 'when callback is a payment recurrent response' do
672
- it 'recognizes a visa payment recurrent response' do
673
- params = File.read("spec/fixtures/responses/callback_recurrent_visa.txt")
674
-
675
- response = subject.callback(params)
676
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
677
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT_RECURRENT)
678
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
679
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
680
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
681
- expect(response.invoicenumber).to eq("12345")
682
- expect(response.timestamp).to be_an_instance_of(Time)
683
- expect(response.to_h).to be_an_instance_of(Hash)
684
- end
685
-
686
- it 'recognizes a sepa direct debit payment recurrent response' do
687
- params = File.read("spec/fixtures/responses/callback_recurrent_sepa.txt")
688
-
689
- response = subject.callback(params)
690
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
691
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT_RECURRENT)
692
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
693
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
694
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
695
- expect(response.invoicenumber).to eq("12345")
696
- expect(response.timestamp).to be_an_instance_of(Time)
697
- expect(response.to_h).to be_an_instance_of(Hash)
698
- end
699
- end
700
-
701
- context 'when callback is a refund response' do
702
- it 'recognizes an ideal refund response' do
703
- params = File.read("spec/fixtures/responses/callback_refund_ideal.txt")
704
-
705
- response = subject.callback(params)
706
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
707
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
708
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
709
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
710
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
711
- expect(response.invoicenumber).to eq("12345")
712
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
713
- expect(response.timestamp).to be_an_instance_of(Time)
714
- expect(response.to_h).to be_an_instance_of(Hash)
715
- end
716
-
717
- it 'recognizes a paypal refund response' do
718
- params = File.read("spec/fixtures/responses/callback_refund_paypal.txt")
719
-
720
- response = subject.callback(params)
721
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
722
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
723
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
724
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
725
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
726
- expect(response.invoicenumber).to eq("12345")
727
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
728
- expect(response.timestamp).to be_an_instance_of(Time)
729
- expect(response.to_h).to be_an_instance_of(Hash)
730
- end
731
-
732
- it 'recognizes an amex refund response' do
733
- params = File.read("spec/fixtures/responses/callback_refund_amex.txt")
734
-
735
- response = subject.callback(params)
736
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
737
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
738
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::AMERICAN_EXPRESS)
739
- expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
740
- expect(response.payment_id).to be nil
741
- expect(response.invoicenumber).to eq("12345")
742
- expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
743
- expect(response.timestamp).to be_an_instance_of(Time)
744
- expect(response.to_h).to be_an_instance_of(Hash)
745
- end
746
- end
747
-
748
- context 'when callback is a reversal response' do
749
- it 'recognizes a sepa direct debit reversal response' do
750
- params = File.read("spec/fixtures/responses/callback_reversal_sepa.txt")
751
-
752
- response = subject.callback(params)
753
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
754
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
755
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
756
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
757
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
758
- expect(response.invoicenumber).to eq("12345")
759
- expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
760
- expect(response.timestamp).to be_an_instance_of(Time)
761
- expect(response.to_h).to be_an_instance_of(Hash)
762
- end
763
-
764
- it 'recognizes a paypal reversal response' do
765
- params = File.read("spec/fixtures/responses/callback_reversal_paypal.txt")
766
-
767
- response = subject.callback(params)
768
- expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
769
- expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
770
- expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
771
- expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
772
- expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
773
- expect(response.invoicenumber).to eq("12345")
774
- expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
775
- expect(response.timestamp).to be_an_instance_of(Time)
776
- expect(response.to_h).to be_an_instance_of(Hash)
777
- end
778
- end
779
- end
780
- end