Files
openfoodnetwork/lib/tasks/sample_data/order_factory.rb
Luis Ramos 5289a5b381 Add namespace to all sample data factories
These factories are not used in testing and this way we avoid collisions on the root namespace as it was happening already with OrderFactory
2020-11-10 22:03:36 +00:00

89 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require "tasks/sample_data/logging"
require "tasks/sample_data/addressing"
module SampleData
class OrderFactory
include Logging
include Addressing
def create_samples
log "Creating orders"
@order_cycle = OrderCycle.find_by(name: "Fredo's Farm Hub OC")
@distributor = Enterprise.find_by(name: "Fredo's Farm Hub")
@email = "new.customer@example.org"
log "- cart order"
create_cart_order
log "- complete order - not paid"
create_complete_order
log "- complete order - paid"
order = create_complete_order
order.payments.first.capture!
log "- complete order - delivery"
order = create_complete_order
order.select_shipping_method(delivery_shipping_method_id)
order.save
log "- complete order - shipped"
order = create_complete_order
order.payments.first.capture!
order.save
order.shipment.reload.ship!
end
private
def create_cart_order
order = create_order
order.save
order
end
def create_complete_order
order = create_cart_order
OrderWorkflow.new(order).complete
order
end
def create_order
order = Spree::Order.create!(
email: @email,
order_cycle: @order_cycle,
distributor: @distributor,
bill_address: order_address,
ship_address: order_address
)
order.line_items.create(variant_id: first_variant.id, quantity: 5)
order.payments.create(payment_method_id: first_payment_method_id)
order
end
def first_variant
# First variant on the first outgoing exchange of the OC
@order_cycle.exchanges.outgoing.first.variants.first
end
def first_payment_method_id
# First payment method of the distributor
@distributor.payment_methods.first.id
end
def delivery_shipping_method_id
@distributor.shipping_methods.find_by(name: "Home delivery Fredo's Farm Hub").id
end
def order_address
address = address("25 Myrtle Street, Bayswater, 3153")
address.firstname = "John"
address.lastname = "Mistery"
address.phone = "0987654321"
address
end
end
end