remove legacy checkout tests

This commit is contained in:
Mohamed ABDELLANI
2023-06-01 05:51:32 +01:00
committed by Filipe
parent 907c65d98c
commit bd0e7cdfc8
24 changed files with 216 additions and 850 deletions

View File

@@ -379,6 +379,7 @@ describe Admin::BulkLineItemsController, type: :controller do
order.shipments.map(&:refresh_rates)
order.select_shipping_method(shipping_method.id)
OrderWorkflow.new(order).advance_to_payment
order.finalize!
order.recreate_all_fees!
order.create_tax_charge!

View File

@@ -74,8 +74,6 @@ Please try again!"
context "using split checkout" do
before do
Flipper.enable(:split_checkout)
order.update_attribute :state, "confirmation"
end

View File

@@ -16,8 +16,6 @@ describe SplitCheckoutController, type: :controller do
let(:shipping_method) { distributor.shipping_methods.first }
before do
Flipper.enable(:split_checkout)
exchange.variants << order.line_items.first.variant
allow(controller).to receive(:current_order) { order }
allow(controller).to receive(:spree_current_user) { user }

View File

@@ -37,8 +37,6 @@ describe InjectionHelper, type: :helper do
order = create(:order, distributor: current_distributor)
allow(helper).to receive(:current_order) { order }
allow(helper).to receive(:spree_current_user) { nil }
expect(helper.inject_available_shipping_methods).to match sm.id.to_s
expect(helper.inject_available_shipping_methods).to match sm.compute_amount(order).to_s
end
it "injects payment methods" do
@@ -47,8 +45,6 @@ describe InjectionHelper, type: :helper do
order = create(:order, distributor: current_distributor)
allow(helper).to receive(:current_order) { order }
allow(helper).to receive(:spree_current_user) { nil }
expect(helper.inject_available_payment_methods).to match pm.id.to_s
expect(helper.inject_available_payment_methods).to match pm.name
end
it "injects current order" do

View File

@@ -1,24 +0,0 @@
describe "AccordionCtrl", ->
ctrl = null
scope = null
CurrentHubMock =
hub:
id: 1
beforeEach ->
module "Darkswarm"
module ($provide)->
$provide.value "CurrentHub", CurrentHubMock
null
inject ($controller, $rootScope) ->
scope = $rootScope.$new()
scope.order =
id: 129
ctrl = $controller 'AccordionCtrl', {$scope: scope}
it "defaults the details accordion to visible", ->
expect(scope.accordion.details).toEqual true
it "changes accordion", ->
scope.show "shipping"
expect(scope.accordion["shipping"]).toEqual true

View File

@@ -1,100 +0,0 @@
describe "CheckoutCtrl", ->
ctrl = null
scope = null
Checkout = null
CurrentUser = null
CurrentHubMock =
hub:
id: 1
localStorageService = null
beforeEach ->
module("Darkswarm")
angular.module('Darkswarm').value('user', {})
angular.module('Darkswarm').value('currentHub', {id: 1})
module ($provide)->
$provide.value "CurrentHub", CurrentHubMock
null
Checkout =
purchase: ->
submit: ->
navigate: ->
bindFieldsToLocalStorage: ->
order:
id: 1
email: "public"
user_id: 1
bill_address: 'bill_address'
ship_address: 'ship address'
secrets:
card_number: "this is a secret"
describe "with user", ->
beforeEach ->
inject ($controller, $rootScope, _localStorageService_) ->
localStorageService = _localStorageService_
spyOn(localStorageService, "bind").and.callThrough()
scope = $rootScope.$new()
CurrentUser = { id: 1 }
ctrl = $controller 'CheckoutCtrl', {$scope: scope, Checkout: Checkout, CurrentUser: CurrentUser }
describe "submitting", ->
event =
preventDefault: ->
beforeEach ->
spyOn(Checkout, "purchase")
scope.submitted = false
it "delegates to the service when valid", ->
scope.purchase(event, {$valid: true})
expect(Checkout.purchase).toHaveBeenCalled()
expect(scope.submitted).toBe(true)
it "does nothing when invalid", ->
scope.purchase(event, {$valid: false})
expect(Checkout.purchase).not.toHaveBeenCalled()
expect(scope.submitted).toBe(true)
it "is enabled", ->
expect(scope.enabled).toEqual true
describe "Local storage", ->
it "binds to localStorage when given a scope", inject ($timeout) ->
prefix = "order_#{scope.order.id}#{CurrentUser.id or ""}#{CurrentHubMock.hub.id}"
field = scope.fieldsToBind[0]
expect(localStorageService.bind).toHaveBeenCalledWith(scope, "Checkout.order.#{field}", Checkout.order[field], "#{prefix}_#{field}")
expect(localStorageService.bind).toHaveBeenCalledWith(scope, "Checkout.ship_address_same_as_billing", true, "#{prefix}_sameasbilling")
expect(localStorageService.bind).toHaveBeenCalledWith(scope, "Checkout.default_bill_address", false, "#{prefix}_defaultasbilladdress")
expect(localStorageService.bind).toHaveBeenCalledWith(scope, "Checkout.default_ship_address", false, "#{prefix}_defaultasshipaddress")
it "it can retrieve data from localstorage", ->
prefix = "order_#{scope.order.id}#{CurrentUser.id or ""}#{CurrentHubMock.hub.id}"
scope.$digest()
expect(localStorage.getItem("ls.#{prefix}_email")).toMatch "public"
it "does not store secrets in local storage", ->
Checkout.secrets =
card_number: "superfuckingsecret"
scope.$digest()
keys = (localStorage.key(i) for i in [0..localStorage.length])
for key in keys
expect(localStorage.getItem(key)).not.toMatch Checkout.secrets.card_number
describe "without user", ->
beforeEach ->
inject ($controller, $rootScope) ->
scope = $rootScope.$new()
ctrl = $controller 'CheckoutCtrl', {$scope: scope, Checkout: Checkout, CurrentUser: {}}
it "is disabled", ->
expect(scope.enabled).toEqual false
it "does not store secrets in local storage", ->
Checkout.secrets =
card_number: "superfuckingsecret"
scope.$digest()
keys = (localStorage.key(i) for i in [0..localStorage.length])
for key in keys
expect(localStorage.getItem(key)).not.toMatch Checkout.secrets.card_number

View File

@@ -1,37 +0,0 @@
describe "DetailsCtrl", ->
ctrl = null
scope = null
order = null
CurrentUser = null
beforeEach ->
module("Darkswarm")
inject ($controller, $rootScope) ->
scope = $rootScope.$new()
CurrentUser = { id: 1 }
ctrl = $controller 'DetailsCtrl', { $scope: scope, CurrentUser: CurrentUser }
it "finds a field by path", ->
scope.details =
path: "test"
expect(scope.field('path')).toEqual "test"
it "tests validity", ->
scope.details =
path:
$dirty: true
$invalid: true
expect(scope.fieldValid('path')).toEqual false
it "returns errors by path", ->
scope.Order =
errors: ->
scope.details =
path:
$error:
email: true
required: true
expect(scope.fieldErrors('path')).toEqual ["must be email address", "can't be blank"].join ", "

View File

@@ -1,17 +0,0 @@
describe "PaymentCtrl", ->
ctrl = null
scope = null
card1 = { id: 1, is_default: false }
card2 = { id: 3, is_default: true }
cards = [card1, card2]
beforeEach ->
module("Darkswarm")
angular.module('Darkswarm').value('savedCreditCards', cards)
inject ($controller, $rootScope) ->
scope = $rootScope.$new()
scope.secrets = {}
ctrl = $controller 'PaymentCtrl', {$scope: scope}
it "sets the default card id as the selected_card", ->
expect(scope.secrets.selected_card).toEqual card2.id

View File

@@ -1,164 +0,0 @@
describe "ShopVariantCtrl", ->
ctrl = null
scope = null
CartMock = null
beforeEach ->
module 'Darkswarm'
inject ($rootScope, $controller, $modal)->
scope = $rootScope.$new()
scope.$watchGroup = ->
scope.variant = {
on_demand: true
product: {group_buy: true}
line_item: {
quantity: undefined
max_quantity: undefined
}
}
CartMock =
adjust: ->
true
ctrl = $controller 'ShopVariantCtrl', {$scope: scope, $modal: $modal, Cart: CartMock, Shopfront: {}}
it "initializes the quantity for shop display", ->
expect(scope.variant.line_item.quantity).toEqual 0
it "adds an item to the cart", ->
scope.add 1
expect(scope.variant.line_item.quantity).toEqual 1
it "adds to the existing quantity", ->
scope.add 1
scope.add 5
expect(scope.variant.line_item.quantity).toEqual 6
it "adds to an invalid quantity", ->
scope.$apply ->
scope.variant.line_item.quantity = -5
scope.add 1
expect(scope.variant.line_item.quantity).toEqual 1
it "adds to an undefined quantity", ->
scope.$apply ->
scope.variant.line_item.quantity = undefined
scope.add 1
expect(scope.variant.line_item.quantity).toEqual 1
it "adds to the max quantity", ->
scope.addMax 5
expect(scope.variant.line_item.quantity).toEqual 0
expect(scope.variant.line_item.max_quantity).toEqual 5
it "adds to an undefined max quantity", ->
scope.variant.line_item.quantity = 3
scope.variant.line_item.max_quantity = undefined
scope.addMax 1
expect(scope.variant.line_item.max_quantity).toEqual 4
it "adds to the max quantity to be at least min quantity", ->
scope.$apply ->
scope.variant.line_item.max_quantity = 2
scope.$apply ->
scope.add 3
expect(scope.variant.line_item.quantity).toEqual 3
expect(scope.variant.line_item.max_quantity).toEqual 3
it "decreases the min quantity to not exceed max quantity", ->
scope.$apply ->
scope.variant.line_item.quantity = 3
scope.variant.line_item.max_quantity = 5
scope.$apply ->
scope.addMax -3
expect(scope.variant.line_item.quantity).toEqual 2
expect(scope.variant.line_item.max_quantity).toEqual 2
it "caps at the available quantity", ->
scope.$apply ->
scope.variant.on_demand = false
scope.variant.on_hand = 3
scope.variant.line_item.quantity = 5
scope.variant.line_item.max_quantity = 7
expect(scope.variant.line_item.quantity).toEqual 3
expect(scope.variant.line_item.max_quantity).toEqual 3
it "allows adding when variant is on demand", ->
expect(scope.canAdd(5000)).toEqual true
it "denies adding if variant is out of stock", ->
scope.variant.on_demand = false
scope.variant.on_hand = 0
expect(scope.canAdd(1)).toEqual false
it "denies adding if stock is limitted", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
expect(scope.canAdd(4)).toEqual true
expect(scope.canAdd(5)).toEqual true
expect(scope.canAdd(6)).toEqual false
scope.add 3
expect(scope.canAdd(2)).toEqual true
expect(scope.canAdd(3)).toEqual false
it "denies adding if quantity is too high", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
scope.variant.line_item.quantity = 7
scope.variant.line_item.max_quantity = 7
expect(scope.canAdd(1)).toEqual false
expect(scope.canAddMax(1)).toEqual false
it "allows decrease when quantity is too high", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
scope.variant.line_item.quantity = 7
scope.variant.line_item.max_quantity = 7
expect(scope.canAdd(-1)).toEqual true
expect(scope.canAddMax(-1)).toEqual true
it "allows increase when quantity is negative", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
scope.variant.line_item.quantity = -3
scope.variant.line_item.max_quantity = -3
expect(scope.canAdd(1)).toEqual true
expect(scope.canAddMax(1)).toEqual false
scope.variant.line_item.quantity = 1
expect(scope.canAddMax(1)).toEqual true
it "denies decrease when quantity is negative", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
scope.variant.line_item.quantity = -3
scope.variant.line_item.max_quantity = -3
expect(scope.canAdd(-1)).toEqual false
expect(scope.canAddMax(-1)).toEqual false
it "denies declaring max quantity before item is in cart", ->
expect(scope.canAddMax(1)).toEqual false
it "allows declaring max quantity when item is in cart", ->
scope.add 1
expect(scope.canAddMax(1)).toEqual true
it "denies adding if stock is limitted", ->
scope.variant.on_demand = false
scope.variant.on_hand = 5
scope.variant.line_item.quantity = 1
scope.variant.line_item.max_quantity = 1
expect(scope.canAddMax(3)).toEqual true
expect(scope.canAddMax(4)).toEqual true
expect(scope.canAddMax(5)).toEqual false
expect(scope.canAddMax(6)).toEqual false

View File

@@ -224,7 +224,7 @@ module Spree
}
let(:tax_category) { create(:tax_category, name: "Shipping", tax_rates: [tax_rate] ) }
let(:hub) { create(:distributor_enterprise, charges_sales_tax: true) }
let(:order) { create(:order, distributor: hub) }
let(:order) { create(:order, distributor: hub, state: 'payment') }
let(:line_item) { create(:line_item, order: order) }
let(:shipping_method) {
@@ -348,7 +348,7 @@ module Spree
let(:line_item) { create(:line_item, variant: variant) }
let(:order) {
create(:order, line_items: [line_item], order_cycle: order_cycle,
distributor: coordinator)
distributor: coordinator, state: 'payment')
}
let(:fee) { order.all_adjustments.reload.enterprise_fee.first }
let(:fee_tax) { fee.adjustments.tax.first }
@@ -508,7 +508,7 @@ module Spree
let!(:zone) { create(:zone_with_member) }
let!(:tax_category) { create(:tax_category, name: "Tax Test") }
let(:distributor) { create(:distributor_enterprise, charges_sales_tax: true) }
let(:order) { create(:order, distributor: distributor) }
let(:order) { create(:order, distributor: distributor, state: "payment") }
let(:included_in_price) { true }
let(:tax_rate) {
create(:tax_rate, included_in_price: included_in_price, zone: zone,

View File

@@ -10,8 +10,9 @@ describe Spree::Order::Checkout do
[
{ address: :delivery },
{ delivery: :payment },
{ payment: :complete },
{ delivery: :complete }
{ delivery: :confirmation },
{ payment: :confirmation },
{ confirmation: :complete }
]
end
@@ -36,14 +37,14 @@ describe Spree::Order::Checkout do
context "when payment not required" do
before { allow(order).to receive_messages payment_required?: false }
specify do
expect(order.checkout_steps).to eq %w(address delivery complete)
expect(order.checkout_steps).to eq %w(address delivery confirmation complete)
end
end
context "when payment required" do
before { allow(order).to receive_messages payment_required?: true }
specify do
expect(order.checkout_steps).to eq %w(address delivery payment complete)
expect(order.checkout_steps).to eq %w(address delivery payment confirmation complete)
end
end
end
@@ -112,9 +113,9 @@ describe Spree::Order::Checkout do
allow(order).to receive_messages payment_required?: false
end
it "transitions to complete" do
it "transitions to confirmation" do
order.next!
expect(order.state).to eq "complete"
expect(order.state).to eq 'confirmation'
end
end
end

View File

@@ -24,6 +24,8 @@ describe Spree::Order do
before { allow(order).to receive_messages process_payments!: true }
it "should finalize order when transitioning to complete state" do
order.next
expect(order.state).to eq "confirmation"
expect(order).to receive(:finalize!)
order.next!
end
@@ -32,6 +34,8 @@ describe Spree::Order do
before { allow(order).to receive_messages process_payments!: false }
it "should still complete the order" do
order.next
expect(order.state).to eq "confirmation"
order.next
expect(order.state).to eq "complete"
end
@@ -42,6 +46,8 @@ describe Spree::Order do
before { allow(order).to receive_messages process_payments!: false }
it "can transition to complete" do
order.next
expect(order.state).to eq "confirmation"
order.next
expect(order.state).to eq "complete"
end

View File

@@ -152,6 +152,10 @@ module Spree
label: "legacy", originator_type: "Spree::TaxRate")
}
before do
order.update(state: "payment")
end
it "removes any legacy tax adjustments on order" do
order.create_tax_charge!

View File

@@ -690,6 +690,7 @@ describe Spree::Order do
before do
allow(order).to receive(:tax_zone) { shipping_tax_rate.zone }
order.update_attribute(:state, 'payment')
order.reload
order.create_tax_charge!
end
@@ -1269,7 +1270,8 @@ describe Spree::Order do
order.next!
order.payments << create(:payment, order: order)
expect { order.next! }.to change { order.state }.from("payment").to("complete")
expect { order.next! }.to change { order.state }.from("payment").to("confirmation")
expect { order.next! }.to change { order.state }.from("confirmation").to("complete")
end
end
@@ -1303,7 +1305,8 @@ describe Spree::Order do
it "skips the payment state" do
advance_to_delivery_state(order)
expect { order.next! }.to change { order.state }.from("delivery").to("complete")
expect { order.next! }.to change { order.state }.from("delivery").to("confirmation")
expect { order.next! }.to change { order.state }.from("confirmation").to("complete")
end
end
end

View File

@@ -37,28 +37,13 @@ describe 'checkout endpoints', type: :request do
context "when getting the cart `/checkout/cart`" do
let(:path) { "/checkout/cart" }
context "using the legacy checkout" do
it "do not redirect" do
get path
puts response.redirect_url
expect(response.status).to eq(200)
end
end
it "redirect to the split checkout" do
get path
expect(response.status).to redirect_to("/checkout")
context "using the split checkout" do
before do
# feature toggle is enabled
Flipper.enable(:split_checkout)
end
it "redirect to the split checkout" do
get path
expect(response.status).to redirect_to("/checkout")
# follow the redirect
get response.redirect_url
expect(response.status).to redirect_to("/checkout/details")
end
# follow the redirect
get response.redirect_url
expect(response.status).to redirect_to("/checkout/details")
end
end
end

View File

@@ -10,8 +10,6 @@ describe VoucherAdjustmentsController, type: :request do
let!(:adjustment) { voucher.create_adjustment(voucher.code, order) }
before do
Flipper.enable(:split_checkout)
# Make sure the order is created by the order user, the factory doesn't set ip properly
order.created_by = user
order.save!

View File

@@ -1,85 +0,0 @@
# frozen_string_literal: true
require 'spec_helper'
describe Checkout::FormDataAdapter do
describe '#params' do
let(:params) { { "order" => { "order_id" => "123" } } }
let(:order) { create(:order) }
let(:user) { create(:user) }
let(:adapter) { Checkout::FormDataAdapter.new(params, order, user) }
it "returns the :order item in the params provided" do
expect(adapter.params[:order]).to eq params["order"]
end
describe "when payment_attributes are provided" do
before { params["order"]["payments_attributes"] = [{ "payment_method_id" => "123" }] }
describe "and source attributes are provided" do
let(:source_attributes) { { "payment_method_name" => "Pay at the farm" } }
before { params["payment_source"] = { "123" => source_attributes } }
it "moves payment source attributes to the order payment attributes" do
expect(adapter.params[:order][:payments_attributes].
first[:source_attributes]).to eq source_attributes
end
end
describe "and order total is not zero" do
before { order.total = "50.0" }
it "sets the payment attributes amount to the order total" do
expect(adapter.params[:order][:payments_attributes].first[:amount]).to eq order.total
end
end
describe "and a credit card is provided" do
before do
params["order"]["payments_attributes"].first["source_attributes"] =
{ "number" => "4444333322221111" }
end
it "fills in missing credit card brand" do
expect(adapter.params[:order][:payments_attributes].first[:source_attributes][:cc_type]).to eq "visa"
end
it "leaves an existing credit card brand" do
params["order"]["payments_attributes"].first["source_attributes"]["cc_type"] = "test"
expect(adapter.params[:order][:payments_attributes].first[:source_attributes][:cc_type]).to eq "test"
end
it "doesn't touch the credit card brand without a number" do
params["order"]["payments_attributes"].first["source_attributes"]["number"] = ""
expect(adapter.params[:order][:payments_attributes].first[:source_attributes].key?(:cc_type)).to eq false
end
end
describe "and existing credit card is provided" do
before { params["order"]["existing_card_id"] = credit_card.id }
describe "and credit card is owned by current user" do
let(:credit_card) { create(:credit_card, user_id: user.id) }
before { params["order"]["existing_card_id"] = credit_card.id }
it "adds card details to payment attributes" do
expect(adapter.params[:order][:payments_attributes].first[:source][:id]).to eq credit_card.id
expect(adapter.params[:order][:payments_attributes].
first[:source][:last_digits]).to eq credit_card.last_digits
end
end
describe "and credit card is not owned by current user" do
let(:credit_card) { create(:credit_card) }
it "raises exception if credit card provided doesnt belong to the current user" do
expect { adapter.params[:order] }.to raise_error Spree::Core::GatewayError
end
end
end
end
end
end

View File

@@ -578,7 +578,7 @@ describe '
}
let(:order1) {
create(:order, order_cycle: order_cycle, distributor: user1.enterprises.first,
shipments: [shipment], bill_address: bill_address)
shipments: [shipment], bill_address: bill_address, state: 'payment')
}
let(:product1) {
create(:taxed_product, zone: zone, price: 12.54, tax_rate_amount: 0, sku: 'sku1')

View File

@@ -174,18 +174,6 @@ describe "full-page cart" do
end
end
describe "tax" do
before do
add_enterprise_fee enterprise_fee
add_product_to_cart order, product_with_tax
visit main_app.cart_path
end
it "shows the total tax for the order, including product tax and tax on fees" do
expect(page).to have_selector '.tax-total', text: '11.00' # 10 + 1
end
end
describe "updating quantities" do
let(:li) { order.line_items.reload.last }
let(:variant) { product_with_tax.variants.first }

View File

@@ -29,66 +29,42 @@ describe "As a consumer I want to check out my cart" do
add_product_to_cart order, product
end
shared_examples "with different checkout types" do |checkout_type|
context "on #{checkout_type}" do
it "does not render the login form when logged in" do
login_as user
visit checkout_path
within "section[role='main']" do
expect(page).to have_no_content "Login"
expect(page).to have_checkout_details
end
end
it "renders the login buttons when logged out" do
visit checkout_path
within "section[role='main']" do
expect(page).to have_content "Login"
click_button "Login"
end
expect(page).to have_login_modal
end
describe "logging in" do
before do
visit checkout_path
within("section[role='main']") { click_button "Login" }
expect(page).to have_login_modal
fill_in "Email", with: user.email
fill_in "Password", with: user.password
within(".login-modal") { click_button 'Login' }
end
context "and populating user details on (#{checkout_type})",
if: checkout_type.eql?("legacy_checkout") do
it "toggles the Details section" do
expect(page).to have_content "Your details"
page.find(:css, "i.ofn-i_052-point-down").click
end
end
context "and populating user details on (#{checkout_type})",
if: checkout_type.eql?("split_checkout") do
it "should allow proceeding to the next step" do
expect(page).to have_content("Logged in successfully")
click_button "Next - Payment method"
expect(page).to have_button("Next - Order summary")
end
end
context "on split_checkout" do
it "does not render the login form when logged in" do
login_as user
visit checkout_path
within "section[role='main']" do
expect(page).to have_no_content "Login"
expect(page).to have_checkout_details
end
end
end
describe "shared examples" do
context "legacy checkout" do
it_behaves_like "with different checkout types", "legacy_checkout"
it "renders the login buttons when logged out" do
visit checkout_path
within "section[role='main']" do
expect(page).to have_content "Login"
click_button "Login"
end
expect(page).to have_login_modal
end
context "split checkout" do
describe "logging in" do
before do
Flipper.enable(:split_checkout)
visit checkout_path
within("section[role='main']") { click_button "Login" }
expect(page).to have_login_modal
fill_in "Email", with: user.email
fill_in "Password", with: user.password
within(".login-modal") { click_button 'Login' }
end
context "and populating user details on (split_checkout)" do
it "should allow proceeding to the next step" do
expect(page).to have_content("Logged in successfully")
click_button "Next - Payment method"
expect(page).to have_button("Next - Order summary")
end
end
include_examples "with different checkout types", "split_checkout"
end
end
@@ -98,24 +74,6 @@ describe "As a consumer I want to check out my cart" do
checkout_as_guest
expect(page).to have_checkout_details
end
it "asks the user to log in if they are using a registered email" do
visit checkout_path
checkout_as_guest
fill_in 'First Name', with: 'Not'
fill_in 'Last Name', with: 'Guest'
fill_in 'Email', with: user.email
fill_in 'Phone', with: '098712736'
within '#details' do
click_button 'Next'
end
expect(page).to have_selector 'div.login-modal'
expect(page).to have_content 'This email address is already registered. Please log in '\
'to continue, or go back and use another email address.'
end
end
end
end

View File

@@ -70,8 +70,6 @@ describe "As a consumer, I want to checkout my order" do
}
before do
Flipper.enable(:split_checkout)
add_enterprise_fee enterprise_fee
set_order order

View File

@@ -82,158 +82,95 @@ describe "As a consumer, I want to see adjustment breakdown" do
end
describe "for a customer with shipping address within the tax zone" do
context "on legacy checkout" do
before do
set_order order_within_zone
login_as(user_within_zone)
end
it "will be charged tax on the order" do
visit checkout_path
find(:xpath, '//*[@id="shipping"]/ng-form/dd').click
choose free_shipping.name.to_s
within "#payment" do
choose free_payment.name.to_s
end
click_on "Place order now"
# UI checks
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).to have_selector('#tax-row', text: with_currency(1.15))
# DB checks
assert_db_tax_incl
end
before do
set_order order_within_zone
login_as(user_within_zone)
end
context "on split-checkout" do
before do
Flipper.enable(:split_checkout)
it "will be charged tax on the order" do
visit checkout_step_path(:details)
set_order order_within_zone
login_as(user_within_zone)
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
click_on "Complete order"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).to have_selector('#tax-row', text: with_currency(1.15))
# DB checks
assert_db_tax_incl
end
context "when using a voucher" do
let!(:voucher) do
create(:voucher, code: 'some_code', enterprise: distributor, amount: 10)
end
it "will be charged tax on the order" do
it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
choose "Delivery"
click_button "Next - Payment method"
# add Voucher
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")
# Choose payment
click_on "Next - Order summary"
click_on "Complete order"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).to have_selector('#order_total', text: with_currency(0.00))
expect(page).to have_selector('#tax-row', text: with_currency(1.15))
# DB checks
assert_db_tax_incl
end
context "when using a voucher" do
let!(:voucher) do
create(:voucher, code: 'some_code', enterprise: distributor, amount: 10)
# Voucher
within "#line-items" do
expect(page).to have_content(voucher.code)
expect(page).to have_content(with_currency(-10.00))
end
it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
# DB check
order_within_zone.reload
voucher_adjustment = order_within_zone.voucher_adjustments.first
choose "Delivery"
click_button "Next - Payment method"
# add Voucher
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")
# Choose payment
click_on "Next - Order summary"
click_on "Complete order"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(0.00))
expect(page).to have_selector('#tax-row', text: with_currency(1.15))
# Voucher
within "#line-items" do
expect(page).to have_content(voucher.code)
expect(page).to have_content(with_currency(-10.00))
end
# DB check
order_within_zone.reload
voucher_adjustment = order_within_zone.voucher_adjustments.first
expect(voucher_adjustment.amount.to_f).to eq(-10)
expect(voucher_adjustment.included_tax.to_f).to eq(-1.15)
end
expect(voucher_adjustment.amount.to_f).to eq(-10)
expect(voucher_adjustment.included_tax.to_f).to eq(-1.15)
end
end
end
describe "for a customer with shipping address outside the tax zone" do
context "on legacy checkout" do
before do
set_order order_outside_zone
login_as(user_outside_zone)
end
it "will not be charged tax on the order" do
pending("#7540")
visit checkout_path
find(:xpath, '//*[@id="shipping"]/ng-form/dd').click
choose free_shipping.name.to_s
within "#payment" do
choose free_payment.name.to_s
end
click_on "Place order now"
# UI checks
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
# DB checks
assert_db_no_tax_incl
end
before do
set_order order_outside_zone
login_as(user_outside_zone)
end
context "on split-checkout" do
before do
Flipper.enable(:split_checkout)
it "will not be charged tax on the order" do
pending("#7540")
visit checkout_step_path(:details)
set_order order_outside_zone
login_as(user_outside_zone)
end
choose "Delivery"
check "order_save_bill_address"
check "ship_address_same_as_billing"
it "will not be charged tax on the order" do
pending("#7540")
visit checkout_step_path(:details)
click_button "Next - Payment method"
click_on "Next - Order summary"
click_on "Complete order"
choose "Delivery"
check "order_save_bill_address"
check "ship_address_same_as_billing"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
click_button "Next - Payment method"
click_on "Next - Order summary"
click_on "Complete order"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
# DB checks
assert_db_no_tax_incl
end
# DB checks
assert_db_no_tax_incl
end
end
end

View File

@@ -88,207 +88,141 @@ describe "As a consumer, I want to see adjustment breakdown" do
end
describe "for a customer with shipping address within the tax zone" do
context "on legacy checkout" do
before do
set_order order_within_zone
login_as(user_within_zone)
end
it "will be charged tax on the order" do
visit checkout_path
find(:xpath, '//*[@id="shipping"]/ng-form/dd').click
choose free_shipping.name.to_s
within "#payment" do
choose free_payment.name.to_s
end
click_on "Place order now"
# DB checks
order_within_zone.reload
expect(order_within_zone.additional_tax_total).to eq(1.3)
# UI checks
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
end
before do
set_order order_within_zone
login_as(user_within_zone)
end
context "on split-checkout" do
before do
Flipper.enable(:split_checkout)
it "will be charged tax on the order" do
visit checkout_step_path(:details)
set_order order_within_zone
login_as(user_within_zone)
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
click_on "Complete order"
# DB checks
order_within_zone.reload
expect(order_within_zone.additional_tax_total).to eq(1.3)
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
end
context "when using a voucher" do
let!(:voucher) do
create(:voucher, code: 'some_code', enterprise: distributor, amount: 10)
end
it "will be charged tax on the order" do
it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
choose "Delivery"
click_button "Next - Payment method"
# add Voucher
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")
click_on "Next - Order summary"
click_on "Complete order"
# DB checks
order_within_zone.reload
expect(order_within_zone.additional_tax_total).to eq(1.3)
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#order_total', text: with_currency(1.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
end
context "when using a voucher" do
let!(:voucher) do
create(:voucher, code: 'some_code', enterprise: distributor, amount: 10)
# Voucher
within "#line-items" do
expect(page).to have_content(voucher.code)
expect(page).to have_content(with_currency(-8.85))
expect(page).to have_content("Tax #{voucher.code}")
expect(page).to have_content(with_currency(-1.15))
end
it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
# DB check
order_within_zone.reload
voucher_adjustment = order_within_zone.voucher_adjustments.first
voucher_tax_adjustment = order_within_zone.voucher_adjustments.second
choose "Delivery"
click_button "Next - Payment method"
# add Voucher
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")
click_on "Next - Order summary"
click_on "Complete order"
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(1.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
# Voucher
within "#line-items" do
expect(page).to have_content(voucher.code)
expect(page).to have_content(with_currency(-8.85))
expect(page).to have_content("Tax #{voucher.code}")
expect(page).to have_content(with_currency(-1.15))
end
# DB check
order_within_zone.reload
voucher_adjustment = order_within_zone.voucher_adjustments.first
voucher_tax_adjustment = order_within_zone.voucher_adjustments.second
expect(voucher_adjustment.amount.to_f).to eq(-8.85)
expect(voucher_tax_adjustment.amount.to_f).to eq(-1.15)
end
expect(voucher_adjustment.amount.to_f).to eq(-8.85)
expect(voucher_tax_adjustment.amount.to_f).to eq(-1.15)
end
end
end
describe "for a customer with shipping address outside the tax zone" do
context "on legacy checkout" do
before do
set_order order_outside_zone
login_as(user_outside_zone)
end
it "will not be charged tax on the order" do
visit checkout_path
find(:xpath, '//*[@id="shipping"]/ng-form/dd').click
choose free_shipping.name.to_s
within "#payment" do
choose free_payment.name.to_s
end
click_on "Place order now"
# DB checks
order_outside_zone.reload
expect(order_outside_zone.included_tax_total).to eq(0.0)
expect(order_outside_zone.additional_tax_total).to eq(0.0)
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
end
before do
set_order order_outside_zone
login_as(user_outside_zone)
end
context "on split-checkout" do
it "will not be charged tax on the order" do
visit checkout_step_path(:details)
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
click_on "Complete order"
# DB checks
order_outside_zone.reload
expect(order_outside_zone.included_tax_total).to eq(0.0)
expect(order_outside_zone.additional_tax_total).to eq(0.0)
# UI checks
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
end
# reproducing bug #9153
context "changing the address on the /details step" do
before do
Flipper.enable(:split_checkout)
set_order order_outside_zone
login_as(user_outside_zone)
end
it "will not be charged tax on the order" do
visit checkout_step_path(:details)
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
expect(page).to have_selector('#order_total', text: with_currency(10.00))
# customer goes back from Summary to Details step, to change Delivery
click_on "Your details"
end
it "should re-calculate the tax accordingly" do
select "Victoria", from: "order_bill_address_attributes_state_id"
# it should not be necessary to save as new default bill address
check "order_save_bill_address"
check "ship_address_same_as_billing"
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
# Summary step should reflect changes
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
click_on "Complete order"
# DB checks
order_outside_zone.reload
expect(order_outside_zone.included_tax_total).to eq(0.0)
expect(order_outside_zone.additional_tax_total).to eq(0.0)
expect(order_outside_zone.additional_tax_total).to eq(1.3)
# UI checks
# UI checks - Order confirmation page should reflect changes
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(10.00))
expect(page).not_to have_content("includes tax")
end
# reproducing bug #9153
context "changing the address on the /details step" do
before do
visit checkout_step_path(:details)
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
expect(page).to have_selector('#order_total', text: with_currency(10.00))
# customer goes back from Summary to Details step, to change Delivery
click_on "Your details"
end
it "should re-calculate the tax accordingly" do
select "Victoria", from: "order_bill_address_attributes_state_id"
# it should not be necessary to save as new default bill address
check "order_save_bill_address"
check "ship_address_same_as_billing"
choose "Delivery"
click_button "Next - Payment method"
click_on "Next - Order summary"
# Summary step should reflect changes
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
click_on "Complete order"
# DB checks
order_outside_zone.reload
expect(order_outside_zone.included_tax_total).to eq(0.0)
expect(order_outside_zone.additional_tax_total).to eq(1.3)
# UI checks - Order confirmation page should reflect changes
expect(page).to have_content("Confirmed")
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
end
expect(page).to have_selector('#order_total', text: with_currency(11.30))
expect(page).to have_selector('#tax-row', text: with_currency(1.30))
end
end
end

View File

@@ -145,7 +145,7 @@ describe 'White label setting' do
set_order(order)
end
shared_examples "hides the OFN navigation when needed only for the checkout" do
context "when the split checkout is enabled" do
it_behaves_like "hides the OFN navigation when needed only"
context "for cart path" do
@@ -174,18 +174,6 @@ describe 'White label setting' do
it_behaves_like "hides the OFN navigation for mobile view as well"
end
end
context "when the split checkout is disabled" do
it_behaves_like "hides the OFN navigation when needed only for the checkout"
end
context "when the split checkout is enabled" do
before do
Flipper.enable(:split_checkout)
end
it_behaves_like "hides the OFN navigation when needed only for the checkout"
end
end
context "when the user has a complete order" do