Files
openfoodnetwork/spec/factories/shipment_factory.rb
2025-01-22 11:20:05 +11:00

59 lines
1.7 KiB
Ruby

# frozen_string_literal: true
FactoryBot.define do
factory :shipment, class: Spree::Shipment do
# keeps test shipments unique per order
initialize_with { Spree::Shipment.find_or_create_by(order_id: order.id) }
tracking { 'U10000' }
number { '100' }
cost { 100.00 }
state { 'pending' }
order
address
after(:create) do |shipment, _evalulator|
shipment.add_shipping_method(create(:shipping_method), true)
shipment.order.line_items.each do |line_item|
line_item.quantity.times {
shipment.inventory_units.create(variant_id: line_item.variant_id)
}
end
end
end
factory :shipment_with, class: Spree::Shipment do
tracking { 'U10000' }
number { '100' }
cost { 100.00 }
state { 'pending' }
order
address
trait :shipping_method do
transient do
shipping_method { create(:shipping_method) }
end
shipping_rates {
[Spree::ShippingRate.create(shipping_method:, selected: true)]
}
after(:create) do |shipment, _evaluator|
shipment.order.line_items.each do |line_item|
line_item.quantity.times {
shipment.inventory_units.create(variant_id: line_item.variant_id)
}
end
# Ensure correct shipping cost is assigned to both shipping rate and shipment.
# This usually happens via Stock::Estimator when shipping rates are created.
computed_shipping_cost = shipment.shipping_method.calculator.compute(shipment.to_package)
shipment.selected_shipping_rate.update_columns(cost: computed_shipping_cost)
shipment.update_columns(cost: computed_shipping_cost)
end
end
end
end