require 'test_helper' module Workarea module Pricing module Calculators class ItemCalculatorTest < TestCase def test_adjust create_pricing_sku(id: 'SKU1', prices: [{ regular: 5.to_m }]) create_pricing_sku(id: 'SKU2', prices: [{ regular: 7.to_m }]) order = Order.new order.add_item(product_id: 'PRODUCT', sku: 'SKU1', quantity: 2) order.add_item(product_id: 'PRODUCT', sku: 'SKU2', quantity: 1) ItemCalculator.test_adjust(order) assert_equal(1, order.items.first.price_adjustments.length) assert_equal('item', order.items.first.price_adjustments.first.price) assert_equal(10.to_m, order.items.first.price_adjustments.first.amount) assert_equal(1, order.items.second.price_adjustments.length) assert_equal('item', order.items.second.price_adjustments.first.price) assert_equal(7.to_m, order.items.second.price_adjustments.first.amount) end def test_adjust_with_sale_items create_pricing_sku( id: 'SKU', on_sale: true, tax_code: '001', prices: [{ regular: 5.to_m, sale: 3.to_m, }] ) order = Order.new order.add_item(product_id: 'PRODUCT', sku: 'SKU', quantity: 2) ItemCalculator.test_adjust(order) assert_equal(1, order.items.first.price_adjustments.length) assert_equal('item', order.items.first.price_adjustments.first.price) assert_equal(6.to_m, order.items.first.price_adjustments.first.amount) assert_equal( { 'on_sale' => true, 'original_price' => 5.0, 'tax_code' => '001' }, order.items.first.price_adjustments.first.data ) end def test_adjust_with_quantity_pricing create_pricing_sku( id: 'SKU', prices: [ { regular: 4.to_m, min_quantity: 3 }, { regular: 5.to_m } ] ) order = Order.new order.add_item(product_id: 'PRODUCT', sku: 'SKU', quantity: 3) ItemCalculator.test_adjust(order) assert_equal(1, order.items.first.price_adjustments.length) assert_equal('item', order.items.first.price_adjustments.first.price) assert_equal(12.to_m, order.items.first.price_adjustments.first.amount) end end end end end