From 9b1c95cbc2abf281babeb5c6ecf7c90985abc8b6 Mon Sep 17 00:00:00 2001 From: cyrillefr Date: Tue, 17 Jun 2025 11:20:06 +0200 Subject: [PATCH] Style Metrics/ModuleLength in spec file --- .rubocop_todo.yml | 1 - .../subscriptions/estimator_spec.rb | 300 +++++++++--------- 2 files changed, 148 insertions(+), 153 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 75bfbc0bbf..9d6a37b6d5 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -160,7 +160,6 @@ Metrics/ModuleLength: - 'app/helpers/spree/admin/orders_helper.rb' - 'app/models/spree/order/checkout.rb' - 'app/models/spree/payment/processing.rb' - - 'engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb' - 'engines/order_management/spec/services/order_management/subscriptions/form_spec.rb' - 'engines/order_management/spec/services/order_management/subscriptions/proxy_order_syncer_spec.rb' - 'engines/order_management/spec/services/order_management/subscriptions/summarizer_spec.rb' diff --git a/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb index 5a4c91f71d..74b7514336 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb @@ -2,172 +2,168 @@ require 'spec_helper' -module OrderManagement - module Subscriptions - RSpec.describe Estimator do - describe "estimating prices for subscription line items" do - let!(:subscription) { create(:subscription, with_items: true) } - let!(:sli1) { subscription.subscription_line_items.first } - let!(:sli2) { subscription.subscription_line_items.second } - let!(:sli3) { subscription.subscription_line_items.third } - let(:estimator) { Estimator.new(subscription) } +RSpec.describe OrderManagement::Subscriptions::Estimator do + describe "estimating prices for subscription line items" do + let!(:subscription) { create(:subscription, with_items: true) } + let!(:sli1) { subscription.subscription_line_items.first } + let!(:sli2) { subscription.subscription_line_items.second } + let!(:sli3) { subscription.subscription_line_items.third } + let(:estimator) { described_class.new(subscription) } - before do - sli1.update(price_estimate: 4.0) - sli2.update(price_estimate: 5.0) - sli3.update(price_estimate: 6.0) - sli1.variant.update(price: 1.0) - sli2.variant.update(price: 2.0) - sli3.variant.update(price: 3.0) + before do + sli1.update(price_estimate: 4.0) + sli2.update(price_estimate: 5.0) + sli3.update(price_estimate: 6.0) + sli1.variant.update(price: 1.0) + sli2.variant.update(price: 2.0) + sli3.variant.update(price: 3.0) - # Simulating assignment of attrs from params - sli1.assign_attributes(price_estimate: 7.0) - sli2.assign_attributes(price_estimate: 8.0) - sli3.assign_attributes(price_estimate: 9.0) - end + # Simulating assignment of attrs from params + sli1.assign_attributes(price_estimate: 7.0) + sli2.assign_attributes(price_estimate: 8.0) + sli3.assign_attributes(price_estimate: 9.0) + end - context "when a insufficient information exists to calculate price estimates" do - before do - # This might be because a shop has not been assigned yet, or no - # current or future order cycles exist for the schedule - allow(estimator).to receive(:fee_calculator) { nil } - end + context "when a insufficient information exists to calculate price estimates" do + before do + # This might be because a shop has not been assigned yet, or no + # current or future order cycles exist for the schedule + allow(estimator).to receive(:fee_calculator) { nil } + end - it "resets the price estimates for all items" do - estimator.estimate! - expect(sli1.price_estimate).to eq 4.0 - expect(sli2.price_estimate).to eq 5.0 - expect(sli3.price_estimate).to eq 6.0 - end - end + it "resets the price estimates for all items" do + estimator.estimate! + expect(sli1.price_estimate).to eq 4.0 + expect(sli2.price_estimate).to eq 5.0 + expect(sli3.price_estimate).to eq 6.0 + end + end - context "when sufficient information to calculate price estimates exists" do - let(:fee_calculator) { instance_double(OpenFoodNetwork::EnterpriseFeeCalculator) } + context "when sufficient information to calculate price estimates exists" do + let(:fee_calculator) { instance_double(OpenFoodNetwork::EnterpriseFeeCalculator) } - before do - allow(estimator).to receive(:fee_calculator) { fee_calculator } - allow(fee_calculator).to receive(:indexed_fees_for).with(sli1.variant) { 1.0 } - allow(fee_calculator).to receive(:indexed_fees_for).with(sli2.variant) { 0.0 } - allow(fee_calculator).to receive(:indexed_fees_for).with(sli3.variant) { 3.0 } - end + before do + allow(estimator).to receive(:fee_calculator) { fee_calculator } + allow(fee_calculator).to receive(:indexed_fees_for).with(sli1.variant) { 1.0 } + allow(fee_calculator).to receive(:indexed_fees_for).with(sli2.variant) { 0.0 } + allow(fee_calculator).to receive(:indexed_fees_for).with(sli3.variant) { 3.0 } + end - 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 + 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 - describe "updating estimates for shipping and payment fees" do - let(:subscription) { - create(:subscription, with_items: true, - payment_method:, - shipping_method:) + 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) } - let!(:sli1) { subscription.subscription_line_items.first } - let!(:sli2) { subscription.subscription_line_items.second } - let!(:sli3) { subscription.subscription_line_items.third } - let(:estimator) { OrderManagement::Subscriptions::Estimator.new(subscription) } - before do - allow(estimator).to receive(:assign_price_estimates) - sli1.update(price_estimate: 4.0) - sli2.update(price_estimate: 5.0) - sli3.update(price_estimate: 6.0) - end - - context "using flat rate calculators" do - let(:shipping_method) { - create(:shipping_method, - calculator: Calculator::FlatRate.new(preferred_amount: 12.34)) - } - let(:payment_method) { - create(:payment_method, - calculator: Calculator::FlatRate.new(preferred_amount: 9.12)) - } - - it "calculates fees based on the rates provided" do - estimator.estimate! - expect(subscription.shipping_fee_estimate.to_f).to eq 12.34 - expect(subscription.payment_fee_estimate.to_f).to eq 9.12 - end - end - - context "using flat percent item total calculators" do - let(:shipping_method) { - create(:shipping_method, - calculator: Calculator::FlatPercentItemTotal.new( - preferred_flat_percent: 10 - )) - } - let(:payment_method) { - create(:payment_method, - calculator: Calculator::FlatPercentItemTotal.new( - preferred_flat_percent: 20 - )) - } - - it "calculates fees based on the estimated item total and percentage provided" do - estimator.estimate! - expect(subscription.shipping_fee_estimate.to_f).to eq 1.5 - expect(subscription.payment_fee_estimate.to_f).to eq 3.0 - end - end - - context "using flat percent per item calculators" do - let(:shipping_method) { - create(:shipping_method, - calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 5)) - } - let(:payment_method) { - create(:payment_method, - calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 10)) - } - - it "calculates fees based on the estimated item prices and percentage provided" do - estimator.estimate! - expect(subscription.shipping_fee_estimate.to_f).to eq 0.75 - expect(subscription.payment_fee_estimate.to_f).to eq 1.5 - end - end - - context "using per item calculators" do - let(:shipping_method) { - create(:shipping_method, - calculator: Calculator::PerItem.new(preferred_amount: 1.2)) - } - let(:payment_method) { - create(:payment_method, - calculator: Calculator::PerItem.new(preferred_amount: 0.3)) - } - - it "calculates fees based on the number of items and rate provided" do - estimator.estimate! - expect(subscription.shipping_fee_estimate.to_f).to eq 3.6 - expect(subscription.payment_fee_estimate.to_f).to eq 0.9 - end + 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 + + describe "updating estimates for shipping and payment fees" do + let(:subscription) { + create(:subscription, with_items: true, + payment_method:, + shipping_method:) + } + let!(:sli1) { subscription.subscription_line_items.first } + let!(:sli2) { subscription.subscription_line_items.second } + let!(:sli3) { subscription.subscription_line_items.third } + let(:estimator) { described_class.new(subscription) } + + before do + allow(estimator).to receive(:assign_price_estimates) + sli1.update(price_estimate: 4.0) + sli2.update(price_estimate: 5.0) + sli3.update(price_estimate: 6.0) + end + + context "using flat rate calculators" do + let(:shipping_method) { + create(:shipping_method, + calculator: Calculator::FlatRate.new(preferred_amount: 12.34)) + } + let(:payment_method) { + create(:payment_method, + calculator: Calculator::FlatRate.new(preferred_amount: 9.12)) + } + + it "calculates fees based on the rates provided" do + estimator.estimate! + expect(subscription.shipping_fee_estimate.to_f).to eq 12.34 + expect(subscription.payment_fee_estimate.to_f).to eq 9.12 + end + end + + context "using flat percent item total calculators" do + let(:shipping_method) { + create(:shipping_method, + calculator: Calculator::FlatPercentItemTotal.new( + preferred_flat_percent: 10 + )) + } + let(:payment_method) { + create(:payment_method, + calculator: Calculator::FlatPercentItemTotal.new( + preferred_flat_percent: 20 + )) + } + + it "calculates fees based on the estimated item total and percentage provided" do + estimator.estimate! + expect(subscription.shipping_fee_estimate.to_f).to eq 1.5 + expect(subscription.payment_fee_estimate.to_f).to eq 3.0 + end + end + + context "using flat percent per item calculators" do + let(:shipping_method) { + create(:shipping_method, + calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 5)) + } + let(:payment_method) { + create(:payment_method, + calculator: Calculator::FlatPercentPerItem.new(preferred_flat_percent: 10)) + } + + it "calculates fees based on the estimated item prices and percentage provided" do + estimator.estimate! + expect(subscription.shipping_fee_estimate.to_f).to eq 0.75 + expect(subscription.payment_fee_estimate.to_f).to eq 1.5 + end + end + + context "using per item calculators" do + let(:shipping_method) { + create(:shipping_method, + calculator: Calculator::PerItem.new(preferred_amount: 1.2)) + } + let(:payment_method) { + create(:payment_method, + calculator: Calculator::PerItem.new(preferred_amount: 0.3)) + } + + it "calculates fees based on the number of items and rate provided" do + estimator.estimate! + expect(subscription.shipping_fee_estimate.to_f).to eq 3.6 + expect(subscription.payment_fee_estimate.to_f).to eq 0.9 + end + end + end end