buckaruby 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,529 @@
1
+ require 'spec_helper'
2
+
3
+ describe Buckaruby::Gateway do
4
+ describe 'initialization' do
5
+ describe 'bad parameters' do
6
+ it 'should raise an exception when creating a new instance with invalid parameters' do
7
+ expect {
8
+ Buckaruby::Gateway.new
9
+ }.to raise_error(ArgumentError)
10
+
11
+ expect {
12
+ Buckaruby::Gateway.new(website: "12345678")
13
+ }.to raise_error(ArgumentError)
14
+
15
+ expect {
16
+ Buckaruby::Gateway.new(secret: "7C222FB2927D828AF22F592134E8932480637C0D")
17
+ }.to raise_error(ArgumentError)
18
+
19
+ expect {
20
+ Buckaruby::Gateway.new(website: "", secret: "")
21
+ }.to raise_error(ArgumentError)
22
+ end
23
+ end
24
+
25
+ describe 'set mode' do
26
+ it 'should be test when no mode is passed' do
27
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D")
28
+ expect(gateway.options[:mode]).to eq(:test)
29
+ end
30
+
31
+ it 'should be test when mode test is passed' do
32
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :test)
33
+ expect(gateway.options[:mode]).to eq(:test)
34
+ end
35
+
36
+ it 'should be production when mode production is passed' do
37
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :production)
38
+ expect(gateway.options[:mode]).to eq(:production)
39
+ end
40
+
41
+ it 'should raise an exception when an invalid mode is passed' do
42
+ expect {
43
+ Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :invalid)
44
+ }.to raise_error(ArgumentError)
45
+ end
46
+ end
47
+
48
+ describe 'set hash method' do
49
+ it 'should raise an exception when an invalid hash method is passed' do
50
+ expect {
51
+ Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :invalid)
52
+ }.to raise_error(ArgumentError)
53
+ end
54
+
55
+ it 'should accept SHA-1 as hash method' do
56
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: 'SHA1')
57
+ expect(gateway.options[:hash_method]).to eq(:sha1)
58
+ end
59
+
60
+ it 'should accept SHA-256 as hash method' do
61
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :SHA256)
62
+ expect(gateway.options[:hash_method]).to eq(:sha256)
63
+ end
64
+
65
+ it 'should accept SHA-512 as hash method' do
66
+ gateway = Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :sha512)
67
+ expect(gateway.options[:hash_method]).to eq(:sha512)
68
+ end
69
+ end
70
+ end
71
+
72
+ subject { Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D") }
73
+
74
+ it { expect(subject).to be_an_instance_of(Buckaruby::Gateway) }
75
+
76
+ describe 'get issuers' do
77
+ context 'when no or false parameters are passed' do
78
+ it 'should raise an ArgumentError' do
79
+ expect { subject.issuers }.to raise_error(ArgumentError)
80
+ expect { subject.issuers(:wrong) }.to raise_error(ArgumentError)
81
+ end
82
+ end
83
+
84
+ context 'when ideal is passed' do
85
+ let(:issuers) { subject.issuers(Buckaruby::PaymentMethod::IDEAL) }
86
+ it { expect(issuers.length).to be > 0 }
87
+ it { expect(issuers).to include("INGBNL2A" => "ING") }
88
+ end
89
+
90
+ context 'when visa, mastercard, sepa direct debit, paypal or is passed' do
91
+ it 'should raise an ArgumentError' do
92
+ expect { subject.issuers(Buckaruby::PaymentMethod::VISA) }.to raise_error(ArgumentError)
93
+ expect { subject.issuers(Buckaruby::PaymentMethod::MASTER_CARD) }.to raise_error(ArgumentError)
94
+ expect { subject.issuers(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT) }.to raise_error(ArgumentError)
95
+ expect { subject.issuers(Buckaruby::PaymentMethod::PAYPAL) }.to raise_error(ArgumentError)
96
+ end
97
+ end
98
+ end
99
+
100
+ describe 'initiate transaction' do
101
+ before(:each) do
102
+ request = Buckaruby::SetupTransactionRequest.new(subject.options)
103
+ allow(request).to receive(:post_buckaroo).and_return("BRQ_ACTIONREQUIRED=redirect&BRQ_AMOUNT=10.00&BRQ_APIRESULT=ActionRequired&BRQ_CURRENCY=EUR&BRQ_DESCRIPTION=Test&BRQ_INVOICENUMBER=12345&BRQ_PAYMENT=12345&BRQ_PAYMENT_METHOD=ideal&BRQ_REDIRECTURL=https%3A%2F%2Ftestcheckout.buckaroo.nl%2Fhtml%2Fredirect.ashx%3Fr%3D41C48B55FA9164E123CC73B1157459E840BE5D24&BRQ_SERVICE_IDEAL_CONSUMERISSUER=Rabobank&BRQ_STATUSCODE=791&BRQ_STATUSCODE_DETAIL=S002&BRQ_STATUSMESSAGE=An+additional+action+is+required%3A+RedirectToIdeal&BRQ_TEST=true&BRQ_TIMESTAMP=2014-11-05+13%3A10%3A40&BRQ_TRANSACTIONS=41C48B55FA9164E123CC73B1157459E840BE5D24&BRQ_WEBSITEKEY=12345678&BRQ_SIGNATURE=3d6ef7e249d9509d120c7b84f27f081adf06074b")
104
+ allow(subject).to receive(:build_request).and_return(request)
105
+ end
106
+
107
+ it 'should raise an exception when initiating a transaction with missing parameters' do
108
+ expect {
109
+ subject.setup_transaction(amount: 10)
110
+ }.to raise_error(ArgumentError)
111
+
112
+ expect {
113
+ subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL)
114
+ }.to raise_error(ArgumentError)
115
+
116
+ expect {
117
+ subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first)
118
+ }.to raise_error(ArgumentError)
119
+
120
+ expect {
121
+ subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345")
122
+ }.to raise_error(ArgumentError)
123
+ end
124
+
125
+ it 'should raise an exception when initiating a transaction with invalid amount' do
126
+ expect {
127
+ 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/")
128
+ }.to raise_error(ArgumentError)
129
+
130
+ expect {
131
+ 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/")
132
+ }.to raise_error(ArgumentError)
133
+ end
134
+
135
+ it 'should raise an exception when initiating a transaction with invalid payment method' do
136
+ expect {
137
+ subject.setup_transaction(amount: 10, payment_method: "abc", payment_issuer: Buckaruby::Ideal::ISSUERS.keys.first, invoicenumber: "12345", return_url: "http://www.return.url/")
138
+ }.to raise_error(ArgumentError)
139
+ end
140
+
141
+ it 'should raise an exception when initiating a transaction with invalid payment issuer' do
142
+ expect {
143
+ subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, payment_issuer: "abc", invoicenumber: "12345", return_url: "http://www.return.url/")
144
+ }.to raise_error(ArgumentError)
145
+ end
146
+
147
+ it 'should raise an exception when API result Fail is returned' do
148
+ request = Buckaruby::SetupTransactionRequest.new(subject.options)
149
+ allow(request).to receive(:post_buckaroo).and_return("BRQ_APIRESULT=Fail&BRQ_APIERRORMESSAGE=Invalid+request")
150
+ allow(subject).to receive(:build_request).and_return(request)
151
+
152
+ expect {
153
+ 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/")
154
+ }.to raise_error(Buckaruby::ApiException)
155
+ end
156
+
157
+ describe 'should initiate a transaction when amount is integer, decimal or string' do
158
+ context 'when amount is an integer' do
159
+ 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/") }
160
+ it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
161
+ it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
162
+ it { expect(response.redirect_url).to be }
163
+ end
164
+
165
+ context 'when amount is a decimal' do
166
+ 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/") }
167
+ it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
168
+ it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
169
+ it { expect(response.redirect_url).to be }
170
+ end
171
+
172
+ context 'when amount is a string' do
173
+ 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/") }
174
+ it { expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse) }
175
+ it { expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24") }
176
+ it { expect(response.redirect_url).to be }
177
+ end
178
+ end
179
+
180
+ it 'should initiate a transaction for payment method ideal' do
181
+ 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/")
182
+ expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
183
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
184
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
185
+ expect(response.redirect_url).to be
186
+ expect(response.timestamp).to be_an_instance_of(Time)
187
+ expect(response.to_h).to be_an_instance_of(Hash)
188
+ end
189
+
190
+ it 'should initiate a transaction for payment method visa' do
191
+ response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345", return_url: "http://www.return.url/")
192
+ expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
193
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
194
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
195
+ expect(response.redirect_url).to be
196
+ expect(response.timestamp).to be_an_instance_of(Time)
197
+ expect(response.to_h).to be_an_instance_of(Hash)
198
+ end
199
+
200
+ it 'should initiate a transaction for payment method mastercard' do
201
+ response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::MASTER_CARD, invoicenumber: "12345", return_url: "http://www.return.url/")
202
+ expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
203
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
204
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
205
+ expect(response.redirect_url).to be
206
+ expect(response.timestamp).to be_an_instance_of(Time)
207
+ expect(response.to_h).to be_an_instance_of(Hash)
208
+ end
209
+
210
+ it 'should initiate a transaction for payment method sepa direct debit' do
211
+ 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")
212
+ expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
213
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
214
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
215
+ expect(response.timestamp).to be_an_instance_of(Time)
216
+ expect(response.to_h).to be_an_instance_of(Hash)
217
+ end
218
+
219
+ it 'should initiate a transaction for payment method paypal' do
220
+ response = subject.setup_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::PAYPAL, invoicenumber: "12345", return_url: "http://www.return.url/")
221
+ expect(response).to be_an_instance_of(Buckaruby::SetupTransactionResponse)
222
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
223
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
224
+ expect(response.redirect_url).to be
225
+ expect(response.timestamp).to be_an_instance_of(Time)
226
+ expect(response.to_h).to be_an_instance_of(Hash)
227
+ end
228
+ end
229
+
230
+ describe 'initiate recurrent transaction' do
231
+ before(:each) do
232
+ request = Buckaruby::RecurrentTransactionRequest.new(subject.options)
233
+ allow(request).to receive(:post_buckaroo).and_return("BRQ_AMOUNT=10.00&BRQ_APIRESULT=Success&BRQ_CURRENCY=EUR&BRQ_CUSTOMER_NAME=Test&BRQ_DESCRIPTION=Test&BRQ_INVOICENUMBER=12345&BRQ_ISSUING_COUNTRY=IE&BRQ_PAYMENT=8EE820309AA9455C91350DD5D3160362&BRQ_PAYMENT_METHOD=visa&BRQ_RECURRING=True&BRQ_SERVICE_VISA_CARDEXPIRATIONDATE=2016-01&BRQ_SERVICE_VISA_CARDNUMBERENDING=0969&BRQ_SERVICE_VISA_MASKEDCARDNUMBER=491611%2A%2A%2A%2A%2A%2A0969&BRQ_STATUSCODE=190&BRQ_STATUSCODE_DETAIL=S001&BRQ_STATUSMESSAGE=Transaction+successfully+processed&BRQ_TEST=true&BRQ_TIMESTAMP=2016-01-19+15%3A13%3A44&BRQ_TRANSACTIONS=41C48B55FA9164E123CC73B1157459E840BE5D24&BRQ_WEBSITEKEY=12345678&BRQ_SIGNATURE=b6a5a54c7e0d731f211c2080519e7aabc9775f47")
234
+ allow(subject).to receive(:build_request).and_return(request)
235
+ end
236
+
237
+ it 'should raise an exception when initiating a recurrent transaction with missing parameters' do
238
+ expect {
239
+ subject.recurrent_transaction(amount: 10)
240
+ }.to raise_error(ArgumentError)
241
+
242
+ expect {
243
+ subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA)
244
+ }.to raise_error(ArgumentError)
245
+
246
+ expect {
247
+ subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345")
248
+ }.to raise_error(ArgumentError)
249
+ end
250
+
251
+ it 'should raise an exception when initiating a transaction with invalid payment method' do
252
+ expect {
253
+ subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::IDEAL, invoicenumber: "12345", transaction_id: "12345")
254
+ }.to raise_error(ArgumentError)
255
+ end
256
+
257
+ it 'should initiate a recurrent transaction for payment method visa' do
258
+ response = subject.recurrent_transaction(amount: 10, payment_method: Buckaruby::PaymentMethod::VISA, invoicenumber: "12345", transaction_id: "12345")
259
+ expect(response).to be_an_instance_of(Buckaruby::RecurrentTransactionResponse)
260
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
261
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
262
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
263
+ expect(response.invoicenumber).to eq("12345")
264
+ expect(response.timestamp).to be_an_instance_of(Time)
265
+ expect(response.to_h).to be_an_instance_of(Hash)
266
+ end
267
+ end
268
+
269
+ describe 'get transaction status' do
270
+ before(:each) do
271
+ request = Buckaruby::StatusRequest.new(subject.options)
272
+ allow(request).to receive(:post_buckaroo).and_return("BRQ_AMOUNT=10.00&BRQ_APIRESULT=Success&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=ING&BRQ_SERVICE_IDEAL_CONSUMERNAME=J.+de+Tester&BRQ_STATUSCODE=190&BRQ_STATUSCODE_DETAIL=S001&BRQ_STATUSMESSAGE=Transaction+successfully+processed&BRQ_TEST=true&BRQ_TIMESTAMP=2015-02-16+13%3A25%3A58&BRQ_TRANSACTION_CANCELABLE=False&BRQ_TRANSACTION_METHOD=ideal&BRQ_TRANSACTION_TYPE=C021&BRQ_TRANSACTIONS=41C48B55FA9164E123CC73B1157459E840BE5D24&BRQ_WEBSITEKEY=12345678&BRQ_SIGNATURE=b92de342cc863acd0c46ed3c8cb6add87668e22f")
273
+ allow(subject).to receive(:build_request).and_return(request)
274
+ end
275
+
276
+ it 'should raise an exception when initiating a transaction with missing parameters' do
277
+ expect {
278
+ subject.status
279
+ }.to raise_error(ArgumentError)
280
+ end
281
+
282
+ it { expect(subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")).to be_an_instance_of(Buckaruby::StatusResponse) }
283
+
284
+ it 'should return transaction status' do
285
+ response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
286
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
287
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
288
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
289
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
290
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
291
+ expect(response.invoicenumber).to eq("12345")
292
+ expect(response.timestamp).to be_an_instance_of(Time)
293
+ expect(response.to_h).to be_an_instance_of(Hash)
294
+ end
295
+
296
+ it 'should include account iban, bic and name for an ideal response' do
297
+ response = subject.status(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
298
+ expect(response.account_iban).to eq("NL44RABO0123456789")
299
+ expect(response.account_bic).to eq("RABONL2U")
300
+ expect(response.account_name).to eq("J. de Tester")
301
+ end
302
+ end
303
+
304
+ describe 'verifying payment response' do
305
+ it 'should raise an exception when parameters are invalid' do
306
+ expect {
307
+ subject.callback
308
+ }.to raise_error(ArgumentError)
309
+ end
310
+
311
+ it 'should raise an exception when signature is invalid' do
312
+ 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" => "abcdefgh1234567890abcdefgh1234567890" }
313
+
314
+ expect {
315
+ subject.callback(params)
316
+ }.to raise_error(Buckaruby::SignatureException)
317
+ end
318
+
319
+ it 'should return the status when signature is valid' do
320
+ 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" }
321
+
322
+ response = subject.callback(params)
323
+ expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
324
+ expect(response.transaction_status).to be
325
+ expect(response.transaction_type).to be
326
+ expect(response.payment_method).to be
327
+ expect(response.payment_id).to be
328
+ expect(response.invoicenumber).to be
329
+ expect(response.timestamp).to be_an_instance_of(Time)
330
+ expect(response.to_h).to be_an_instance_of(Hash)
331
+ end
332
+
333
+ context 'payment response' do
334
+ it 'should set the success status when payment status is success' do
335
+ 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" }
336
+
337
+ response = subject.callback(params)
338
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
339
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
340
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
341
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
342
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
343
+ expect(response.invoicenumber).to eq("12345")
344
+ expect(response.timestamp).to be_an_instance_of(Time)
345
+ expect(response.to_h).to be_an_instance_of(Hash)
346
+ end
347
+
348
+ it 'should set the failed status when payment status is failed' do
349
+ 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" => "490", "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" => "7e1957cea05cab55aa6e29c36182f9eed6a9984b" }
350
+
351
+ response = subject.callback(params)
352
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::FAILED)
353
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
354
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
355
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
356
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
357
+ expect(response.invoicenumber).to eq("12345")
358
+ expect(response.timestamp).to be_an_instance_of(Time)
359
+ expect(response.to_h).to be_an_instance_of(Hash)
360
+ end
361
+
362
+ it 'should set the rejected status when payment status is rejected' do
363
+ 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" => "690", "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" => "ec7b055655f95a23308ed30c085cd65dedccc197" }
364
+
365
+ response = subject.callback(params)
366
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::REJECTED)
367
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
368
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
369
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
370
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
371
+ expect(response.invoicenumber).to eq("12345")
372
+ expect(response.timestamp).to be_an_instance_of(Time)
373
+ expect(response.to_h).to be_an_instance_of(Hash)
374
+ end
375
+
376
+ it 'should set the cancelled status when payment status is cancelled' do
377
+ 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" => "890", "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" => "71cc4d8a49e4062c6d394201f39f4b81b5a39026" }
378
+
379
+ response = subject.callback(params)
380
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
381
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
382
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
383
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
384
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
385
+ expect(response.invoicenumber).to eq("12345")
386
+ expect(response.timestamp).to be_an_instance_of(Time)
387
+ expect(response.to_h).to be_an_instance_of(Hash)
388
+ end
389
+
390
+ it 'should set the pending status when payment status is pending' do
391
+ 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" => "790", "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" => "3e166e22a7ab5880b7424d5614a7fb227d8a7770" }
392
+
393
+ response = subject.callback(params)
394
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
395
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
396
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
397
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
398
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
399
+ expect(response.invoicenumber).to eq("12345")
400
+ expect(response.timestamp).to be_an_instance_of(Time)
401
+ expect(response.to_h).to be_an_instance_of(Hash)
402
+ end
403
+
404
+ it 'should include account iban, bic and name for an ideal response' do
405
+ 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" }
406
+
407
+ response = subject.callback(params)
408
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
409
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
410
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
411
+ expect(response.account_iban).to eq("NL44RABO0123456789")
412
+ expect(response.account_bic).to eq("RABONL2U")
413
+ expect(response.account_name).to eq("J. de Tester")
414
+ expect(response.timestamp).to be_an_instance_of(Time)
415
+ expect(response.to_h).to be_an_instance_of(Hash)
416
+ end
417
+
418
+ it 'should include account iban, name, mandate reference and collect date for a sepa direct debit response' do
419
+ params = { "brq_amount" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "J. Tester", "brq_description" => "Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Collecting", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_service_sepadirectdebit_collectdate" => "2014-11-13", "brq_service_sepadirectdebit_customeriban" => "NL13TEST0123456789", "brq_service_sepadirectdebit_directdebittype" => "OneOff", "brq_service_sepadirectdebit_mandatedate" => "2014-11-05", "brq_service_sepadirectdebit_mandatereference" => "012345", "brq_statuscode" => "791", "brq_statuscode_detail" => "C620", "brq_statusmessage" => "Awaiting transfer to bank.", "brq_test" => "true", "brq_timestamp" => "2014-11-05 13:45:18", "brq_transaction_method" => "SepaDirectDebit", "brq_transaction_type" => "C004", "brq_transactions" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_websitekey" => "12345678", "brq_signature" => "bcb7924473707d3b7067eb566cd6956dcf354d4c" }
420
+
421
+ response = subject.callback(params)
422
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
423
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
424
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
425
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
426
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
427
+ expect(response.invoicenumber).to eq("12345")
428
+ expect(response.account_iban).to eq("NL13TEST0123456789")
429
+ expect(response.account_name).to eq("J. Tester")
430
+ expect(response.mandate_reference).to eq("012345")
431
+ expect(response.collect_date).to eq(Date.new(2014, 11, 13))
432
+ expect(response.timestamp).to be_an_instance_of(Time)
433
+ expect(response.to_h).to be_an_instance_of(Hash)
434
+ end
435
+
436
+ it 'should return transaction type payment when cancelling a visa or mastercard transaction (empty transaction type)' do
437
+ params = { "brq_amount" => "10.00", "brq_currency" => "EUR", "brq_description" => "Test cancel", "brq_invoicenumber" => "12345", "brq_mutationtype" => "NotSet", "brq_statuscode" => "890", "brq_statusmessage" => "Cancelled by user", "brq_test" => "false", "brq_timestamp" => "2015-01-27 10:26:42", "brq_transaction_type" => "", "brq_transactions" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_websitekey" => "12345678", "brq_signature" => "9bf412565dfd7399245975a132f649caa7d1d66f" }
438
+
439
+ response = subject.callback(params)
440
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
441
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
442
+ expect(response.transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
443
+ expect(response.invoicenumber).to eq("12345")
444
+ expect(response.timestamp).to be_an_instance_of(Time)
445
+ expect(response.to_h).to be_an_instance_of(Hash)
446
+ end
447
+ end
448
+
449
+ context 'payment recurrent response' do
450
+ it 'should recognize a sepa direct debit payment recurrent response' do
451
+ params = { "brq_amount" => "1.00", "brq_currency" => "EUR", "brq_customer_name" => "J. Tester", "brq_description" => "Recurrent: Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Collecting", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_recurring" => "True", "brq_SERVICE_sepadirectdebit_CollectDate" => "2016-09-16", "brq_SERVICE_sepadirectdebit_CustomerIBAN" => "NL13TEST0123456789", "brq_SERVICE_sepadirectdebit_DirectDebitType" => "First", "brq_SERVICE_sepadirectdebit_MandateDate" => "2016-09-07", "brq_SERVICE_sepadirectdebit_MandateReference" => "e1a31b3e461ab74cdbacf16bccd5290f9a284618", "brq_statuscode" => "190", "brq_statusmessage" => "Success", "brq_test" => "false", "brq_timestamp" => "2016-09-16 00:26:03", "brq_transaction_method" => "SepaDirectDebit", "brq_transaction_type" => "C005", "brq_transactions" => "B51118F58785274E117EFE1BF99D4D50CCB96949", "brq_websitekey" => "12345678", "brq_signature" => "851d0eacc314ceb9070abeb83d1853270459d81a" }
452
+
453
+ response = subject.callback(params)
454
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
455
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT_RECURRENT)
456
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
457
+ expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
458
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
459
+ expect(response.invoicenumber).to eq("12345")
460
+ expect(response.timestamp).to be_an_instance_of(Time)
461
+ expect(response.to_h).to be_an_instance_of(Hash)
462
+ end
463
+ end
464
+
465
+ context 'refund response' do
466
+ it 'should recognize an ideal refund response' do
467
+ params = { "brq_amount_credit" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "J. de Tester", "brq_description" => "Refund: Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Collecting", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_relatedtransaction_refund" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_service_ideal_customeraccountname" => "J. de Tester", "brq_service_ideal_customerbic" => "RABONL2U", "brq_service_ideal_customeriban" => "NL44RABO0123456789", "brq_statuscode" => "190", "brq_statuscode_detail" => "S001", "brq_statusmessage" => "Transaction successfully processed", "brq_test" => "true", "brq_timestamp" => "2014-11-06 15:27:31", "brq_transaction_method" => "ideal", "brq_transaction_type" => "C121", "brq_transactions" => "B51118F58785274E117EFE1BF99D4D50CCB96949", "brq_websitekey" => "12345678", "brq_signature" => "395bacf2bb5231501b94b3d22996f4f61c013f4b" }
468
+
469
+ response = subject.callback(params)
470
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
471
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
472
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
473
+ expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
474
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
475
+ expect(response.invoicenumber).to eq("12345")
476
+ expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
477
+ expect(response.timestamp).to be_an_instance_of(Time)
478
+ expect(response.to_h).to be_an_instance_of(Hash)
479
+ end
480
+
481
+ it 'should recognize a paypal refund response' do
482
+ params = { "brq_amount_credit" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "J. Tester", "brq_description" => "Refund: Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Processing", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_relatedtransaction_refund" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_statuscode" => "190", "brq_statuscode_detail" => "S001", "brq_statusmessage" => "Transaction successfully processed", "brq_test" => "false", "brq_timestamp" => "2014-11-06 15:04:20", "brq_transaction_method" => "paypal", "brq_transaction_type" => "V110", "brq_transactions" => "B51118F58785274E117EFE1BF99D4D50CCB96949", "brq_websitekey" => "12345678", "brq_signature" => "da55998b9681cc9d10f983e21f44c0510b474c12" }
483
+
484
+ response = subject.callback(params)
485
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
486
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::REFUND)
487
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
488
+ expect(response.transaction_id).to eq("B51118F58785274E117EFE1BF99D4D50CCB96949")
489
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
490
+ expect(response.invoicenumber).to eq("12345")
491
+ expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
492
+ expect(response.timestamp).to be_an_instance_of(Time)
493
+ expect(response.to_h).to be_an_instance_of(Hash)
494
+ end
495
+ end
496
+
497
+ context 'reversal response' do
498
+ it 'should recognize a sepa direct debit reversal response' do
499
+ params = { "brq_amount_credit" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "J. Tester", "brq_description" => "Reversal: Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Collecting", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_relatedtransaction_reversal" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_service_sepadirectdebit_reasoncode" => "MD06", "brq_service_sepadirectdebit_reasonexplanation" => "Debtor uses 8 weeks reversal right", "brq_statuscode" => "190", "brq_statusmessage" => "Success", "brq_test" => "false", "brq_timestamp" => "2014-11-28 03:37:48", "brq_transaction_method" => "SepaDirectDebit", "brq_transaction_type" => "C501", "brq_transactions" => "8CCE4BB06339F28A506E1A328025D7DF13CCAD59", "brq_websitekey" => "12345678", "brq_signature" => "4b8ccf699dadca7465510ba94a59fa9d7b5b050a" }
500
+
501
+ response = subject.callback(params)
502
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
503
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
504
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT)
505
+ expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
506
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
507
+ expect(response.invoicenumber).to eq("12345")
508
+ expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
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
+ it 'should recognize a paypal reversal response' do
514
+ params = { "brq_amount_credit" => "15.40", "brq_currency" => "EUR", "brq_customer_name" => "J. Tester", "brq_description" => "Reversal: Test", "brq_invoicenumber" => "12345", "brq_mutationtype" => "Processing", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_relatedtransaction_reversal" => "41C48B55FA9164E123CC73B1157459E840BE5D24", "brq_statuscode" => "190", "brq_statusmessage" => "Success", "brq_test" => "false", "brq_timestamp" => "2015-12-12 08:26:46", "brq_transaction_method" => "paypal", "brq_transaction_type" => "V111", "brq_transactions" => "8CCE4BB06339F28A506E1A328025D7DF13CCAD59", "brq_websitekey" => "12345678", "brq_signature" => "124f1a2bdfbd952a8d909d45cce421b6734a2c41" }
515
+
516
+ response = subject.callback(params)
517
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
518
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::REVERSAL)
519
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::PAYPAL)
520
+ expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
521
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
522
+ expect(response.invoicenumber).to eq("12345")
523
+ expect(response.reversal_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
524
+ expect(response.timestamp).to be_an_instance_of(Time)
525
+ expect(response.to_h).to be_an_instance_of(Hash)
526
+ end
527
+ end
528
+ end
529
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe Buckaruby::Iban do
4
+ describe 'calculate_iban' do
5
+ describe 'bad initialization' do
6
+ it 'should raise an exception when account number is not supplied' do
7
+ expect {
8
+ Buckaruby::Iban.calculate_iban(nil, 'INGB')
9
+ }.to raise_error(ArgumentError)
10
+ end
11
+
12
+ it 'should raise an exception when account number is empty' do
13
+ expect {
14
+ Buckaruby::Iban.calculate_iban('', 'INGB')
15
+ }.to raise_error(ArgumentError)
16
+ end
17
+
18
+ it 'should raise an exception when bank code is not supplied' do
19
+ expect {
20
+ Buckaruby::Iban.calculate_iban('555', nil)
21
+ }.to raise_error(ArgumentError)
22
+ end
23
+
24
+ it 'should raise an exception when bank code is empty' do
25
+ expect {
26
+ Buckaruby::Iban.calculate_iban('555', '')
27
+ }.to raise_error(ArgumentError)
28
+ end
29
+
30
+ it 'should raise an exception when country code is not supplied' do
31
+ expect {
32
+ Buckaruby::Iban.calculate_iban('555', 'INGB', '')
33
+ }.to raise_error(ArgumentError)
34
+ end
35
+
36
+ it 'should raise an exception when country code is invalid' do
37
+ expect {
38
+ Buckaruby::Iban.calculate_iban('555', 'INGB', 'TEST')
39
+ }.to raise_error(ArgumentError)
40
+ end
41
+ end
42
+
43
+ it 'should calculate an IBAN for account number 1234 with ING bank' do
44
+ iban = Buckaruby::Iban.calculate_iban('1234', 'INGB')
45
+ expect(iban).to eq('NL08INGB0000001234')
46
+ end
47
+
48
+ it 'should calculate an IBAN for account number 1234567 with ING bank' do
49
+ iban = Buckaruby::Iban.calculate_iban('1234567', 'INGB')
50
+ expect(iban).to eq('NL20INGB0001234567')
51
+ end
52
+
53
+ it 'should calculate an IBAN for account number 55505 with ING bank' do
54
+ iban = Buckaruby::Iban.calculate_iban('55505', 'INGB')
55
+ expect(iban).to eq('NL70INGB0000055505')
56
+ end
57
+
58
+ it 'should calculate an IBAN for account number 395222419 with Rabobank' do
59
+ iban = Buckaruby::Iban.calculate_iban('395222419', 'RABO')
60
+ expect(iban).to eq('NL25RABO0395222419')
61
+ end
62
+
63
+ it 'should calculate an IBAN for account number 707070406 with ABN Amro' do
64
+ iban = Buckaruby::Iban.calculate_iban('707070406', 'ABNA')
65
+ expect(iban).to eq('NL87ABNA0707070406')
66
+ end
67
+
68
+ it 'should calculate an IBAN for account number 254668844 with Triodos bank' do
69
+ iban = Buckaruby::Iban.calculate_iban('254668844', 'TRIO')
70
+ expect(iban).to eq('NL56TRIO0254668844')
71
+ end
72
+ end
73
+ end