From e30ddf3f77c543674463c2f21fe94328555d841f Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 16 Apr 2021 13:08:42 +0200 Subject: [PATCH 1/3] Test and simplify #require_customer? --- app/models/spree/order.rb | 3 ++- spec/models/spree/order_spec.rb | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index ac95b9f612..6fa9c152e5 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -733,7 +733,8 @@ module Spree end def require_customer? - return true unless new_record? || state == 'cart' + return if new_record? || state == 'cart' + true end def customer_is_valid? diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 84153fd4d9..6cbce7875d 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -915,6 +915,48 @@ describe Spree::Order do end end + describe "#require_customer?" do + context "when the record is new" do + let(:order) { build(:order, state: state) } + + context "and the state is not cart" do + let(:state) { "complete" } + + it "returns true" do + expect(order.send(:require_customer?)).to eq(nil) + end + end + + context "and the state is cart" do + let(:state) { "cart" } + + it "returns false" do + expect(order.send(:require_customer?)).to eq(nil) + end + end + end + + context "when the record is not new" do + let(:order) { create(:order, state: state) } + + context "and the state is not cart" do + let(:state) { "complete" } + + it "returns true" do + expect(order.send(:require_customer?)).to eq(true) + end + end + + context "and the state is cart" do + let(:state) { "cart" } + + it "returns false" do + expect(order.send(:require_customer?)).to eq(nil) + end + end + end + end + describe "associating a customer" do let(:distributor) { create(:distributor_enterprise) } let!(:order) { create(:order, distributor: distributor) } From 5087ca709ade6b1c213ea5c8ff4b15a60d3e475f Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 16 Apr 2021 13:23:25 +0200 Subject: [PATCH 2/3] Make method stick to Boolean instead of Nil --- app/models/spree/order.rb | 2 +- spec/models/spree/order_spec.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 6fa9c152e5..ba4e819d00 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -733,7 +733,7 @@ module Spree end def require_customer? - return if new_record? || state == 'cart' + return false if new_record? || state == 'cart' true end diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 6cbce7875d..06592594ff 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -923,7 +923,7 @@ describe Spree::Order do let(:state) { "complete" } it "returns true" do - expect(order.send(:require_customer?)).to eq(nil) + expect(order.send(:require_customer?)).to eq(false) end end @@ -931,7 +931,7 @@ describe Spree::Order do let(:state) { "cart" } it "returns false" do - expect(order.send(:require_customer?)).to eq(nil) + expect(order.send(:require_customer?)).to eq(false) end end end @@ -951,7 +951,7 @@ describe Spree::Order do let(:state) { "cart" } it "returns false" do - expect(order.send(:require_customer?)).to eq(nil) + expect(order.send(:require_customer?)).to eq(false) end end end From fd29030bf96ae89a61a216b2895628a10ba31129 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 16 Apr 2021 13:34:35 +0200 Subject: [PATCH 3/3] Doc through specs how customer creation works --- spec/models/spree/order_spec.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 06592594ff..bcd3deba26 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -959,6 +959,30 @@ describe Spree::Order do describe "associating a customer" do let(:distributor) { create(:distributor_enterprise) } + + context "when creating an order" do + it "does not create a customer" do + order = create(:order, distributor: distributor) + expect(order.customer).to be_nil + end + end + + context "when updating the order" do + let!(:order) { create(:order, distributor: distributor) } + + before do + order.state = "complete" + order.save! + end + + it "creates a customer" do + expect(order.customer).not_to be_nil + end + end + end + + describe "#associate_customer" do + let(:distributor) { create(:distributor_enterprise) } let!(:order) { create(:order, distributor: distributor) } context "when an email address is available for the order" do