pensio_api 0.2.1 → 0.2.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 +13 -5
- data/.rspec +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +83 -0
- data/Guardfile +23 -0
- data/LICENSE +24 -0
- data/README.md +77 -0
- data/lib/pensio_api/billing_address.rb +15 -0
- data/lib/pensio_api/callback.rb +30 -0
- data/lib/pensio_api/credentials.rb +7 -0
- data/lib/pensio_api/ecommerce.rb +13 -0
- data/lib/pensio_api/errors/bad_request.rb +15 -0
- data/lib/pensio_api/errors/gateway_error.rb +21 -0
- data/lib/pensio_api/errors/no_credentials.rb +9 -0
- data/lib/pensio_api/funding_list.rb +30 -0
- data/lib/pensio_api/funding_list_request.rb +15 -0
- data/lib/pensio_api/mixins/has_transactions.rb +36 -0
- data/lib/pensio_api/mixins/id.rb +9 -0
- data/lib/pensio_api/mixins/method_missing.rb +9 -0
- data/lib/pensio_api/mixins/request_defaults.rb +50 -0
- data/lib/pensio_api/mixins/timestamps.rb +13 -0
- data/lib/pensio_api/request.rb +18 -0
- data/lib/pensio_api/reservation.rb +28 -0
- data/lib/pensio_api/responses/base.rb +32 -0
- data/lib/pensio_api/responses/funding_list.rb +43 -0
- data/lib/pensio_api/responses/gateway_url.rb +13 -0
- data/lib/pensio_api/responses/refund.rb +17 -0
- data/lib/pensio_api/responses/reservation.rb +15 -0
- data/lib/pensio_api/responses/reservation_capture.rb +14 -0
- data/lib/pensio_api/responses/reservation_release.rb +6 -0
- data/lib/pensio_api/responses/subscription_charge.rb +21 -0
- data/lib/pensio_api/responses/subscription_failure_callback.rb +21 -0
- data/lib/pensio_api/responses/success_callback.rb +21 -0
- data/lib/pensio_api/responses/terminal.rb +41 -0
- data/lib/pensio_api/responses/transaction.rb +13 -0
- data/lib/pensio_api/subscription.rb +30 -0
- data/lib/pensio_api/terminal.rb +17 -0
- data/lib/pensio_api/transaction.rb +84 -0
- data/lib/pensio_api.rb +36 -0
- data/pensio_api.gemspec +20 -0
- data/spec/lib/pensio_api/billing_address_spec.rb +40 -0
- data/spec/lib/pensio_api/callback_spec.rb +21 -0
- data/spec/lib/pensio_api/ecommerce_spec.rb +22 -0
- data/spec/lib/pensio_api/errors/bad_request_spec.rb +31 -0
- data/spec/lib/pensio_api/errors/gateway_error_spec.rb +38 -0
- data/spec/lib/pensio_api/funding_list_request_spec.rb +17 -0
- data/spec/lib/pensio_api/funding_list_spec.rb +38 -0
- data/spec/lib/pensio_api/request_spec.rb +122 -0
- data/spec/lib/pensio_api/reservation_spec.rb +32 -0
- data/spec/lib/pensio_api/responses/base_spec.rb +68 -0
- data/spec/lib/pensio_api/responses/funding_list_spec.rb +23 -0
- data/spec/lib/pensio_api/responses/gateway_url_spec.rb +17 -0
- data/spec/lib/pensio_api/responses/refund_spec.rb +18 -0
- data/spec/lib/pensio_api/responses/reservation_capture_spec.rb +18 -0
- data/spec/lib/pensio_api/responses/reservation_release_spec.rb +12 -0
- data/spec/lib/pensio_api/responses/reservation_spec.rb +15 -0
- data/spec/lib/pensio_api/responses/subscription_charge_spec.rb +56 -0
- data/spec/lib/pensio_api/responses/subscription_failure_callback_spec.rb +48 -0
- data/spec/lib/pensio_api/responses/success_callback_spec.rb +45 -0
- data/spec/lib/pensio_api/responses/terminal_spec.rb +55 -0
- data/spec/lib/pensio_api/responses/transaction_spec.rb +56 -0
- data/spec/lib/pensio_api/subscription_spec.rb +37 -0
- data/spec/lib/pensio_api/terminal_spec.rb +18 -0
- data/spec/lib/pensio_api/transaction_spec.rb +101 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/support/fixtures/bad_request_error.xml +10 -0
- data/spec/support/fixtures/capture_reservation.xml +84 -0
- data/spec/support/fixtures/charge_subscription.xml +89 -0
- data/spec/support/fixtures/create_multi_payment_request.xml +13 -0
- data/spec/support/fixtures/create_payment_request.xml +13 -0
- data/spec/support/fixtures/failure_callback.xml +76 -0
- data/spec/support/fixtures/funding_download.csv +6 -0
- data/spec/support/fixtures/funding_list.xml +43 -0
- data/spec/support/fixtures/get_terminals.xml +38 -0
- data/spec/support/fixtures/get_terminals_none.xml +12 -0
- data/spec/support/fixtures/get_terminals_single.xml +28 -0
- data/spec/support/fixtures/multiple_payments.xml +146 -0
- data/spec/support/fixtures/payments.xml +80 -0
- data/spec/support/fixtures/payments_none.xml +13 -0
- data/spec/support/fixtures/pensio_error.xml +48 -0
- data/spec/support/fixtures/refund_captured_reservation.xml +88 -0
- data/spec/support/fixtures/release_reservation.xml +72 -0
- data/spec/support/fixtures/reservation_of_fixed_amount.xml +46 -0
- data/spec/support/fixtures/reserve_subscription_charge.xml +86 -0
- data/spec/support/fixtures/setup_subscription.xml +46 -0
- data/spec/support/fixtures/subscription_failure_callback.xml +132 -0
- data/spec/support/fixtures/success_callback.xml +119 -0
- data/spec/support/helpers.rb +38 -0
- metadata +150 -15
@@ -0,0 +1,17 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class Refund < Base
|
4
|
+
attr_reader :transaction, :refund_amount, :refund_currency
|
5
|
+
|
6
|
+
def initialize(request)
|
7
|
+
super(request)
|
8
|
+
|
9
|
+
@transaction = PensioAPI::Transaction.new(
|
10
|
+
transactions['Transaction']
|
11
|
+
)
|
12
|
+
@refund_amount = BigDecimal.new(@raw['RefundedAmount'])
|
13
|
+
@refund_currency = @raw['RefundCurrency'].to_i
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class ReservationCapture < Responses::Reservation
|
4
|
+
attr_reader :capture_amount, :capture_currency
|
5
|
+
|
6
|
+
def initialize(request)
|
7
|
+
super(request)
|
8
|
+
|
9
|
+
@capture_amount = BigDecimal.new(@raw['CaptureAmount'])
|
10
|
+
@capture_currency = @raw['CaptureCurrency'].to_i
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class SubscriptionCharge < Responses::Transaction
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :new, :captured?
|
7
|
+
|
8
|
+
def each
|
9
|
+
[existing, new].each { |t| yield t }
|
10
|
+
end
|
11
|
+
|
12
|
+
def existing
|
13
|
+
@transactions.first
|
14
|
+
end
|
15
|
+
|
16
|
+
def new
|
17
|
+
@transactions.last
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class SubscriptionFailureCallback < Transaction
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :new, :captured?
|
7
|
+
|
8
|
+
def each
|
9
|
+
[reservation, charge].each { |t| yield t }
|
10
|
+
end
|
11
|
+
|
12
|
+
def reservation
|
13
|
+
@transactions.first
|
14
|
+
end
|
15
|
+
|
16
|
+
def charge
|
17
|
+
@transactions.last
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class SuccessCallback < Transaction
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
def_delegators :new, :captured?
|
7
|
+
|
8
|
+
def each
|
9
|
+
[reservation, charge].each { |t| yield t }
|
10
|
+
end
|
11
|
+
|
12
|
+
def reservation
|
13
|
+
@transactions.first
|
14
|
+
end
|
15
|
+
|
16
|
+
def charge
|
17
|
+
@transactions.last
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
module Responses
|
3
|
+
class Terminal < Base
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
attr_reader :terminals
|
7
|
+
|
8
|
+
def initialize(request)
|
9
|
+
super(request)
|
10
|
+
|
11
|
+
map_terminals
|
12
|
+
end
|
13
|
+
|
14
|
+
def each
|
15
|
+
@terminals.each { |t| yield t }
|
16
|
+
end
|
17
|
+
|
18
|
+
def last
|
19
|
+
@terminals.last
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def map_terminals
|
25
|
+
@terminals = if raw_terminals.is_a?(Array)
|
26
|
+
raw_terminals.map { |t| PensioAPI::Terminal.new(t) }
|
27
|
+
else
|
28
|
+
[PensioAPI::Terminal.new(raw_terminals)]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def raw_terminals
|
33
|
+
@raw_terminals ||= if @raw['Terminals']
|
34
|
+
@raw['Terminals']['Terminal']
|
35
|
+
else
|
36
|
+
[]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
class Subscription
|
3
|
+
def self.setup(options={})
|
4
|
+
request = Request.new('/merchant/API/setupSubscription', options)
|
5
|
+
if request.response_contains?('Transactions')
|
6
|
+
Transaction.new(request.body['Transactions']['Transaction'])
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(transaction)
|
11
|
+
@transaction = transaction
|
12
|
+
end
|
13
|
+
|
14
|
+
def charge(options={})
|
15
|
+
request = Request.new('/merchant/API/chargeSubscription', options.merge(subscription_options))
|
16
|
+
Responses::SubscriptionCharge.new(request)
|
17
|
+
end
|
18
|
+
|
19
|
+
def reserve_charge(options={})
|
20
|
+
request = Request.new('/merchant/API/reserveSubscriptionCharge', options.merge(subscription_options))
|
21
|
+
Responses::SubscriptionCharge.new(request)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def subscription_options
|
27
|
+
{ transaction_id: @transaction.id }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
class Terminal
|
3
|
+
include Mixins::MethodMissing
|
4
|
+
|
5
|
+
attr_reader :title
|
6
|
+
|
7
|
+
def self.all
|
8
|
+
request = Request.new('/merchant/API/getTerminals')
|
9
|
+
Responses::Terminal.new(request)
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(terminal_body)
|
13
|
+
@raw = terminal_body
|
14
|
+
@title = @raw['Title']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module PensioAPI
|
2
|
+
class Transaction
|
3
|
+
include Mixins::ID
|
4
|
+
include Mixins::MethodMissing
|
5
|
+
include Mixins::Timestamps
|
6
|
+
|
7
|
+
attr_reader :status
|
8
|
+
attr_reader :captured_amount
|
9
|
+
attr_reader :reserved_amount
|
10
|
+
attr_reader :refunded_amount
|
11
|
+
attr_reader :recurring_default_amount
|
12
|
+
attr_reader :card_status
|
13
|
+
attr_reader :card_token
|
14
|
+
attr_reader :card_masked_pan
|
15
|
+
attr_reader :order_id
|
16
|
+
attr_reader :merchant_currency
|
17
|
+
attr_reader :card_holder_currency
|
18
|
+
|
19
|
+
# constants for transaction statuses
|
20
|
+
STATUS_RECURRING_CONFIRMED = 'recurring_confirmed'
|
21
|
+
STATUS_RELEASED = 'released'
|
22
|
+
STATUS_CAPTURED = 'captured'
|
23
|
+
STATUS_CAPTURED_FAILED = 'captured_failed'
|
24
|
+
|
25
|
+
RESERVATION_SUCCESS_STATUSES = [STATUS_RECURRING_CONFIRMED]
|
26
|
+
CHARGE_SUCCESS_STATUSES = [STATUS_CAPTURED]
|
27
|
+
|
28
|
+
def initialize(transaction_body)
|
29
|
+
@raw = transaction_body
|
30
|
+
|
31
|
+
@status = @raw['TransactionStatus']
|
32
|
+
|
33
|
+
@captured_amount = BigDecimal.new(@raw['CapturedAmount'])
|
34
|
+
@reserved_amount = BigDecimal.new(@raw['ReservedAmount'])
|
35
|
+
@refunded_amount = BigDecimal.new(@raw['RefundedAmount'])
|
36
|
+
@recurring_default_amount = BigDecimal.new(@raw['RecurringDefaultAmount'])
|
37
|
+
|
38
|
+
@card_status = @raw['CardStatus']
|
39
|
+
@card_token = @raw['CreditCardToken']
|
40
|
+
@card_masked_pan = @raw['CreditCardMaskedPan']
|
41
|
+
|
42
|
+
@order_id = @raw['ShopOrderId']
|
43
|
+
|
44
|
+
@merchant_currency = @raw['MerchantCurrency'].to_i
|
45
|
+
@card_holder_currency = @raw['CardHolderCurrency'].to_i
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.find(options={})
|
49
|
+
request = Request.new('/merchant/API/payments', options)
|
50
|
+
Responses::Transaction.new(request)
|
51
|
+
end
|
52
|
+
|
53
|
+
def captured?
|
54
|
+
captured_amount >= reserved_amount && CHARGE_SUCCESS_STATUSES.include?(self.transaction_status)
|
55
|
+
end
|
56
|
+
|
57
|
+
def reserved?
|
58
|
+
RESERVATION_SUCCESS_STATUSES.include?(self.transaction_status)
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_reservation
|
62
|
+
Reservation.new(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_subscription
|
66
|
+
Subscription.new(self)
|
67
|
+
end
|
68
|
+
|
69
|
+
def refund(options={})
|
70
|
+
request = Request.new('/merchant/API/refundCapturedReservation', options.merge(transaction_id: self.id))
|
71
|
+
Responses::Refund.new(request)
|
72
|
+
end
|
73
|
+
|
74
|
+
def terminal
|
75
|
+
@terminal ||= Terminal.all.find { |t| t.title == @raw['Terminal'] }
|
76
|
+
end
|
77
|
+
|
78
|
+
def billing_address
|
79
|
+
@billing_address ||= if @raw.has_key?('CustomerInfo') && @raw['CustomerInfo'].has_key?('BillingAddress')
|
80
|
+
BillingAddress.new(@raw['CustomerInfo']['BillingAddress'])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/pensio_api.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
|
3
|
+
require 'pensio_api/mixins/id'
|
4
|
+
require 'pensio_api/mixins/has_transactions'
|
5
|
+
require 'pensio_api/mixins/method_missing'
|
6
|
+
require 'pensio_api/mixins/request_defaults'
|
7
|
+
require 'pensio_api/mixins/timestamps'
|
8
|
+
|
9
|
+
require 'pensio_api/billing_address'
|
10
|
+
require 'pensio_api/callback'
|
11
|
+
require 'pensio_api/credentials'
|
12
|
+
require 'pensio_api/ecommerce'
|
13
|
+
require 'pensio_api/funding_list'
|
14
|
+
require 'pensio_api/funding_list_request'
|
15
|
+
require 'pensio_api/request'
|
16
|
+
require 'pensio_api/reservation'
|
17
|
+
require 'pensio_api/transaction'
|
18
|
+
require 'pensio_api/terminal'
|
19
|
+
require 'pensio_api/subscription'
|
20
|
+
|
21
|
+
require 'pensio_api/errors/bad_request'
|
22
|
+
require 'pensio_api/errors/gateway_error'
|
23
|
+
require 'pensio_api/errors/no_credentials'
|
24
|
+
|
25
|
+
require 'pensio_api/responses/base'
|
26
|
+
require 'pensio_api/responses/funding_list'
|
27
|
+
require 'pensio_api/responses/gateway_url'
|
28
|
+
require 'pensio_api/responses/terminal'
|
29
|
+
require 'pensio_api/responses/transaction'
|
30
|
+
require 'pensio_api/responses/refund'
|
31
|
+
require 'pensio_api/responses/reservation'
|
32
|
+
require 'pensio_api/responses/reservation_capture'
|
33
|
+
require 'pensio_api/responses/reservation_release'
|
34
|
+
require 'pensio_api/responses/subscription_charge'
|
35
|
+
require 'pensio_api/responses/success_callback'
|
36
|
+
require 'pensio_api/responses/subscription_failure_callback'
|
data/pensio_api.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'pensio_api'
|
3
|
+
s.version = '0.2.2'
|
4
|
+
s.license = 'BSD-3-Clause'
|
5
|
+
s.summary = "Provides integration for the Pensio Merchant API"
|
6
|
+
s.authors = ['Michael Sell', 'Rory Sinclair']
|
7
|
+
s.email = 'michael@asw.com'
|
8
|
+
s.files = `git ls-files`.split("\n")
|
9
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
10
|
+
s.require_paths = ["lib"]
|
11
|
+
|
12
|
+
s.add_development_dependency 'rspec', '>= 2.14'
|
13
|
+
s.add_development_dependency 'webmock', '~> 1.16.1'
|
14
|
+
s.add_development_dependency 'guard', '~> 2.2.5'
|
15
|
+
s.add_development_dependency 'guard-rspec', '~> 4.2.4'
|
16
|
+
|
17
|
+
s.add_dependency 'httparty', '>= 0.12.0'
|
18
|
+
s.add_dependency 'activesupport', '>= 3.2'
|
19
|
+
s.add_dependency 'multi_xml', '>= 0.5.2'
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::BillingAddress do
|
4
|
+
before :each do
|
5
|
+
stub_pensio_response('/merchant/API/payments', 'payments')
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:transaction) { PensioAPI::Transaction.find.first }
|
9
|
+
let(:billing_address) { transaction.billing_address }
|
10
|
+
|
11
|
+
describe 'reader attributes' do
|
12
|
+
describe '.first_name' do
|
13
|
+
specify { expect(billing_address.first_name).to eq(transaction.customer_info['BillingAddress']['Firstname']) }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.last_name' do
|
17
|
+
specify { expect(billing_address.last_name).to eq(transaction.customer_info['BillingAddress']['Lastname']) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.street_address' do
|
21
|
+
specify { expect(billing_address.street_address).to eq(transaction.customer_info['BillingAddress']['Address']) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '.city' do
|
25
|
+
specify { expect(billing_address.city).to eq(transaction.customer_info['BillingAddress']['City']) }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.region' do
|
29
|
+
specify { expect(billing_address.region).to eq(transaction.customer_info['BillingAddress']['Region']) }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.postal_code' do
|
33
|
+
specify { expect(billing_address.postal_code).to eq(transaction.customer_info['BillingAddress']['PostalCode']) }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.country' do
|
37
|
+
specify { expect(billing_address.country).to eq(transaction.customer_info['BillingAddress']['Country']) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::Callback do
|
4
|
+
|
5
|
+
describe ".parse_success" do
|
6
|
+
let(:response) { PensioAPI::Callback.parse_success(file_fixture("success_callback.xml")) }
|
7
|
+
it "should return a SuccessCallback response" do
|
8
|
+
expect(response).to be_an_instance_of(PensioAPI::Responses::SuccessCallback)
|
9
|
+
expect(response.success?).to be_true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".parse_failure" do
|
14
|
+
let(:response) { PensioAPI::Callback.parse_failure(file_fixture("subscription_failure_callback.xml")) }
|
15
|
+
it "should return a SubscriptionFailureCallback response" do
|
16
|
+
expect(response).to be_an_instance_of(PensioAPI::Responses::SubscriptionFailureCallback)
|
17
|
+
expect(response.success?).to be_true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::Ecommerce do
|
4
|
+
before :each do
|
5
|
+
stub_pensio_response('/merchant/API/createPaymentRequest', 'create_payment_request')
|
6
|
+
stub_pensio_response('/merchant/API/createMultiPaymentRequest', 'create_multi_payment_request')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.create_payment_request' do
|
10
|
+
let(:response) { PensioAPI::Ecommerce.create_payment_request(reservation_arguments) }
|
11
|
+
it 'returns an instance of PensioAPI::Responses::GatewayURL' do
|
12
|
+
expect(response).to be_an_instance_of(PensioAPI::Responses::GatewayURL)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.create_multi_payment_request' do
|
17
|
+
let(:response) { PensioAPI::Ecommerce.create_multi_payment_request(reservation_arguments) }
|
18
|
+
it 'returns an instance of PensioAPI::Responses::GatewayURL' do
|
19
|
+
expect(response).to be_an_instance_of(PensioAPI::Responses::GatewayURL)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::Errors::BadRequest do
|
4
|
+
before :each do
|
5
|
+
stub_pensio_response('/merchant/API/payments', 'bad_request_error')
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:error) do
|
9
|
+
begin
|
10
|
+
PensioAPI::Transaction.find
|
11
|
+
rescue PensioAPI::Errors::BadRequest => e
|
12
|
+
end
|
13
|
+
e
|
14
|
+
end
|
15
|
+
|
16
|
+
specify { expect(error).to be_an_instance_of PensioAPI::Errors::BadRequest }
|
17
|
+
|
18
|
+
describe 'getter attributes' do
|
19
|
+
describe '.request_time' do
|
20
|
+
specify { expect(error.request_time).to be_an_instance_of(Time) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.request_path' do
|
24
|
+
specify { expect(error.request_path).to be_an_instance_of(String) }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.error_code' do
|
28
|
+
specify { expect(error.error_code).to be_an_instance_of(Fixnum) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::Errors::GatewayError do
|
4
|
+
before :each do
|
5
|
+
stub_pensio_response('/merchant/API/payments', 'pensio_error')
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:error) do
|
9
|
+
begin
|
10
|
+
PensioAPI::Transaction.find
|
11
|
+
rescue PensioAPI::Errors::GatewayError => e
|
12
|
+
end
|
13
|
+
e
|
14
|
+
end
|
15
|
+
|
16
|
+
specify { expect(error).to be_an_instance_of PensioAPI::Errors::GatewayError }
|
17
|
+
|
18
|
+
describe 'getter attributes' do
|
19
|
+
describe '.request_time' do
|
20
|
+
specify { expect(error.request_time).to be_an_instance_of(Time) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.request_path' do
|
24
|
+
specify { expect(error.request_path).to be_an_instance_of(String) }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.error_code' do
|
28
|
+
specify { expect(error.cardholder_message).to be_an_instance_of(String) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'object mapping' do
|
33
|
+
it 'maps transactions to transaction objects' do
|
34
|
+
expect(error.transactions.all? { |r| r.class == PensioAPI::Transaction }).to be_true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::FundingListRequest do
|
4
|
+
before :each do
|
5
|
+
stub_pensio_response('/merchant/API/fundingList', 'funding_list')
|
6
|
+
stub_pensio_response("http://test_user:password@localhost/merchant.php/API/fundingDownload?id=1", 'funding_download', mime_type: 'text/csv', file_ext: 'csv', base_url: '')
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:request) { PensioAPI::FundingListRequest.new(PensioAPI::FundingList.all.first.download_link) }
|
10
|
+
|
11
|
+
describe 'result' do
|
12
|
+
specify { expect(request).to respond_to(:result) }
|
13
|
+
it 'returns a parsed CSV array' do
|
14
|
+
expect(request.result.map(&:class).uniq).to eq([CSV::Row])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PensioAPI::FundingList do
|
4
|
+
let(:response) { PensioAPI::FundingList.all }
|
5
|
+
let(:funding_list) { PensioAPI::FundingList.all.first }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
stub_pensio_response('/merchant/API/fundingList', 'funding_list')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.all' do
|
12
|
+
it 'returns an instance of PensioAPI::Responses::FundingList' do
|
13
|
+
expect(response).to be_an_instance_of(PensioAPI::Responses::FundingList)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'reader_attributes' do
|
18
|
+
specify { expect(funding_list).to respond_to(:filename) }
|
19
|
+
specify { expect(funding_list).to respond_to(:amount) }
|
20
|
+
specify { expect(funding_list).to respond_to(:acquirer) }
|
21
|
+
specify { expect(funding_list).to respond_to(:funding_date) }
|
22
|
+
specify { expect(funding_list).to respond_to(:created_at) }
|
23
|
+
specify { expect(funding_list).to respond_to(:download_link) }
|
24
|
+
|
25
|
+
specify { expect(funding_list.funding_date).to be_an_instance_of(Date) }
|
26
|
+
specify { expect(funding_list.created_at).to be_an_instance_of(Date) }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.download' do
|
30
|
+
before :each do
|
31
|
+
stub_pensio_response("http://test_user:password@localhost/merchant.php/API/fundingDownload?id=1", 'funding_download', mime_type: 'text/csv', file_ext: 'csv', base_url: '')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns an array of parsed CSV' do
|
35
|
+
expect(funding_list.download.map(&:class).uniq).to eq([CSV::Row])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|