Files
openfoodnetwork/spec/helpers/checkout_helper_spec.rb
David Cook 661bb29029 Remove unused method
The name doesn't appear in the codebase so I guess it's unused.
2025-07-28 13:19:16 +10:00

199 lines
6.1 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe CheckoutHelper do
it "generates html for validated inputs" do
expect(helper).to receive(:render).with(
"shared/validated_input",
name: "test",
path: "foo",
attributes: { :required => true, :type => :email, :name => "foo", :id => "foo",
"ng-model" => "foo", "ng-class" => "{error: !fieldValid('foo')}" }
)
helper.validated_input("test", "foo", type: :email)
end
describe "#display_checkout_tax_total" do
subject(:display_checkout_tax_total) { helper.display_checkout_tax_total(order) }
let(:order) { instance_double(Spree::Order, total_tax: 123.45, currency: 'AUD') }
let(:service) { instance_double(VoucherAdjustmentsService, voucher_included_tax: ) }
let(:voucher_included_tax) { 0.0 }
before do
allow(VoucherAdjustmentsService).to receive(:new).and_return(service)
end
it "retrieves the total tax on the order" do
expect(display_checkout_tax_total).to eq(Spree::Money.new(123.45, currency: 'AUD'))
end
context "with a voucher" do
let(:voucher_included_tax) { -0.45 }
it "displays the discounted total tax" do
expect(display_checkout_tax_total).to eq(Spree::Money.new(123.00, currency: 'AUD'))
end
end
end
describe "#display_checkout_taxes_hash" do
let(:order) { build(:order_with_totals) }
let(:tax_rate10) { build(:tax_rate, amount: 0.1) }
let(:tax_rate20) { build(:tax_rate, amount: 0.2) }
let(:other_tax_rate20) { build(:tax_rate, amount: 0.2) }
let(:adjustment1) {
build(:adjustment, amount: 1, label: "10% tax", originator: tax_rate10)
}
let(:adjustment2) {
build(:adjustment, amount: 2, label: "20% tax", originator: tax_rate20)
}
let(:other_adjustment2) {
build(:adjustment, amount: 2, label: "20% tax", originator: other_tax_rate20)
}
it "produces an empty array without taxes" do
expect(helper.display_checkout_taxes_hash(order)).to eq([])
end
it "shows a single tax adjustment" do
order.all_adjustments << adjustment1
order.save!
expect(helper.display_checkout_taxes_hash(order)).to eq [
{
amount: Spree::Money.new(1, currency: order.currency),
percentage: "10.0%",
rate_amount: 0.1,
}
]
end
it "shows multiple tax adjustments" do
order.all_adjustments << adjustment1
order.all_adjustments << adjustment2
order.save!
expect(helper.display_checkout_taxes_hash(order)).to eq [
{
amount: Spree::Money.new(1, currency: order.currency),
percentage: "10.0%",
rate_amount: 0.1,
},
{
amount: Spree::Money.new(2, currency: order.currency),
percentage: "20.0%",
rate_amount: 0.2,
},
]
end
it "sorts adjustments by percentage" do
order.all_adjustments << adjustment2
order.all_adjustments << adjustment1
order.save!
expect(helper.display_checkout_taxes_hash(order)).to eq [
{
amount: Spree::Money.new(1, currency: order.currency),
percentage: "10.0%",
rate_amount: 0.1,
},
{
amount: Spree::Money.new(2, currency: order.currency),
percentage: "20.0%",
rate_amount: 0.2,
},
]
end
it "shows multiple tax adjustments with same percentage" do
order.all_adjustments << adjustment2
order.all_adjustments << other_adjustment2
order.save!
expect(helper.display_checkout_taxes_hash(order)).to eq [
{
amount: Spree::Money.new(2, currency: order.currency),
percentage: "20.0%",
rate_amount: 0.2,
},
{
amount: Spree::Money.new(2, currency: order.currency),
percentage: "20.0%",
rate_amount: 0.2,
},
]
expect(helper.display_checkout_taxes_hash(order).size).to eq 2
end
end
describe "#checkout_adjustments_for" do
let(:order) { create(:order_with_totals_and_distribution) }
let(:enterprise_fee) { create(:enterprise_fee, amount: 123) }
let!(:fee_adjustment) {
create(:adjustment, originator: enterprise_fee, adjustable: order,
order:, label: "Enterprise Fee")
}
before do
order.update_order!
# Sanity check initial adjustments state
expect(order.shipment_adjustments.count).to eq 1
expect(order.adjustments.enterprise_fee.count).to eq 1
end
it "collects adjustments on the order" do
adjustments = helper.checkout_adjustments_for(order)
shipping_adjustment = order.shipment_adjustments.first
expect(adjustments).to match_array [shipping_adjustment, fee_adjustment]
end
context "tax rate adjustments" do
let!(:tax_rate) { create(:tax_rate, amount: 0.1, calculator: Calculator::DefaultTax.new) }
let!(:line_item_fee_adjustment) {
create(:adjustment, originator: enterprise_fee, adjustable: order.line_items.first,
order:)
}
let!(:order_tax_adjustment) {
create(:adjustment,
originator: tax_rate,
adjustable: fee_adjustment,
order:)
}
let!(:line_item_fee_adjustment_tax_adjustment) {
create(:adjustment,
originator: tax_rate,
adjustable: line_item_fee_adjustment,
order:)
}
it "removes tax rate adjustments" do
expect(order.all_adjustments.tax.count).to eq(2)
adjustments = helper.checkout_adjustments_for(order)
tax_adjustments = adjustments.select { |a| a.originator_type == "Spree::TaxRate" }
expect(tax_adjustments.count).to eq(0)
end
end
context "with return authorization adjustments" do
let!(:return_adjustment) {
create(:adjustment, originator_type: 'Spree::ReturnAuthorization', adjustable: order,
order:)
}
it "includes return adjustments" do
adjustments = helper.checkout_adjustments_for(order)
expect(adjustments).to include return_adjustment
end
end
end
end