From d57e64cf7e78d6ddd5a4d12bc30d7bbcae1c909d Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 14 Jan 2022 19:17:35 +0000 Subject: [PATCH 1/5] Add new order factories for checkout steps --- spec/factories/order_factory.rb | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb index 0bd6a8c718..2baa4bc92a 100644 --- a/spec/factories/order_factory.rb +++ b/spec/factories/order_factory.rb @@ -11,6 +11,39 @@ FactoryBot.define do completed_at { nil } email { user&.email || customer.email } + factory :order_ready_for_details do + distributor { create(:distributor_enterprise, with_payment_and_shipping: true) } + order_cycle { create(:order_cycle, distributors: [distributor]) } + + after(:create) do |order| + order.line_items << build(:line_item, order: order) + order.updater.update_totals_and_states + + order.order_cycle.exchanges.outgoing.first.variants << order.line_items.first.variant + end + + factory :order_ready_for_payment do + bill_address + ship_address + + after(:create) do |order, evaluator| + order.select_shipping_method evaluator.shipping_method.id + OrderWorkflow.new(order).advance_to_payment + end + + factory :order_ready_for_confirmation do + transient do + payment_method { create(:payment_method, distributors: [distributor]) } + end + + after(:create) do |order, evaluator| + order.payments << build(:payment, amount: order.total, payment_method: evaluator.payment_method) + order.next! + end + end + end + end + factory :order_with_totals do after(:create) do |order| create(:line_item, order: order) From 49623f6b4a6b49e0d05016b7a2026b57c4a1de0c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 14 Jan 2022 19:18:08 +0000 Subject: [PATCH 2/5] Simplify test setup --- spec/system/consumer/split_checkout_spec.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spec/system/consumer/split_checkout_spec.rb b/spec/system/consumer/split_checkout_spec.rb index 670c17a951..20e2d15748 100644 --- a/spec/system/consumer/split_checkout_spec.rb +++ b/spec/system/consumer/split_checkout_spec.rb @@ -8,7 +8,7 @@ describe "As a consumer, I want to checkout my order", js: true do let!(:zone) { create(:zone_with_member) } let(:supplier) { create(:supplier_enterprise) } - let(:distributor) { create(:distributor_enterprise, charges_sales_tax: true, allow_guest_orders: false) } + let(:distributor) { create(:distributor_enterprise, charges_sales_tax: true) } let(:product) { create(:taxed_product, supplier: supplier, price: 10, zone: zone, tax_rate_amount: 0.1) } @@ -53,6 +53,7 @@ describe "As a consumer, I want to checkout my order", js: true do context "guest checkout when distributor doesn't allow guest orders" do before do + distributor.update_columns allow_guest_orders: false visit checkout_step_path(:details) end @@ -70,8 +71,6 @@ describe "As a consumer, I want to checkout my order", js: true do context "as a guest user" do before do - distributor.update!(allow_guest_orders: true) - order.update!(distributor_id: distributor.id) visit checkout_path end From fb8f5ee5ce977e6bc75ec518e747b736d8e3fe2b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 14 Jan 2022 19:19:04 +0000 Subject: [PATCH 3/5] Increase flexibility in test setup --- spec/system/consumer/split_checkout_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/system/consumer/split_checkout_spec.rb b/spec/system/consumer/split_checkout_spec.rb index 20e2d15748..b544c033b6 100644 --- a/spec/system/consumer/split_checkout_spec.rb +++ b/spec/system/consumer/split_checkout_spec.rb @@ -19,7 +19,8 @@ describe "As a consumer, I want to checkout my order", js: true do } let(:order) { create(:order, order_cycle: order_cycle, distributor: distributor, bill_address_id: nil, - ship_address_id: nil, state: "cart") + ship_address_id: nil, state: "cart", + line_items: [create(:line_item, variant: variant)]) } let(:fee_tax_rate) { create(:tax_rate, amount: 0.10, zone: zone, included_in_price: true) } @@ -45,7 +46,6 @@ describe "As a consumer, I want to checkout my order", js: true do add_enterprise_fee enterprise_fee set_order order - add_product_to_cart order, product distributor.shipping_methods << free_shipping distributor.shipping_methods << shipping_with_fee From 0f154de2351311daeee8d93145a9f7d2b66ae751 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 14 Jan 2022 19:24:47 +0000 Subject: [PATCH 4/5] Use OrderCompletion in split checkout for #order_completion_reset --- app/controllers/split_checkout_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 941bcf7b10..19eb4da3a0 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -8,6 +8,7 @@ class SplitCheckoutController < ::BaseController include OrderStockCheck include Spree::BaseHelper include CheckoutCallbacks + include OrderCompletion include CablecarResponses helper 'terms_and_conditions' @@ -45,6 +46,7 @@ class SplitCheckoutController < ::BaseController @order.customer.touch :terms_and_conditions_accepted_at @order.confirm! + order_completion_reset @order end def update_order From 2f7ef33cafe5fcc2f7f9b5e1d44234c1d19be99b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 14 Jan 2022 19:29:12 +0000 Subject: [PATCH 5/5] Add test for maintaining hub selection after order completion --- spec/system/consumer/split_checkout_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/spec/system/consumer/split_checkout_spec.rb b/spec/system/consumer/split_checkout_spec.rb index b544c033b6..2fb01311dd 100644 --- a/spec/system/consumer/split_checkout_spec.rb +++ b/spec/system/consumer/split_checkout_spec.rb @@ -221,6 +221,25 @@ describe "As a consumer, I want to checkout my order", js: true do expect(page).to have_content("Select a shipping method") end end + + context "summary step" do + let(:order) { create(:order_ready_for_confirmation, distributor: distributor) } + + describe "completing the checkout" do + it "keeps the distributor selected for the current user after completion" do + visit checkout_step_path(:summary) + + expect(page).to have_content "Shopping @ #{distributor.name}" + + click_on "Complete order" + + expect(page).to have_content "Back To Store" + expect(order.reload.state).to eq "complete" + + expect(page).to have_content "Shopping @ #{distributor.name}" + end + end + end end context "when I have an out of stock product in my cart" do