From 77506caca1b27a37b3e33f9816258c9ea7707af3 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:01:49 +0100 Subject: [PATCH 1/3] Rename OrderBalance methods for clarity --- app/models/concerns/balance.rb | 2 +- app/models/order_balance.rb | 14 +++++++------- spec/models/order_balance_spec.rb | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/models/concerns/balance.rb b/app/models/concerns/balance.rb index 794bb40f9f..a305285622 100644 --- a/app/models/concerns/balance.rb +++ b/app/models/concerns/balance.rb @@ -42,6 +42,6 @@ module Balance end def display_outstanding_balance - outstanding_balance.amount + outstanding_balance.display_amount end end diff --git a/app/models/order_balance.rb b/app/models/order_balance.rb index 83110c23f3..9dfdfb8369 100644 --- a/app/models/order_balance.rb +++ b/app/models/order_balance.rb @@ -1,21 +1,21 @@ # frozen_string_literal: true class OrderBalance - delegate :zero?, :abs, :to_s, to: :to_f + delegate :zero?, :abs, :to_s, to: :amount def initialize(order) @order = order end def label - to_f.negative? ? I18n.t(:credit_owed) : I18n.t(:balance_due) + amount.negative? ? I18n.t(:credit_owed) : I18n.t(:balance_due) + end + + def display_amount + Spree::Money.new(amount, currency: order.currency) end def amount - Spree::Money.new(to_f, currency: order.currency) - end - - def to_f if customer_balance_enabled? order.new_outstanding_balance else @@ -24,7 +24,7 @@ class OrderBalance end def +(other) - to_f + other.to_f + amount + other.to_f end private diff --git a/spec/models/order_balance_spec.rb b/spec/models/order_balance_spec.rb index a4ab2ff66d..0caa771c3e 100644 --- a/spec/models/order_balance_spec.rb +++ b/spec/models/order_balance_spec.rb @@ -14,7 +14,7 @@ describe OrderBalance do .to receive(:enabled?).with(:customer_balance, user) { false } end - context 'when the balance is postive' do + context 'when the balance is positive' do before do allow(order).to receive(:old_outstanding_balance) { 10 } end @@ -51,7 +51,7 @@ describe OrderBalance do .to receive(:enabled?).with(:customer_balance, user) { true } end - context 'when the balance is postive' do + context 'when the balance is positive' do before do allow(order).to receive(:new_outstanding_balance) { 10 } end @@ -83,7 +83,7 @@ describe OrderBalance do end end - describe '#amount' do + describe '#display_amount' do context 'when the customer_balance feature is disabled' do before do allow(order).to receive(:old_outstanding_balance) { 10 } @@ -95,7 +95,7 @@ describe OrderBalance do end it 'returns the balance wraped in a Money object' do - expect(order_balance.amount).to eq(Spree::Money.new(10, currency: ENV['currency'])) + expect(order_balance.display_amount).to eq(Spree::Money.new(10, currency: ENV['currency'])) end end @@ -110,7 +110,7 @@ describe OrderBalance do end it 'returns the balance wraped in a Money object' do - expect(order_balance.amount).to eq(Spree::Money.new(20, currency: ENV['currency'])) + expect(order_balance.display_amount).to eq(Spree::Money.new(20, currency: ENV['currency'])) end end end @@ -191,7 +191,7 @@ describe OrderBalance do end end - describe '#to_f' do + describe '#amount' do context 'when the customer_balance feature is disabled' do before do allow(OpenFoodNetwork::FeatureToggle) @@ -200,7 +200,7 @@ describe OrderBalance do it 'calls #outstanding_balance' do expect(order).to receive(:old_outstanding_balance) - order_balance.to_f + order_balance.amount end end @@ -212,7 +212,7 @@ describe OrderBalance do it 'calls #new_outstanding_balance' do expect(order).to receive(:new_outstanding_balance) - order_balance.to_f + order_balance.amount end end end From a02c505e621ee56446c7471fc719346203c1e65e Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:02:37 +0100 Subject: [PATCH 2/3] Delegate #to_f and #to_d to #amount in OrderBalance --- app/models/order_balance.rb | 2 +- spec/models/order_balance_spec.rb | 34 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/models/order_balance.rb b/app/models/order_balance.rb index 9dfdfb8369..5dea2a1cea 100644 --- a/app/models/order_balance.rb +++ b/app/models/order_balance.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class OrderBalance - delegate :zero?, :abs, :to_s, to: :amount + delegate :zero?, :abs, :to_s, :to_f, :to_d, to: :amount def initialize(order) @order = order diff --git a/spec/models/order_balance_spec.rb b/spec/models/order_balance_spec.rb index 0caa771c3e..ecff1cbc2f 100644 --- a/spec/models/order_balance_spec.rb +++ b/spec/models/order_balance_spec.rb @@ -325,6 +325,40 @@ describe OrderBalance do end end + describe '#to_f and #to_d' do + context 'when the customer_balance feature is disabled' do + before do + allow(OpenFoodNetwork::FeatureToggle) + .to receive(:enabled?).with(:customer_balance, user) { false } + end + + before do + allow(order).to receive(:old_outstanding_balance) { 10 } + end + + it 'returns the balance as a float or decimal' do + expect(order_balance.to_f).to eq(10.0) + expect(order_balance.to_d).to eq(10.0) + end + end + + context 'when the customer_balance feature is enabled' do + before do + allow(OpenFoodNetwork::FeatureToggle) + .to receive(:enabled?).with(:customer_balance, user) { true } + end + + before do + allow(order).to receive(:new_outstanding_balance) { 10 } + end + + it 'returns the balance as a float or decimal' do + expect(order_balance.to_f).to eq(10.0) + expect(order_balance.to_d).to eq(10.0) + end + end + end + describe '#+' do let(:other_order_balance) { described_class.new(order) } From bb0cf65ecceedb92d4e0a6f4107883105ba6fded Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:20:34 +0100 Subject: [PATCH 3/3] Handle OrderBalance comparison operators These operators get used on the object returned by order_balance in a few places, and were not working correctly. --- app/models/order_balance.rb | 2 +- spec/models/order_balance_spec.rb | 38 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/app/models/order_balance.rb b/app/models/order_balance.rb index 5dea2a1cea..4b7f27d2f8 100644 --- a/app/models/order_balance.rb +++ b/app/models/order_balance.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class OrderBalance - delegate :zero?, :abs, :to_s, :to_f, :to_d, to: :amount + delegate :zero?, :abs, :to_s, :to_f, :to_d, :<, :>, to: :amount def initialize(order) @order = order diff --git a/spec/models/order_balance_spec.rb b/spec/models/order_balance_spec.rb index ecff1cbc2f..f024969074 100644 --- a/spec/models/order_balance_spec.rb +++ b/spec/models/order_balance_spec.rb @@ -392,4 +392,42 @@ describe OrderBalance do end end end + + context "with comparison operators" do + context 'when the customer_balance feature is disabled' do + before do + allow(OpenFoodNetwork::FeatureToggle) + .to receive(:enabled?).with(:customer_balance, user) { false } + end + + before do + allow(order).to receive(:old_outstanding_balance) { 10 } + end + + it 'correctly returns true or false' do + expect(order_balance > 5).to eq true + expect(order_balance > 20).to eq false + expect(order_balance < 15).to eq true + expect(order_balance < 5).to eq false + end + end + + context 'when the customer_balance feature is enabled' do + before do + allow(OpenFoodNetwork::FeatureToggle) + .to receive(:enabled?).with(:customer_balance, user) { true } + end + + before do + allow(order).to receive(:new_outstanding_balance) { 10 } + end + + it 'correctly returns true or false' do + expect(order_balance > 5).to eq true + expect(order_balance > 20).to eq false + expect(order_balance < 15).to eq true + expect(order_balance < 5).to eq false + end + end + end end