mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
112 lines
4.3 KiB
Ruby
112 lines
4.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "spec_helper"
|
|
|
|
RSpec.describe Admin::OrdersHelper do
|
|
describe "#order_adjustments_for_display" do
|
|
let(:order) { create(:order) }
|
|
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 "selects eligible adjustments" do
|
|
adjustment = create(:adjustment, order:, adjustable: order, amount: 1)
|
|
|
|
expect(helper.order_adjustments_for_display(order)).to eq [adjustment]
|
|
end
|
|
|
|
it "filters shipping method adjustments" do
|
|
create(:adjustment, order:, adjustable: build(:shipment), amount: 1,
|
|
originator_type: "Spree::ShippingMethod")
|
|
|
|
expect(helper.order_adjustments_for_display(order)).to eq []
|
|
end
|
|
|
|
it "filters ineligible payment adjustments" do
|
|
create(:adjustment, adjustable: build(:payment), amount: 0, eligible: false,
|
|
originator_type: "Spree::PaymentMethod", order:)
|
|
|
|
expect(helper.order_adjustments_for_display(order)).to eq []
|
|
end
|
|
|
|
it "filters out line item adjustments" do
|
|
create(:adjustment, adjustable: build(:line_item), amount: 0, eligible: false,
|
|
originator_type: "EnterpriseFee", order:)
|
|
|
|
expect(helper.order_adjustments_for_display(order)).to eq []
|
|
end
|
|
|
|
context "with a voucher with tax included in price" do
|
|
let(:enterprise) { build(:enterprise) }
|
|
let(:voucher) do
|
|
create(:voucher_flat_rate, code: 'new_code', enterprise:, amount: 10)
|
|
end
|
|
let(:voucher_included_tax) { -0.5 }
|
|
|
|
it "includes a fake tax voucher adjustment" do
|
|
voucher_adjustment = voucher.create_adjustment(voucher.code, order)
|
|
voucher_adjustment.update(included_tax: voucher_included_tax)
|
|
|
|
fake_adjustment = helper.order_adjustments_for_display(order).last
|
|
expect(fake_adjustment.label).to eq("new_code (tax included in voucher)")
|
|
expect(fake_adjustment.amount).to eq(-0.5)
|
|
end
|
|
end
|
|
|
|
context "with additional tax total" do
|
|
let!(:shipping_method){ create(:free_shipping_method) }
|
|
let!(:enterprise){
|
|
create(:distributor_enterprise_with_tax, name: 'Enterprise', charges_sales_tax: true,
|
|
shipping_methods: [shipping_method])
|
|
}
|
|
let!(:country_zone){ create(:zone_with_member) }
|
|
let!(:tax_category){ create(:tax_category, name: 'tax_category') }
|
|
let!(:tax_rate){
|
|
create(:tax_rate, zone: country_zone, tax_category:, name: 'Tax Rate', amount: 0.13,
|
|
included_in_price: false)
|
|
}
|
|
let!(:ship_address){ create(:ship_address) }
|
|
let!(:product) {
|
|
create(:simple_product, supplier_id: enterprise.id, price: 10,
|
|
tax_category_id: tax_category.id)
|
|
}
|
|
let!(:variant){
|
|
create(:variant, :with_order_cycle, product:, distributor: enterprise, order_cycle:,
|
|
tax_category:)
|
|
}
|
|
let!(:coordinator_fees){
|
|
create(:enterprise_fee, :flat_percent_per_item, enterprise:, amount: 20,
|
|
name: 'Adminstration',
|
|
fee_type: 'sales',
|
|
tax_category:)
|
|
}
|
|
let!(:order_cycle){
|
|
create(:simple_order_cycle, name: "oc1", suppliers: [enterprise],
|
|
distributors: [enterprise],
|
|
coordinator_fees: [coordinator_fees])
|
|
}
|
|
let!(:order){
|
|
create(:order_with_distributor, distributor: enterprise, order_cycle:, ship_address:)
|
|
}
|
|
let!(:line_item) { create(:line_item, variant:, quantity: 1, price: 10, order:) }
|
|
|
|
before do
|
|
order_cycle.variants << [product.variants.first]
|
|
order_cycle.exchanges.outgoing.first.variants << product.variants.first
|
|
|
|
order.recreate_all_fees!
|
|
Orders::WorkflowService.new(order).complete!
|
|
end
|
|
|
|
it "includes additional tax on fees" do
|
|
adjustment = order_adjustments_for_display(order).first
|
|
expect(adjustment.label).to eq("Tax on fees")
|
|
expect(adjustment.amount).to eq(0.26)
|
|
end
|
|
end
|
|
end
|
|
end
|