Files
openfoodnetwork/spec/factories/order_cycle_factory.rb
Gaetan Craig-Riou 4113880401 Move supplier to variant part 2
Variant model and specs
2024-07-03 10:17:49 +10:00

136 lines
4.3 KiB
Ruby

# frozen_string_literal: true
FactoryBot.define do
factory :order_cycle, parent: :simple_order_cycle do
coordinator_fees { [create(:enterprise_fee, enterprise: coordinator)] }
transient do
suppliers {
[create(:supplier_enterprise), create(:supplier_enterprise)]
}
distributors {
[create(:distributor_enterprise), create(:distributor_enterprise)]
}
end
after(:create) do |_oc, proxy|
proxy.exchanges.incoming.each do |exchange|
ExchangeFee.create!(
exchange:,
enterprise_fee: create(:enterprise_fee, enterprise: exchange.sender)
)
end
proxy.exchanges.outgoing.each do |exchange|
ExchangeFee.create!(
exchange:,
enterprise_fee: create(:enterprise_fee, enterprise: exchange.receiver)
)
end
# Products with images
proxy.exchanges.incoming.each do |exchange|
product = create(:product).tap do |p|
variant = p.variants.first
variant.supplier = exchange.sender
variant.save!
end
Spree::Image.create(
viewable_id: product.id,
viewable_type: 'Spree::Product',
alt: "position 1",
attachment: white_logo_file,
position: 1
)
exchange.variants << product.variants.first
end
variants = proxy.exchanges.incoming.map(&:variants).flatten
proxy.exchanges.outgoing.each do |exchange|
variants.each { |v| exchange.variants << v }
end
end
end
factory :order_cycle_with_overrides, parent: :order_cycle do
after(:create) do |oc|
oc.variants.each do |variant|
create(:variant_override, variant:,
hub: oc.distributors.first,
price: variant.price + 100)
end
end
end
# Note: Order cycles are sometimes referred to as 'simple if they are for a shop selling their
# own produce i.e. :sells = 'own'. However the 'simple_order_cycle' name does not mean this
# and may need to be renamed to avoid potential confusion because it actually can create
# 'non-simple' order cycles too for distributors selling produce from other enterprises.
factory :simple_order_cycle, class: OrderCycle do
sequence(:name) { |n| "Order Cycle #{n}" }
orders_open_at { 1.day.ago }
orders_close_at { 1.week.from_now }
coordinator { Enterprise.is_distributor.first || FactoryBot.create(:distributor_enterprise) }
transient do
suppliers { [] }
distributors { [] }
variants { [] }
end
after(:create) do |oc, proxy|
# Incoming Exchanges
proxy.suppliers.each.with_index do |supplier, i|
ex = create(:exchange, order_cycle: oc,
sender: supplier,
receiver: oc.coordinator,
incoming: true,
receival_instructions: "instructions #{i}")
proxy.variants.each { |v| ex.variants << v }
end
# Outgoing Exchanges
proxy.distributors.each.with_index do |distributor, i|
ex = create(:exchange, order_cycle: oc,
sender: oc.coordinator,
receiver: distributor,
incoming: false,
pickup_time: "time #{i}",
pickup_instructions: "instructions #{i}")
proxy.variants.each { |v| ex.variants << v }
end
end
end
factory :undated_order_cycle, parent: :simple_order_cycle do
orders_open_at { nil }
orders_close_at { nil }
end
factory :upcoming_order_cycle, parent: :simple_order_cycle do
orders_open_at { 1.week.from_now }
orders_close_at { 2.weeks.from_now }
end
factory :open_order_cycle, parent: :simple_order_cycle do
orders_open_at { 1.week.ago }
orders_close_at { 1.week.from_now }
end
factory :closed_order_cycle, parent: :simple_order_cycle do
orders_open_at { 2.weeks.ago }
orders_close_at { 1.week.ago }
end
factory :distributor_order_cycle, parent: :simple_order_cycle do
coordinator { create(:distributor_enterprise) }
end
factory :sells_own_order_cycle, parent: :simple_order_cycle do
coordinator { create(:enterprise, sells: "own") }
end
end