From 3b2d4ae2d48bc6ded7e9a2e19c53ca1fe6973f14 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 23 Feb 2018 15:37:38 +1100 Subject: [PATCH] Estimator take variant overrides into account --- app/services/subscription_estimator.rb | 5 ++++ spec/services/subscription_estimator_spec.rb | 24 ++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/services/subscription_estimator.rb b/app/services/subscription_estimator.rb index 0f5f68e275..81ef1a3f68 100644 --- a/app/services/subscription_estimator.rb +++ b/app/services/subscription_estimator.rb @@ -22,6 +22,7 @@ class SubscriptionEstimator def price_estimate_for(variant, fallback) return fallback unless fee_calculator && variant + scoper.scope(variant) fees = fee_calculator.indexed_fees_for(variant) (variant.price + fees).to_d end @@ -32,4 +33,8 @@ class SubscriptionEstimator return nil unless shop && next_oc @fee_calculator = OpenFoodNetwork::EnterpriseFeeCalculator.new(shop, next_oc) end + + def scoper + OpenFoodNetwork::ScopeVariantToHub.new(subscription.shop) + end end diff --git a/spec/services/subscription_estimator_spec.rb b/spec/services/subscription_estimator_spec.rb index 6be455c23c..fbdf448c0e 100644 --- a/spec/services/subscription_estimator_spec.rb +++ b/spec/services/subscription_estimator_spec.rb @@ -45,11 +45,25 @@ describe SubscriptionEstimator do allow(fee_calculator).to receive(:indexed_fees_for).with(sli3.variant) { 3.0 } end - it "recalculates price_estimates based on variant prices and associated fees" do - estimator.estimate! - expect(sli1.price_estimate).to eq 2.0 - expect(sli2.price_estimate).to eq 2.0 - expect(sli3.price_estimate).to eq 6.0 + context "when no variant overrides apply" do + it "recalculates price_estimates based on variant prices and associated fees" do + estimator.estimate! + expect(sli1.price_estimate).to eq 2.0 + expect(sli2.price_estimate).to eq 2.0 + expect(sli3.price_estimate).to eq 6.0 + end + end + + context "when variant overrides apply" do + let!(:override1) { create(:variant_override, hub: subscription.shop, variant: sli1.variant, price: 1.2) } + let!(:override2) { create(:variant_override, hub: subscription.shop, variant: sli2.variant, price: 2.3) } + + it "recalculates price_estimates based on override prices and associated fees" do + estimator.estimate! + expect(sli1.price_estimate).to eq 2.2 + expect(sli2.price_estimate).to eq 2.3 + expect(sli3.price_estimate).to eq 6.0 + end end end end