Skip to content

Commit

Permalink
Added token and fixed specs #3
Browse files Browse the repository at this point in the history
  • Loading branch information
Willianvdv committed Mar 24, 2014
1 parent c43d4bb commit 7a4a187
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 35 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '2-2-stable'
gem 'spree', github: 'spree/spree', branch: '2-2-stable'

group :test do
gem 'pg'
gem 'capybara', '~> 2.1'
gem 'database_cleaner', '~> 1.0.1'
gem 'selenium-webdriver', '~> 2.35'
Expand Down
1 change: 1 addition & 0 deletions app/assets/javascripts/spree/frontend/spree_omnikassa.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//= require spree/frontend
24 changes: 12 additions & 12 deletions app/controllers/spree/omnikassa_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ def success
when '00'
payment.send("complete!") if payment.state != 'completed'
flash[:success] = t(:payment_success)
redirect_to order_url(order)
redirect_to order_url(order, { token: order.token })
when '60'
payment.pend! if payment.state != 'pending'
flash[:error] = t(:payment_pending)
flash[:error] = t(:payment_pending)
redirect_to "/omnikassa/pending/#{payment.id}/?token=#{order.token}"
else
payment.send("failure!") if payment.state != 'failed'
Expand Down Expand Up @@ -95,7 +95,7 @@ def merchant_id
end

def order
payment.order
payment.order
end

def secret
Expand All @@ -112,21 +112,21 @@ def data_string
end

def payment_data
{:amount => amount,
:currencyCode => currency_code,
:merchantId => merchant_id,
:normalReturnUrl => normal_return_url,
:automaticResponseUrl => automatic_response_url,
:transactionReference => transaction_reference,
:keyVersion => key_version,}
{ :amount => amount,
:currencyCode => currency_code,
:merchantId => merchant_id,
:normalReturnUrl => normal_return_url,
:automaticResponseUrl => automatic_response_url,
:transactionReference => transaction_reference,
:keyVersion => key_version, }
end

def normal_return_url
"#{uri}/omnikassa/success/#{payment.id}/"
"#{uri}/omnikassa/success/#{payment.id}/?token=#{order.token}"
end

def automatic_response_url
"#{uri}/omnikassa/success/automatic/#{payment.id}/"
"#{uri}/omnikassa/success/automatic/#{payment.id}/?token=#{order.token}"
end

def transaction_reference_prefix
Expand Down
32 changes: 18 additions & 14 deletions spec/controllers/spree/omnikassa_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@

subject { Spree::OmnikassaController }

let(:order) { FactoryGirl.create :completed_order_with_totals }
let(:payment) { FactoryGirl.create :payment, order: order }
let!(:order) { FactoryGirl.create :completed_order_with_totals }
let!(:payment) { FactoryGirl.create :payment, order: order }
let(:token) { '123456790' }

before :each do
before do
controller.stub(:authorize!)
Spree::BillingIntegration::Omnikassa.create! name: 'omnikassa'
Spree::Payment.stub(:find).and_return payment
payment.stub(:order).and_return order
order.stub(:token).and_return(token)
end

describe 'GET restart' do
Expand All @@ -22,17 +26,17 @@
end

describe 'create a new payment' do
let(:restarted_payment) {
let(:restarted_payment) {
order.reload
order.payments.last
order.payments.last
}

it 'a new payment is created' do
expect(restarted_payment.state).to eq('checkout')
expect(restarted_payment.state).to eq('checkout')
end

it 'has omnikassa as payment method' do
expect(restarted_payment.payment_method.class).to eq(Spree::BillingIntegration::Omnikassa)
expect(restarted_payment.payment_method.class).to eq(Spree::BillingIntegration::Omnikassa)
end

it 'has the order outstanding amount as payment amount' do
Expand All @@ -50,12 +54,12 @@
describe 'assignment' do
it 'assigns a @data string' do
spree_get :start, payment_id: payment.id
assigns(:data).should == 'amount=4575|currencyCode=978|merchantId=1337|normalReturnUrl=http://test.host/omnikassa/success/1/|automaticResponseUrl=http://test.host/omnikassa/success/automatic/1/|transactionReference=PREFIX11|keyVersion=7'
assigns(:data).should == "amount=4575|currencyCode=978|merchantId=1337|normalReturnUrl=http://test.host/omnikassa/success/1/?token=#{token}|automaticResponseUrl=http://test.host/omnikassa/success/automatic/1/?token=#{token}|transactionReference=PREFIX11|keyVersion=7"
end

it 'assigns a @seal' do
spree_get :start, payment_id: payment.id
assigns(:seal).should == 'be356b07401bd7aa891897ae649a6af790ac940d8fa698407a84aac4678b63cf'
assigns(:seal).should == 'fc1da0e684ff56716aed9f38b3fc08f581fc6541f496706e7c246b0a6ad463d4'
end

it 'assigns a @url' do
Expand All @@ -73,11 +77,11 @@

describe 'GET error' do
before :each do
spree_get :error, payment_id: payment.id, token: payment.order.token
spree_get :error, payment_id: payment.id, token: token
end

it 'assigns a @order' do
expect(assigns(:order)).to eq(order)
expect(assigns(:order)).to eq(order)
end
end

Expand Down Expand Up @@ -107,7 +111,7 @@
end

it 'redirects to the checkout' do
u = "http://test.host/orders/#{payment.order.number}"
u = "http://test.host/orders/#{payment.order.number}?token=#{token}"
expect(response.response_code).to redirect_to(u)
end
end
Expand All @@ -128,7 +132,7 @@
end

it 'redirects to the checkout' do
u = "http://test.host/omnikassa/pending/#{payment.id}/?token=#{payment.order.token}"
u = "http://test.host/omnikassa/pending/#{payment.id}/?token=#{token}"
expect(response.response_code).to redirect_to(u)
end
end
Expand All @@ -145,7 +149,7 @@
end

it 'redirects to the omnikassa error action' do
u = "http://test.host/omnikassa/error/#{payment.id}/?token=#{payment.order.token}"
u = "http://test.host/omnikassa/error/#{payment.id}/?token=#{token}"
expect(response.response_code).to redirect_to(u)
end
end
Expand Down
22 changes: 13 additions & 9 deletions spec/features/frontend/checkout_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
let!(:omnikassa_payment_method) { create(:omnikassa_payment_method) }

before do
page.driver.headers = { "Accept-Language" => "nl-nl" }
stock_location.stock_items.update_all(count_on_hand: 1)

reset_spree_preferences do |config|
config.currency = "EUR"
config.omnikassa_url = 'https://payment-webinit.simu.omnikassa.rabobank.nl/paymentServlet'
Expand All @@ -36,34 +39,35 @@

it 'redirects to omnikassa' do
goto_omnikassa

# TODO: check: Is this omnikassa?
expect(current_path).to match 'payment/selectpaymentmethod'
end

it 'success after omnikassa' do
goto_omnikassa
do_omnikassa_ideal_payment #TODO: Shall I mock this?

# TODO: check: Is this the success return page?
do_omnikassa_ideal_payment
expect(current_path).to start_with '/orders/R' # Don't know the current order number
end
end
end


def goto_omnikassa
visit spree.checkout_state_path(:payment)
choose('Omnikassa')
click_button "Save and Continue"
click_button "Place"
sleep 3 if Capybara.javascript_driver == :poltergeist # Wait for redirect
end

def do_omnikassa_ideal_payment
first('.paymentmeanbutton:nth-child(2) > a').click
click_button "Akkoord"
click_button "Bevestig de transactie"
click_link "Verder"
sleep 3 if Capybara.javascript_driver == :poltergeist # Wait for redirect

# Accept SSL warning
a = page.driver.browser.switch_to.alert
a.accept
if Capybara.javascript_driver == :selenium
# Accept SSL warning
a = page.driver.browser.switch_to.alert
a.accept
end
end
7 changes: 7 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@
Capybara.javascript_driver = :poltergeist
end

Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
}
Capybara::Poltergeist::Driver.new(app, options)
end

RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, :type => :controller
Expand Down

0 comments on commit 7a4a187

Please sign in to comment.