Add EveryPay payments

* Refactor BankLink into Payments::BankLink, add Payments::EveryPay
* Write tests for existing invoice views
* Write basic tests for Payments module
This commit is contained in:
Maciej Szlosarczyk 2018-04-11 11:55:52 +03:00
parent f7c2b25a66
commit c5591b4828
No known key found for this signature in database
GPG key ID: 41D62D42D3B0D765
32 changed files with 818 additions and 31 deletions

View file

@ -0,0 +1,54 @@
require 'test_helper'
class BankLinkTest < ActiveSupport::TestCase
def setup
super
@original_methods = ENV['payment_methods']
@original_seb_URL = ENV['seb_payment_url']
ENV['payment_methods'] = 'seb, swed, credit_card'
ENV['seb_payment_url'] = 'https://example.com/seb_url'
ENV['seb_seller_account'] = 'SEB'
ENV['seb_bank_certificate'] = 'test/fixtures/files/seb_bank_cert.pem'
ENV['seb_seller_certificate'] = 'test/fixtures/files/seb_seller_key.pem'
@invoice = invoices(:valid)
params = {return_url: 'return.url', response_url: 'response_url'}
@bank_link = Payments::BankLink.new('seb', @invoice, params)
travel_to '2018-04-01 00:30'
end
def teardown
super
ENV['payment_methods'] = @original_methods
ENV['seb_payment_url'] = @original_seb_URL
travel_back
end
def test_form_fields
expected_response = {
"VK_SERVICE": "1012",
"VK_VERSION": "008",
"VK_SND_ID": "SEB",
"VK_STAMP": nil,
"VK_AMOUNT": nil,
"VK_CURR": "EUR",
"VK_REF": "",
"VK_MSG": "Order nr. ",
"VK_RETURN": "return.url",
"VK_CANCEL": "return.url",
"VK_DATETIME": "2018-04-01T00:30:00+0300",
"VK_MAC": "fPHKfBNwtyQI5ec1pnrlIUJI6nerGPwnoqx0K9/g40hsgUmum4QE1Eq992FR73pRXyE2+1dUuahEd3s57asM7MOD2Pb8SALA/+hi3jlqjiAAThdikDuJ+83LogSKQljLdd0BHwqe+O0WPeKaOmP2/HltOEIHpY3d399JAi1t7YA=",
"VK_ENCODING": "UTF-8",
"VK_LANG": "ENG"
}.with_indifferent_access
assert_equal expected_response, @bank_link.form_fields
end
def test_is_not_valid_without_response
assert_equal false, @bank_link.valid_response?
end
end

View file

@ -0,0 +1,64 @@
require 'test_helper'
class EveryPayTest < ActiveSupport::TestCase
def setup
super
@original_methods = ENV['payment_methods']
@original_seb_URL = ENV['seb_payment_url']
ENV['payment_methods'] = 'seb, swed, credit_card'
ENV['seb_payment_url'] = 'https://example.com/seb_url'
ENV['seb_seller_account'] = 'SEB'
ENV['seb_bank_certificate'] = 'test/fixtures/files/seb_bank_cert.pem'
ENV['seb_seller_certificate'] = 'test/fixtures/files/seb_seller_key.pem'
@invoice = invoices(:valid)
params = {
response:
{
utf8:"",
_method: "put",
authenticity_token: "OnA69vbccQtMt3C9wxEWigs5Gpf/7z+NoxRCMkFPlTvaATs8+OgMKF1I4B2f+vuK37zCgpWZaWWtyuslRRSwkw==",
nonce: "8a9063b3c13edb00522d446481cb1886",
timestamp: "1524036436",
api_username: "ca8d6336dd750ddb",
transaction_result: "completed",
payment_reference: "3380fc36f02a7c1d2b0a700794e7a6ef8683191b3f0dc88b762e72c6e573adaf",
payment_state: "settled",
amount: "240.0",
order_reference: "59fa7f639211d1e14952bad73ccb50",
account_id: "EUR3D1",
cc_type: "master_card",
cc_last_four_digits: "0487",
cc_month: "10",
cc_year: "2018",
cc_holder_name: "John Doe",
hmac_fields: "account_id,amount,api_username,cc_holder_name,cc_last_four_digits,cc_month,cc_type,cc_year,hmac_fields,nonce,order_reference,payment_reference,payment_state,timestamp,transaction_result",
hmac: "d5b11b001b248532ad5af529f072b5b76347936a",
controller: "registrar/payments",
action: "back",
bank: "every_pay"
},
}
@every_pay = Payments::EveryPay.new('every_pay', @invoice, params)
travel_to '2018-04-01 00:30'
end
def teardown
super
ENV['payment_methods'] = @original_methods
ENV['seb_payment_url'] = @original_seb_URL
travel_back
end
def test_form_fields
end
def test_is_not_valid_without_response
end
def test_validation
end
end

View file

@ -0,0 +1,58 @@
require 'test_helper'
class PaymentTest < ActiveSupport::TestCase
def setup
super
@original_methods = ENV['payment_methods']
@original_seb_URL = ENV['seb_payment_url']
ENV['payment_methods'] = 'seb, swed, credit_card'
ENV['seb_payment_url'] = nil
@not_implemented_payment = Payments::Base.new(
'not_implemented', Invoice.new
)
end
def teardown
super
ENV['payment_methods'] = @original_methods
ENV['seb_payment_url'] = @original_seb_URL
end
def test_variable_assignment
assert_equal 'not_implemented', @not_implemented_payment.type
assert_nil @not_implemented_payment.response_url
assert_nil @not_implemented_payment.return_url
assert_nil @not_implemented_payment.form_url
end
def test_that_errors_are_raised_on_not_implemented_methods
assert_raise NotImplementedError do
@not_implemented_payment.valid_response?
end
assert_raise NotImplementedError do
@not_implemented_payment.settled_payment?
end
assert_raise NotImplementedError do
@not_implemented_payment.form_fields
end
assert_raise NotImplementedError do
@not_implemented_payment.complete_transaction
end
end
def test_that_create_with_type_raises_argument_error
assert_raise ArgumentError do
Payments.create_with_type("not_implemented", Invoice.new)
end
end
def test_create_with_correct_subclass
payment = Payments.create_with_type('seb', Invoice.new)
assert_equal Payments::BankLink, payment.class
end
end