buckaruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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