buckaruby 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +49 -0
- data/.travis.yml +6 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +137 -0
- data/Rakefile +8 -0
- data/buckaruby.gemspec +26 -0
- data/lib/buckaruby/action.rb +7 -0
- data/lib/buckaruby/currency.rb +5 -0
- data/lib/buckaruby/exception.rb +54 -0
- data/lib/buckaruby/gateway.rb +204 -0
- data/lib/buckaruby/iban.rb +25 -0
- data/lib/buckaruby/ideal.rb +16 -0
- data/lib/buckaruby/language.rb +8 -0
- data/lib/buckaruby/operation.rb +6 -0
- data/lib/buckaruby/payment_method.rb +14 -0
- data/lib/buckaruby/request.rb +193 -0
- data/lib/buckaruby/response.rb +198 -0
- data/lib/buckaruby/signature.rb +30 -0
- data/lib/buckaruby/support/case_insensitive_hash.rb +35 -0
- data/lib/buckaruby/transaction_status.rb +9 -0
- data/lib/buckaruby/transaction_type.rb +8 -0
- data/lib/buckaruby/urls.rb +6 -0
- data/lib/buckaruby/version.rb +3 -0
- data/lib/buckaruby.rb +20 -0
- data/spec/buckaruby/gateway_spec.rb +529 -0
- data/spec/buckaruby/iban_spec.rb +73 -0
- data/spec/buckaruby/signature_spec.rb +62 -0
- data/spec/buckaruby/support/case_insensitive_hash_spec.rb +72 -0
- data/spec/spec_helper.rb +11 -0
- metadata +129 -0
@@ -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
|