buckaruby 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4bf463fefe2e48b81e3802d81e8141a535a4f586
4
- data.tar.gz: b2192a33d06fd0c4c9cba9e9eb7969cd12fdc061
3
+ metadata.gz: bf24f7ed57a0ee1afd17a9d85d696be81c7e28f3
4
+ data.tar.gz: 472afa4186eb0cb9e6dda801b6fc80ea52ca0654
5
5
  SHA512:
6
- metadata.gz: 636784a521333470080bfaf8603bb5049e6129d94f2cd01cf20cae672c6ff84827f8a9ddb6221e3eb5b0a7bc2f484fe5788e21d5580c8303a7df5bcaa0ffcd1c
7
- data.tar.gz: 88a2da8cf30a4791535456fe99b3b06a845d42cbfcf52799558b09e0b41fa3186667f954a05633a4de401f130894a1b5c56fdcd449030c052a7cea66464df827
6
+ metadata.gz: 59deba4cfcf3006f9a20d5072619cf42550da007912cec0bf5ade166be9c9191810cf87066dcb1576c79e7d3d154e1098ba8e8d4aa1372883b1ad1fa547f8568
7
+ data.tar.gz: 11d4aa501936edcaff85f77e163ee88732ba1ecea6b52415e24783a9c477c6894a1b3453045ee030d32cb1b8bc1dcbd2b92b4b2fba1f6403f04a492f1d1a1a1f
data/.rubocop.yml CHANGED
@@ -8,11 +8,15 @@ AllCops:
8
8
  Metrics/AbcSize:
9
9
  Max: 30
10
10
 
11
+ Metrics/BlockLength:
12
+ Exclude:
13
+ - 'spec/**/*.rb'
14
+
11
15
  Metrics/ClassLength:
12
16
  Enabled: false
13
17
 
14
18
  Metrics/CyclomaticComplexity:
15
- Max: 8
19
+ Max: 9
16
20
 
17
21
  Metrics/LineLength:
18
22
  Enabled: false
@@ -21,7 +25,7 @@ Metrics/MethodLength:
21
25
  Enabled: false
22
26
 
23
27
  Metrics/PerceivedComplexity:
24
- Max: 8
28
+ Max: 9
25
29
 
26
30
  Style/AccessorMethodName:
27
31
  Enabled: false
data/.travis.yml CHANGED
@@ -2,6 +2,6 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.2.6
6
- - 2.3.3
7
- - 2.4.0
5
+ - 2.2.7
6
+ - 2.3.4
7
+ - 2.4.1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Buckaruby changelog
2
2
 
3
+ ## 1.0.2 (2017-08-25)
4
+
5
+ - Recognize credit card transactions via Atos.
6
+ - Fix detection of recurrent payments.
7
+ - Minor improvements to exception handling.
8
+
3
9
  ## 1.0.1 (2017-01-05)
4
10
 
5
11
  - Recognize status codes 792 & 793 as a pending transaction.
data/Gemfile CHANGED
@@ -3,4 +3,4 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in buckaruby.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rubocop', '~> 0.45.0', group: :test
6
+ gem 'rubocop', '~> 0.47.1', group: :test
data/README.md CHANGED
@@ -126,10 +126,14 @@ When missing or invalid parameters are passed to any method, an `ArgumentError`
126
126
 
127
127
  When a request to Buckaroo fails because of connection problems, a `Buckaruby::ConnectionException` will be raised.
128
128
 
129
+ When Buckaroo returns an invalid response (status code is not 2xx), a `Buckaruby::InvalidResponseException` will be raised.
130
+
129
131
  When an API call to Buckaroo results in a "Fail" returned, a `Buckaruby::ApiException` will be raised.
130
132
 
131
133
  When the signature could not be verified, a `Buckaruby::SignatureException` will be raised.
132
134
 
135
+ All Buckaruby exceptions listed here inherit from the class `Buckaruby::BuckarooException`.
136
+
133
137
  ## Contributing
134
138
 
135
139
  Bug reports and pull requests are welcome on GitHub at https://github.com/KentaaNL/buckaruby.
data/buckaruby.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'buckaruby/version'
@@ -23,4 +24,5 @@ Gem::Specification.new do |spec|
23
24
  spec.add_development_dependency "bundler", "~> 1.7"
24
25
  spec.add_development_dependency "rake", "~> 10.0"
25
26
  spec.add_development_dependency "rspec", "~> 3.5.0", ">= 3.5.0"
27
+ spec.add_development_dependency "webmock", "~> 2.3", ">= 2.3.2"
26
28
  end
@@ -38,16 +38,31 @@ module Buckaruby
38
38
  class ConnectionException < BuckarooException
39
39
  def initialize(exception)
40
40
  message = "Error connecting to Buckaroo: #{exception.message} (#{exception.class})"
41
+ super(message)
42
+ end
43
+ end
44
+
45
+ # Exception raised when the response from Buckaroo was invalid.
46
+ class InvalidResponseException < BuckarooException
47
+ attr_reader :response
41
48
 
49
+ def initialize(response)
50
+ @response = response
51
+
52
+ message = "Invalid response received from Buckaroo: #{response.message} (#{response.code})"
42
53
  super(message)
43
54
  end
44
55
  end
45
56
 
46
57
  # Exception raised when the signature could not be verified.
47
58
  class SignatureException < BuckarooException
59
+ attr_reader :sent_signature, :generated_signature
60
+
48
61
  def initialize(sent_signature = "", generated_signature = "")
49
- message = "Sent signature (#{sent_signature}) doesn't match generated signature (#{generated_signature})"
62
+ @sent_signature = sent_signature
63
+ @generated_signature = generated_signature
50
64
 
65
+ message = "Sent signature (#{sent_signature}) doesn't match generated signature (#{generated_signature})"
51
66
  super(message)
52
67
  end
53
68
  end
@@ -41,11 +41,16 @@ module Buckaruby
41
41
  end
42
42
 
43
43
  raw_response = http.post(uri.request_uri, post_data(params))
44
+
45
+ unless raw_response.is_a?(Net::HTTPSuccess)
46
+ raise InvalidResponseException, raw_response
47
+ end
48
+
44
49
  return raw_response.body
45
50
  # Try to catch some common exceptions Net::HTTP might raise
46
- rescue Errno::ETIMEDOUT, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, EOFError, IOError, SocketError,
47
- Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::OpenTimeout, Net::ProtocolError, Net::ReadTimeout,
48
- OpenSSL::SSL::SSLError => ex
51
+ rescue Errno::ETIMEDOUT, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, Errno::EHOSTUNREACH,
52
+ IOError, SocketError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::OpenTimeout,
53
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError => ex
49
54
  raise ConnectionException, ex
50
55
  end
51
56
 
@@ -19,7 +19,7 @@ module Buckaruby
19
19
  generated_signature = Signature.generate_signature(response, options)
20
20
 
21
21
  if sent_signature != generated_signature
22
- raise SignatureException, sent_signature, generated_signature
22
+ raise SignatureException.new(sent_signature, generated_signature)
23
23
  end
24
24
  end
25
25
  end
@@ -102,13 +102,18 @@ module Buckaruby
102
102
  if params[:brq_transaction_type] && !params[:brq_transaction_type].empty?
103
103
  # See http://support.buckaroo.nl/index.php/Transactietypes
104
104
  case params[:brq_transaction_type]
105
- when 'C001', 'C002', 'C004', 'C021', 'C043', 'C044', 'C046', 'C090', 'V001', 'V002', 'V010', 'V021', 'V090'
106
- TransactionType::PAYMENT
107
- when 'C005', 'V014', 'V031', 'V032', 'V034', 'V043', 'V044', 'V046', 'V094'
105
+ when 'C001', 'C002', 'C004', 'C021', 'C043', 'C044', 'C046', 'C089', 'C090', 'C192', 'C251', 'V001', 'V002', 'V010', 'V021', 'V032', 'V034', 'V043', 'V044', 'V046', 'V089', 'V090', 'V192', 'V245'
106
+ # Check the recurring flag to detect a normal or recurring transaction.
107
+ if params[:brq_recurring] && params[:brq_recurring].casecmp("true").zero?
108
+ TransactionType::PAYMENT_RECURRENT
109
+ else
110
+ TransactionType::PAYMENT
111
+ end
112
+ when 'C005', 'V014', 'V031', 'V094'
108
113
  TransactionType::PAYMENT_RECURRENT
109
- when 'C079', 'C080', 'C082', 'C092', 'C101', 'C102', 'C121', 'C500', 'V067', 'V068', 'V070', 'V079', 'V080', 'V082', 'V092', 'V101', 'V102', 'V110'
114
+ when 'C079', 'C080', 'C082', 'C092', 'C101', 'C102', 'C121', 'C194', 'C197', 'C252', 'C500', 'V067', 'V068', 'V070', 'V079', 'V080', 'V082', 'V092', 'V101', 'V102', 'V110', 'V149', 'V194', 'V197', 'V246'
110
115
  TransactionType::REFUND
111
- when 'C501', 'C502', 'C562', 'V111', 'V131', 'V132', 'V134', 'V143', 'V144', 'V146'
116
+ when 'C501', 'C502', 'C546', 'C551', 'C553', 'C554', 'C562', 'C589', 'C593', 'V111', 'V131', 'V132', 'V134', 'V143', 'V144', 'V146', 'V543', 'V544', 'V545', 'V546', 'V589', 'V592'
112
117
  TransactionType::REVERSAL
113
118
  end
114
119
  else
@@ -1,3 +1,3 @@
1
1
  module Buckaruby
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -99,9 +99,8 @@ describe Buckaruby::Gateway do
99
99
 
100
100
  describe 'initiate transaction' do
101
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)
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")
105
104
  end
106
105
 
107
106
  it 'should raise an exception when initiating a transaction with missing parameters' do
@@ -144,10 +143,27 @@ describe Buckaruby::Gateway do
144
143
  }.to raise_error(ArgumentError)
145
144
  end
146
145
 
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)
146
+ 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)
149
+
150
+ expect {
151
+ 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/")
152
+ }.to raise_error(Buckaruby::ConnectionException)
153
+ end
154
+
155
+ 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)
158
+
159
+ expect {
160
+ 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/")
161
+ }.to raise_error(Buckaruby::InvalidResponseException)
162
+ end
163
+
164
+ 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")
151
167
 
152
168
  expect {
153
169
  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/")
@@ -229,9 +245,9 @@ describe Buckaruby::Gateway do
229
245
 
230
246
  describe 'initiate recurrent transaction' do
231
247
  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)
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")
235
251
  end
236
252
 
237
253
  it 'should raise an exception when initiating a recurrent transaction with missing parameters' do
@@ -268,9 +284,9 @@ describe Buckaruby::Gateway do
268
284
 
269
285
  describe 'get transaction status' do
270
286
  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)
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")
274
290
  end
275
291
 
276
292
  it 'should raise an exception when initiating a transaction with missing parameters' do
@@ -308,15 +324,15 @@ describe Buckaruby::Gateway do
308
324
  }.to raise_error(ArgumentError)
309
325
  end
310
326
 
311
- it 'should raise an exception when signature is invalid' do
327
+ it 'should raise a SignatureException when the signature is invalid' do
312
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" }
313
329
 
314
330
  expect {
315
331
  subject.callback(params)
316
- }.to raise_error(Buckaruby::SignatureException)
332
+ }.to raise_error(Buckaruby::SignatureException, "Sent signature (abcdefgh1234567890abcdefgh1234567890) doesn't match generated signature (0a74bba15fccd8094f33678c001b44851643876d)")
317
333
  end
318
334
 
319
- it 'should return the status when signature is valid' do
335
+ it 'should return the status when the signature is valid' do
320
336
  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
337
 
322
338
  response = subject.callback(params)
@@ -447,6 +463,20 @@ describe Buckaruby::Gateway do
447
463
  end
448
464
 
449
465
  context 'payment recurrent response' do
466
+ 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" }
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::PAYMENT_RECURRENT)
472
+ expect(response.payment_method).to eq(Buckaruby::PaymentMethod::VISA)
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.timestamp).to be_an_instance_of(Time)
477
+ expect(response.to_h).to be_an_instance_of(Hash)
478
+ end
479
+
450
480
  it 'should recognize a sepa direct debit payment recurrent response' do
451
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" }
452
482
 
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'webmock/rspec'
3
4
 
4
5
  require 'buckaruby'
5
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buckaruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kentaa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-05 00:00:00.000000000 Z
11
+ date: 2017-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,6 +58,26 @@ dependencies:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 3.5.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: webmock
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.3'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 2.3.2
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '2.3'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 2.3.2
61
81
  description: The Buckaruby gem provides a Ruby library for communicating with the
62
82
  Buckaroo Payment Engine 3.0.
63
83
  email: