From 4083da5b1676b5ff6aad27ff459be915815f7c7b Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Tue, 5 May 2020 22:27:27 +0100 Subject: [PATCH 1/3] Add sample order to sample data --- lib/tasks/sample_data.rake | 3 ++ lib/tasks/sample_data/order_factory.rb | 62 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 lib/tasks/sample_data/order_factory.rb diff --git a/lib/tasks/sample_data.rake b/lib/tasks/sample_data.rake index bf929281b6..1dcac757c9 100644 --- a/lib/tasks/sample_data.rake +++ b/lib/tasks/sample_data.rake @@ -10,6 +10,7 @@ require "tasks/sample_data/product_factory" require "tasks/sample_data/shipping_method_factory" require "tasks/sample_data/taxon_factory" require "tasks/sample_data/user_factory" +require "tasks/sample_data/order_factory" # The sample data generated by this task is supposed to save some time during # manual testing. It is not meant to be complete, but we try to improve it @@ -49,6 +50,8 @@ namespace :ofn do CustomerFactory.new.create_samples(users) GroupFactory.new.create_samples + + OrderFactory.new.create_samples end def seeded? diff --git a/lib/tasks/sample_data/order_factory.rb b/lib/tasks/sample_data/order_factory.rb new file mode 100644 index 0000000000..cbd7059dab --- /dev/null +++ b/lib/tasks/sample_data/order_factory.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require "tasks/sample_data/logging" +require "tasks/sample_data/addressing" + +class OrderFactory + include Logging + include Addressing + + def create_samples + log "Creating a sample order" + order_cycle = OrderCycle.find_by(name: "Fredo's Farm Hub OC") + distributor = Enterprise.find_by(name: "Fredo's Farm Hub") + + create_order( + "new.customer@example.org", + order_cycle, + distributor + ) + end + + private + + def create_order(email, order_cycle, distributor) + 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: variant(order_cycle).id, quantity: 5 ) + order.payments.create(payment_method_id: payment_method_id(distributor)) + + place_order(order) + end + + def variant(order_cycle) + # First variant on the first outgoing exchange of the OC + order_cycle.exchanges.outgoing.first.variants.first + end + + def payment_method_id(distributor) + # First payment method of the distributor + distributor.payment_methods.first.id + end + + def place_order(order) + order.save + + AdvanceOrderService.new(order).call + order + end + + def order_address + address = address("25 Myrtle Street, Bayswater, 3153") + address.firstname = "John" + address.lastname = "Mistery" + address.phone = "0987654321" + address + end +end From 825f747dffc5f2c4926c03db799abb0c526f4075 Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Tue, 5 May 2020 23:14:46 +0100 Subject: [PATCH 2/3] Add more types of sample orders --- lib/tasks/sample_data/order_factory.rb | 88 ++++++++++++++++---------- 1 file changed, 56 insertions(+), 32 deletions(-) diff --git a/lib/tasks/sample_data/order_factory.rb b/lib/tasks/sample_data/order_factory.rb index cbd7059dab..0be836ac0e 100644 --- a/lib/tasks/sample_data/order_factory.rb +++ b/lib/tasks/sample_data/order_factory.rb @@ -8,50 +8,74 @@ class OrderFactory include Addressing def create_samples - log "Creating a sample order" - order_cycle = OrderCycle.find_by(name: "Fredo's Farm Hub OC") - distributor = Enterprise.find_by(name: "Fredo's Farm Hub") + 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" - create_order( - "new.customer@example.org", - order_cycle, - distributor - ) + 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.ship! end private - def create_order(email, order_cycle, distributor) + def create_cart_order + order = create_order + order.save + order + end + + def create_complete_order + order = create_cart_order + AdvanceOrderService.new(order).call + order + end + + def create_order order = Spree::Order.create!( - email: email, - order_cycle: order_cycle, - distributor: distributor, + email: @email, + order_cycle: @order_cycle, + distributor: @distributor, bill_address: order_address, ship_address: order_address ) - order.line_items.create( variant_id: variant(order_cycle).id, quantity: 5 ) - order.payments.create(payment_method_id: payment_method_id(distributor)) - - place_order(order) - end - - def variant(order_cycle) - # First variant on the first outgoing exchange of the OC - order_cycle.exchanges.outgoing.first.variants.first - end - - def payment_method_id(distributor) - # First payment method of the distributor - distributor.payment_methods.first.id - end - - def place_order(order) - order.save - - AdvanceOrderService.new(order).call + 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").id + end + def order_address address = address("25 Myrtle Street, Bayswater, 3153") address.firstname = "John" From be998a9eb6fd585ce3726621c880fd3041af142c Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Wed, 13 May 2020 12:00:37 +0100 Subject: [PATCH 3/3] Reload shipment before shipping otherwise shipment stays as ready but with shipped_at defined --- lib/tasks/sample_data/order_factory.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/sample_data/order_factory.rb b/lib/tasks/sample_data/order_factory.rb index 0be836ac0e..bc5c9f3675 100644 --- a/lib/tasks/sample_data/order_factory.rb +++ b/lib/tasks/sample_data/order_factory.rb @@ -32,7 +32,7 @@ class OrderFactory order = create_complete_order order.payments.first.capture! order.save - order.shipment.ship! + order.shipment.reload.ship! end private