buckaruby 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +20 -4
  3. data/.travis.yml +7 -3
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +3 -1
  6. data/README.md +58 -4
  7. data/Rakefile +2 -0
  8. data/buckaruby.gemspec +1 -1
  9. data/lib/buckaruby.rb +3 -1
  10. data/lib/buckaruby/action.rb +3 -0
  11. data/lib/buckaruby/configuration.rb +73 -0
  12. data/lib/buckaruby/currency.rb +4 -0
  13. data/lib/buckaruby/exception.rb +26 -0
  14. data/lib/buckaruby/gateway.rb +99 -45
  15. data/lib/buckaruby/iban.rb +2 -0
  16. data/lib/buckaruby/ideal.rb +5 -2
  17. data/lib/buckaruby/language.rb +2 -0
  18. data/lib/buckaruby/operation.rb +4 -0
  19. data/lib/buckaruby/payment_method.rb +5 -1
  20. data/lib/buckaruby/request.rb +70 -27
  21. data/lib/buckaruby/response.rb +106 -37
  22. data/lib/buckaruby/signature.rb +8 -9
  23. data/lib/buckaruby/support/case_insensitive_hash.rb +2 -0
  24. data/lib/buckaruby/transaction_status.rb +2 -0
  25. data/lib/buckaruby/transaction_type.rb +2 -0
  26. data/lib/buckaruby/version.rb +3 -1
  27. data/spec/buckaruby/configuration_spec.rb +113 -0
  28. data/spec/buckaruby/gateway_spec.rb +165 -83
  29. data/spec/buckaruby/iban_spec.rb +2 -0
  30. data/spec/buckaruby/signature_spec.rb +38 -17
  31. data/spec/buckaruby/support/case_insensitive_hash_spec.rb +2 -0
  32. data/spec/fixtures/responses/callback_invalid_signature.txt +1 -0
  33. data/spec/fixtures/responses/callback_payment_cancelled.txt +1 -0
  34. data/spec/fixtures/responses/callback_payment_empty_transaction_type.txt +1 -0
  35. data/spec/fixtures/responses/callback_payment_failed.txt +1 -0
  36. data/spec/fixtures/responses/callback_payment_pending.txt +1 -0
  37. data/spec/fixtures/responses/callback_payment_rejected.txt +1 -0
  38. data/spec/fixtures/responses/callback_payment_sepa.txt +1 -0
  39. data/spec/fixtures/responses/callback_payment_success.txt +1 -0
  40. data/spec/fixtures/responses/callback_recurrent_sepa.txt +1 -0
  41. data/spec/fixtures/responses/callback_recurrent_visa.txt +1 -0
  42. data/spec/fixtures/responses/callback_refund_ideal.txt +1 -0
  43. data/spec/fixtures/responses/callback_refund_paypal.txt +1 -0
  44. data/spec/fixtures/responses/callback_reversal_paypal.txt +1 -0
  45. data/spec/fixtures/responses/callback_reversal_sepa.txt +1 -0
  46. data/spec/fixtures/responses/callback_valid_signature.txt +1 -0
  47. data/spec/fixtures/responses/cancel_success.txt +1 -0
  48. data/spec/fixtures/responses/recurrent_transaction_success.txt +1 -0
  49. data/spec/fixtures/responses/refund_info_error.txt +1 -0
  50. data/spec/fixtures/responses/refund_info_success.txt +1 -0
  51. data/spec/fixtures/responses/refund_transaction_success.txt +1 -0
  52. data/spec/fixtures/responses/setup_transaction_success.txt +1 -0
  53. data/spec/fixtures/responses/status_cancellable.txt +1 -0
  54. data/spec/fixtures/responses/status_noncancellable.txt +1 -0
  55. data/spec/fixtures/responses/status_success.txt +1 -0
  56. data/spec/spec_helper.rb +2 -0
  57. metadata +54 -4
  58. data/lib/buckaruby/urls.rb +0 -6
@@ -1,22 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'digest'
2
4
 
3
5
  module Buckaruby
4
6
  # Calculate a signature based on the parameters of the payment request or response.
5
7
  # -> see BPE 3.0 Gateway NVP, chapter 4 'Digital Signature'
6
8
  class Signature
7
- def self.generate_signature(params, options)
8
- secret = options[:secret]
9
- hash_method = options[:hash_method]
10
-
11
- case hash_method
9
+ def self.generate_signature(params, config)
10
+ case config.hash_method
12
11
  when :sha1
13
- Digest::SHA1.hexdigest(generate_signature_string(params, secret))
12
+ Digest::SHA1.hexdigest(generate_signature_string(params, config.secret))
14
13
  when :sha256
15
- Digest::SHA256.hexdigest(generate_signature_string(params, secret))
14
+ Digest::SHA256.hexdigest(generate_signature_string(params, config.secret))
16
15
  when :sha512
17
- Digest::SHA512.hexdigest(generate_signature_string(params, secret))
16
+ Digest::SHA512.hexdigest(generate_signature_string(params, config.secret))
18
17
  else
19
- raise ArgumentError, "Invalid hash method provided: #{hash_method}"
18
+ raise ArgumentError, "Invalid hash method provided: #{config.hash_method}"
20
19
  end
21
20
  end
22
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  module Support
3
5
  # The case insensitive Hash is a Hash with case insensitive keys that
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  module TransactionStatus
3
5
  SUCCESS = 1
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  module TransactionType
3
5
  PAYMENT = 1
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
- VERSION = "1.0.2"
4
+ VERSION = "1.1.0"
3
5
  end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Buckaruby::Configuration do
6
+ describe '#website' do
7
+ it 'sets the website from options' do
8
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D")
9
+ expect(config.website).to eq("12345678")
10
+ end
11
+
12
+ it 'raises an exception when website is missing' do
13
+ expect {
14
+ Buckaruby::Configuration.new(secret: "7C222FB2927D828AF22F592134E8932480637C0D")
15
+ }.to raise_error(ArgumentError)
16
+ end
17
+ end
18
+
19
+ describe '#secret' do
20
+ it 'sets the secret from options' do
21
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D")
22
+ expect(config.secret).to eq("7C222FB2927D828AF22F592134E8932480637C0D")
23
+ end
24
+
25
+ it 'raises an exception when secret is missing' do
26
+ expect {
27
+ Buckaruby::Configuration.new(website: "12345678")
28
+ }.to raise_error(ArgumentError)
29
+ end
30
+ end
31
+
32
+ describe '#mode' do
33
+ it 'returns test when no mode is passed' do
34
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D")
35
+ expect(config.mode).to eq(:test)
36
+ end
37
+
38
+ it 'returns test when mode test is passed' do
39
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :test)
40
+ expect(config.mode).to eq(:test)
41
+ end
42
+
43
+ it 'returns production when mode production is passed' do
44
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :production)
45
+ expect(config.mode).to eq(:production)
46
+ end
47
+
48
+ it 'raises an exception when an invalid mode is passed' do
49
+ expect {
50
+ Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :invalid)
51
+ }.to raise_error(ArgumentError)
52
+ end
53
+ end
54
+
55
+ describe '#hash_method' do
56
+ it 'raises an exception when an invalid hash method is passed' do
57
+ expect {
58
+ Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :invalid)
59
+ }.to raise_error(ArgumentError)
60
+ end
61
+
62
+ it 'accepts SHA-1 as hash method' do
63
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: 'SHA1')
64
+ expect(config.hash_method).to eq(:sha1)
65
+ end
66
+
67
+ it 'accepts SHA-256 as hash method' do
68
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :SHA256)
69
+ expect(config.hash_method).to eq(:sha256)
70
+ end
71
+
72
+ it 'accepts SHA-512 as hash method' do
73
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", hash_method: :sha512)
74
+ expect(config.hash_method).to eq(:sha512)
75
+ end
76
+ end
77
+
78
+ describe '#test?' do
79
+ it 'returns true when mode is test' do
80
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :test)
81
+ expect(config.test?).to be true
82
+ end
83
+
84
+ it 'returns false when mode is production' do
85
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :production)
86
+ expect(config.test?).to be false
87
+ end
88
+ end
89
+
90
+ describe '#production?' do
91
+ it 'returns false when mode is test' do
92
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :test)
93
+ expect(config.production?).to be false
94
+ end
95
+
96
+ it 'returns true when mode is production' do
97
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :production)
98
+ expect(config.production?).to be true
99
+ end
100
+ end
101
+
102
+ describe '#api_url' do
103
+ it 'returns the test URL when mode is test' do
104
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :test)
105
+ expect(config.api_url).to eq("https://testcheckout.buckaroo.nl/nvp/")
106
+ end
107
+
108
+ it 'returns the production URL when mode is production' do
109
+ config = Buckaruby::Configuration.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D", mode: :production)
110
+ expect(config.api_url).to eq("https://checkout.buckaroo.nl/nvp/")
111
+ end
112
+ end
113
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Buckaruby::Gateway do
@@ -21,59 +23,13 @@ describe Buckaruby::Gateway do
21
23
  }.to raise_error(ArgumentError)
22
24
  end
23
25
  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
26
  end
71
27
 
72
28
  subject { Buckaruby::Gateway.new(website: "12345678", secret: "7C222FB2927D828AF22F592134E8932480637C0D") }
73
29
 
74
30
  it { expect(subject).to be_an_instance_of(Buckaruby::Gateway) }
75
31
 
76
- describe 'get issuers' do
32
+ describe '#issuers' do
77
33
  context 'when no or false parameters are passed' do
78
34
  it 'should raise an ArgumentError' do
79
35
  expect { subject.issuers }.to raise_error(ArgumentError)
@@ -87,20 +43,27 @@ describe Buckaruby::Gateway do
87
43
  it { expect(issuers).to include("INGBNL2A" => "ING") }
88
44
  end
89
45
 
90
- context 'when visa, mastercard, sepa direct debit, paypal or is passed' do
46
+ context 'when ideal processing is passed' do
47
+ let(:issuers) { subject.issuers(Buckaruby::PaymentMethod::IDEAL_PROCESSING) }
48
+ it { expect(issuers.length).to be > 0 }
49
+ it { expect(issuers).to include("RABONL2U" => "Rabobank") }
50
+ end
51
+
52
+ context 'when visa, mastercard, maestro, bankcontact, sepa direct debit or paypal is passed' do
91
53
  it 'should raise an ArgumentError' do
92
54
  expect { subject.issuers(Buckaruby::PaymentMethod::VISA) }.to raise_error(ArgumentError)
93
55
  expect { subject.issuers(Buckaruby::PaymentMethod::MASTER_CARD) }.to raise_error(ArgumentError)
56
+ expect { subject.issuers(Buckaruby::PaymentMethod::MAESTRO) }.to raise_error(ArgumentError)
94
57
  expect { subject.issuers(Buckaruby::PaymentMethod::SEPA_DIRECT_DEBIT) }.to raise_error(ArgumentError)
58
+ expect { subject.issuers(Buckaruby::PaymentMethod::BANCONTACT_MISTER_CASH) }.to raise_error(ArgumentError)
95
59
  expect { subject.issuers(Buckaruby::PaymentMethod::PAYPAL) }.to raise_error(ArgumentError)
96
60
  end
97
61
  end
98
62
  end
99
63
 
100
- describe 'initiate transaction' do
64
+ describe '#setup_transaction' do
101
65
  before(:each) do
102
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
103
- .to_return(body: "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")
66
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/setup_transaction_success.txt"))
104
67
  end
105
68
 
106
69
  it 'should raise an exception when initiating a transaction with missing parameters' do
@@ -144,8 +107,7 @@ describe Buckaruby::Gateway do
144
107
  end
145
108
 
146
109
  it 'should raise a ConnectionException when connection the Buckaroo fails' do
147
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
148
- .to_raise(Errno::ECONNREFUSED)
110
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_raise(Errno::ECONNREFUSED)
149
111
 
150
112
  expect {
151
113
  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/")
@@ -153,8 +115,7 @@ describe Buckaruby::Gateway do
153
115
  end
154
116
 
155
117
  it 'should raise an InvalidResponseException when Buckaroo returns an invalid response' do
156
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
157
- .to_return(status: 500)
118
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(status: 500)
158
119
 
159
120
  expect {
160
121
  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/")
@@ -162,8 +123,7 @@ describe Buckaruby::Gateway do
162
123
  end
163
124
 
164
125
  it 'should raise an ApiException when API result Fail is returned' do
165
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
166
- .to_return(body: "BRQ_APIRESULT=Fail&BRQ_APIERRORMESSAGE=Invalid+request")
126
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: "BRQ_APIRESULT=Fail&BRQ_APIERRORMESSAGE=Invalid+request")
167
127
 
168
128
  expect {
169
129
  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/")
@@ -243,11 +203,9 @@ describe Buckaruby::Gateway do
243
203
  end
244
204
  end
245
205
 
246
- describe 'initiate recurrent transaction' do
206
+ describe '#recurrent_transaction' do
247
207
  before(:each) do
248
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest")
249
- .to_return(body:
250
- "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")
208
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/recurrent_transaction_success.txt"))
251
209
  end
252
210
 
253
211
  it 'should raise an exception when initiating a recurrent transaction with missing parameters' do
@@ -282,14 +240,66 @@ describe Buckaruby::Gateway do
282
240
  end
283
241
  end
284
242
 
285
- describe 'get transaction status' do
243
+ describe '#refundable?' do
244
+ it 'should raise an exception when required parameters are missing' do
245
+ expect {
246
+ subject.refundable?
247
+ }.to raise_error(ArgumentError)
248
+ end
249
+
250
+ it 'should return true when the transaction is refundable' do
251
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
252
+
253
+ response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
254
+ expect(response).to be true
255
+ end
256
+
257
+ it 'should return false when the transaction was not found' do
258
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
259
+
260
+ response = subject.refundable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
261
+ expect(response).to be false
262
+ end
263
+ end
264
+
265
+ describe '#refund_transaction' do
266
+ it 'should raise an exception when required parameters are missing' do
267
+ expect {
268
+ subject.refund_transaction
269
+ }.to raise_error(ArgumentError)
270
+ end
271
+
272
+ it 'should raise an exception when the transaction is not refundable' do
273
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_error.txt"))
274
+
275
+ expect {
276
+ subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
277
+ }.to raise_error(Buckaruby::NonRefundableTransactionException)
278
+ end
279
+
280
+ it 'should refund the transaction' do
281
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=RefundInfo").to_return(body: File.read("spec/fixtures/responses/refund_info_success.txt"))
282
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionRequest").to_return(body: File.read("spec/fixtures/responses/refund_transaction_success.txt"))
283
+
284
+ response = subject.refund_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
285
+ expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
286
+ expect(response.transaction_type).to eq(Buckaruby::TransactionType::PAYMENT)
287
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::IDEAL)
288
+ expect(response.transaction_id).to eq("8CCE4BB06339F28A506E1A328025D7DF13CCAD59")
289
+ expect(response.payment_id).to eq("E86256B2787EE7FF0C33D0D4C6159CD922227B79")
290
+ expect(response.refund_transaction_id).to eq("41C48B55FA9164E123CC73B1157459E840BE5D24")
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
+ end
296
+
297
+ describe '#status' do
286
298
  before(:each) do
287
- stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus")
288
- .to_return(body:
289
- "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")
299
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_success.txt"))
290
300
  end
291
301
 
292
- it 'should raise an exception when initiating a transaction with missing parameters' do
302
+ it 'should raise an exception when required parameters are missing' do
293
303
  expect {
294
304
  subject.status
295
305
  }.to raise_error(ArgumentError)
@@ -317,15 +327,73 @@ describe Buckaruby::Gateway do
317
327
  end
318
328
  end
319
329
 
320
- describe 'verifying payment response' do
321
- it 'should raise an exception when parameters are invalid' do
330
+ describe '#cancellable?' do
331
+ it 'should raise an exception when required parameters are missing' do
332
+ expect {
333
+ subject.cancellable?
334
+ }.to raise_error(ArgumentError)
335
+ end
336
+
337
+ it 'should return true when the transaction is cancellable' do
338
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
339
+
340
+ response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
341
+ expect(response).to be true
342
+ end
343
+
344
+ it 'should return false when the transaction is not cancellable' do
345
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
346
+
347
+ response = subject.cancellable?(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
348
+ expect(response).to be false
349
+ end
350
+ end
351
+
352
+ describe '#cancel_transaction' do
353
+ it 'should raise an exception when required parameters are missing' do
354
+ expect {
355
+ subject.cancel_transaction
356
+ }.to raise_error(ArgumentError)
357
+ end
358
+
359
+ it 'should raise an exception when the transaction is not cancellable' do
360
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_noncancellable.txt"))
361
+
362
+ expect {
363
+ subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
364
+ }.to raise_error(Buckaruby::NonCancellableTransactionException)
365
+ end
366
+
367
+ it 'should cancel the transaction' do
368
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=TransactionStatus").to_return(body: File.read("spec/fixtures/responses/status_cancellable.txt"))
369
+ stub_request(:post, "https://testcheckout.buckaroo.nl/nvp/?op=CancelTransaction").to_return(body: File.read("spec/fixtures/responses/cancel_success.txt"))
370
+
371
+ response = subject.cancel_transaction(transaction_id: "41C48B55FA9164E123CC73B1157459E840BE5D24")
372
+ expect(response).to be_an_instance_of(Buckaruby::CancelResponse)
373
+ end
374
+ end
375
+
376
+ describe '#callback' do
377
+ it 'should raise an exception when parameters are missing' do
322
378
  expect {
323
379
  subject.callback
324
380
  }.to raise_error(ArgumentError)
325
381
  end
326
382
 
383
+ it 'should raise an exception when parameter is an empty Hash' do
384
+ expect {
385
+ subject.callback({})
386
+ }.to raise_error(ArgumentError)
387
+ end
388
+
389
+ it 'should raise an exception when parameter is an empty String' do
390
+ expect {
391
+ subject.callback("")
392
+ }.to raise_error(ArgumentError)
393
+ end
394
+
327
395
  it 'should raise a SignatureException when the signature is invalid' do
328
- 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" }
396
+ params = File.read("spec/fixtures/responses/callback_invalid_signature.txt")
329
397
 
330
398
  expect {
331
399
  subject.callback(params)
@@ -333,6 +401,20 @@ describe Buckaruby::Gateway do
333
401
  end
334
402
 
335
403
  it 'should return the status when the signature is valid' do
404
+ params = File.read("spec/fixtures/responses/callback_valid_signature.txt")
405
+
406
+ response = subject.callback(params)
407
+ expect(response).to be_an_instance_of(Buckaruby::CallbackResponse)
408
+ expect(response.transaction_status).to be
409
+ expect(response.transaction_type).to be
410
+ expect(response.payment_method).to be
411
+ expect(response.payment_id).to be
412
+ expect(response.invoicenumber).to be
413
+ expect(response.timestamp).to be_an_instance_of(Time)
414
+ expect(response.to_h).to be_an_instance_of(Hash)
415
+ end
416
+
417
+ it 'should accept a Hash as parameters' do
336
418
  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" }
337
419
 
338
420
  response = subject.callback(params)
@@ -348,7 +430,7 @@ describe Buckaruby::Gateway do
348
430
 
349
431
  context 'payment response' do
350
432
  it 'should set the success status when payment status is success' do
351
- 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" }
433
+ params = File.read("spec/fixtures/responses/callback_payment_success.txt")
352
434
 
353
435
  response = subject.callback(params)
354
436
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -362,7 +444,7 @@ describe Buckaruby::Gateway do
362
444
  end
363
445
 
364
446
  it 'should set the failed status when payment status is failed' do
365
- 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" }
447
+ params = File.read("spec/fixtures/responses/callback_payment_failed.txt")
366
448
 
367
449
  response = subject.callback(params)
368
450
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::FAILED)
@@ -376,7 +458,7 @@ describe Buckaruby::Gateway do
376
458
  end
377
459
 
378
460
  it 'should set the rejected status when payment status is rejected' do
379
- 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" }
461
+ params = File.read("spec/fixtures/responses/callback_payment_rejected.txt")
380
462
 
381
463
  response = subject.callback(params)
382
464
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::REJECTED)
@@ -390,7 +472,7 @@ describe Buckaruby::Gateway do
390
472
  end
391
473
 
392
474
  it 'should set the cancelled status when payment status is cancelled' do
393
- 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" }
475
+ params = File.read("spec/fixtures/responses/callback_payment_cancelled.txt")
394
476
 
395
477
  response = subject.callback(params)
396
478
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
@@ -404,7 +486,7 @@ describe Buckaruby::Gateway do
404
486
  end
405
487
 
406
488
  it 'should set the pending status when payment status is pending' do
407
- 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" }
489
+ params = File.read("spec/fixtures/responses/callback_payment_pending.txt")
408
490
 
409
491
  response = subject.callback(params)
410
492
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
@@ -418,7 +500,7 @@ describe Buckaruby::Gateway do
418
500
  end
419
501
 
420
502
  it 'should include account iban, bic and name for an ideal response' do
421
- 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" }
503
+ params = File.read("spec/fixtures/responses/callback_payment_success.txt")
422
504
 
423
505
  response = subject.callback(params)
424
506
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -432,7 +514,7 @@ describe Buckaruby::Gateway do
432
514
  end
433
515
 
434
516
  it 'should include account iban, name, mandate reference and collect date for a sepa direct debit response' do
435
- 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" }
517
+ params = File.read("spec/fixtures/responses/callback_payment_sepa.txt")
436
518
 
437
519
  response = subject.callback(params)
438
520
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::PENDING)
@@ -450,7 +532,7 @@ describe Buckaruby::Gateway do
450
532
  end
451
533
 
452
534
  it 'should return transaction type payment when cancelling a visa or mastercard transaction (empty transaction type)' do
453
- 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" }
535
+ params = File.read("spec/fixtures/responses/callback_payment_empty_transaction_type.txt")
454
536
 
455
537
  response = subject.callback(params)
456
538
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::CANCELLED)
@@ -464,7 +546,7 @@ describe Buckaruby::Gateway do
464
546
 
465
547
  context 'payment recurrent response' do
466
548
  it 'should recognize a visa payment recurrent response' do
467
- params = { "brq_amount" => "10.00", "brq_currency" => "EUR", "brq_customer_name" => "Test", "brq_description" => "test", "brq_invoicenumber" => "12345", "brq_issuing_country" => "NL", "brq_mutationtype" => "Collecting", "brq_payment" => "E86256B2787EE7FF0C33D0D4C6159CD922227B79", "brq_recurring" => "True", "brq_SERVICE_visa_CardExpirationDate" => "2017-08", "brq_SERVICE_visa_CardNumberEnding" => "0005", "brq_SERVICE_visa_MaskedCreditcardNumber" => "456355******0005", "brq_statuscode" => "190", "brq_statuscode_detail" => "S001", "brq_statusmessage" => "Transaction successfully processed", "brq_test" => "true", "brq_timestamp" => "2017-08-08 15:01:23", "brq_transaction_method" => "visa", "brq_transaction_type" => "C044", "brq_transactions" => "B51118F58785274E117EFE1BF99D4D50CCB96949", "brq_websitekey" => "12345678", "brq_signature" => "2d445ce39320a10e6637b6ace6896559ce040cb3" }
549
+ params = File.read("spec/fixtures/responses/callback_recurrent_visa.txt")
468
550
 
469
551
  response = subject.callback(params)
470
552
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -478,7 +560,7 @@ describe Buckaruby::Gateway do
478
560
  end
479
561
 
480
562
  it 'should recognize a sepa direct debit payment recurrent response' do
481
- 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" }
563
+ params = File.read("spec/fixtures/responses/callback_recurrent_sepa.txt")
482
564
 
483
565
  response = subject.callback(params)
484
566
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -494,7 +576,7 @@ describe Buckaruby::Gateway do
494
576
 
495
577
  context 'refund response' do
496
578
  it 'should recognize an ideal refund response' do
497
- 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" }
579
+ params = File.read("spec/fixtures/responses/callback_refund_ideal.txt")
498
580
 
499
581
  response = subject.callback(params)
500
582
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -509,7 +591,7 @@ describe Buckaruby::Gateway do
509
591
  end
510
592
 
511
593
  it 'should recognize a paypal refund response' do
512
- 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" }
594
+ params = File.read("spec/fixtures/responses/callback_refund_paypal.txt")
513
595
 
514
596
  response = subject.callback(params)
515
597
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -526,7 +608,7 @@ describe Buckaruby::Gateway do
526
608
 
527
609
  context 'reversal response' do
528
610
  it 'should recognize a sepa direct debit reversal response' do
529
- 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" }
611
+ params = File.read("spec/fixtures/responses/callback_reversal_sepa.txt")
530
612
 
531
613
  response = subject.callback(params)
532
614
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)
@@ -541,7 +623,7 @@ describe Buckaruby::Gateway do
541
623
  end
542
624
 
543
625
  it 'should recognize a paypal reversal response' do
544
- 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" }
626
+ params = File.read("spec/fixtures/responses/callback_reversal_paypal.txt")
545
627
 
546
628
  response = subject.callback(params)
547
629
  expect(response.transaction_status).to eq(Buckaruby::TransactionStatus::SUCCESS)