From febbe087e9d06bb52045c99632a9d40a468e7bcd Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 26 Feb 2014 10:39:39 +1100 Subject: [PATCH] Find EnterpriseFees with per-item calculators --- app/models/enterprise_fee.rb | 4 ++++ spec/models/enterprise_fee_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/app/models/enterprise_fee.rb b/app/models/enterprise_fee.rb index 8f3f038ded..2d8ecbd828 100644 --- a/app/models/enterprise_fee.rb +++ b/app/models/enterprise_fee.rb @@ -21,6 +21,10 @@ class EnterpriseFee < ActiveRecord::Base end } + scope :per_item, lambda { + joins(:calculator).where('spree_calculators.type NOT IN (?)', ['Spree::Calculator::FlatRate', 'Spree::Calculator::FlexiRate']) + } + def self.clear_all_adjustments_for(line_item) line_item.order.adjustments.where(originator_type: 'EnterpriseFee', source_id: line_item, source_type: 'Spree::LineItem').destroy_all end diff --git a/spec/models/enterprise_fee_spec.rb b/spec/models/enterprise_fee_spec.rb index 98484d6545..45ba74caac 100644 --- a/spec/models/enterprise_fee_spec.rb +++ b/spec/models/enterprise_fee_spec.rb @@ -9,6 +9,26 @@ describe EnterpriseFee do it { should validate_presence_of(:name) } end + describe "scopes" do + describe "finding per-item enterprise fees" do + it "does not return fees with FlatRate and FlexiRate calculators" do + create(:enterprise_fee, calculator: Spree::Calculator::FlatRate.new) + create(:enterprise_fee, calculator: Spree::Calculator::FlexiRate.new) + + EnterpriseFee.per_item.should be_empty + end + + it "returns fees with any other calculator" do + ef1 = create(:enterprise_fee, calculator: Spree::Calculator::DefaultTax.new) + ef2 = create(:enterprise_fee, calculator: Spree::Calculator::FlatPercentItemTotal.new) + ef3 = create(:enterprise_fee, calculator: Spree::Calculator::PerItem.new) + ef4 = create(:enterprise_fee, calculator: Spree::Calculator::PriceSack.new) + + EnterpriseFee.per_item.sort.should == [ef1, ef2, ef3, ef4].sort + end + end + end + describe "clearing all enterprise fee adjustments for a line item" do it "clears adjustments originating from many different enterprise fees" do p = create(:simple_product)