From 5057e236a96110c6d690d874177ad28ebbc7220f Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 26 Feb 2014 13:48:51 +1100 Subject: [PATCH] Find enterprise fees with per-order calculators --- app/models/enterprise_fee.rb | 7 ++++++- spec/models/enterprise_fee_spec.rb | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/models/enterprise_fee.rb b/app/models/enterprise_fee.rb index 2d8ecbd828..33f41b5fec 100644 --- a/app/models/enterprise_fee.rb +++ b/app/models/enterprise_fee.rb @@ -6,6 +6,8 @@ class EnterpriseFee < ActiveRecord::Base attr_accessible :enterprise_id, :fee_type, :name, :calculator_type FEE_TYPES = %w(packing transport admin sales) + PER_ORDER_CALCULATORS = ['Spree::Calculator::FlatRate', 'Spree::Calculator::FlexiRate'] + validates_inclusion_of :fee_type, :in => FEE_TYPES validates_presence_of :name @@ -22,7 +24,10 @@ class EnterpriseFee < ActiveRecord::Base } scope :per_item, lambda { - joins(:calculator).where('spree_calculators.type NOT IN (?)', ['Spree::Calculator::FlatRate', 'Spree::Calculator::FlexiRate']) + joins(:calculator).where('spree_calculators.type NOT IN (?)', PER_ORDER_CALCULATORS) + } + scope :per_order, lambda { + joins(:calculator).where('spree_calculators.type IN (?)', PER_ORDER_CALCULATORS) } def self.clear_all_adjustments_for(line_item) diff --git a/spec/models/enterprise_fee_spec.rb b/spec/models/enterprise_fee_spec.rb index 45ba74caac..4408c069bc 100644 --- a/spec/models/enterprise_fee_spec.rb +++ b/spec/models/enterprise_fee_spec.rb @@ -27,6 +27,24 @@ describe EnterpriseFee do EnterpriseFee.per_item.sort.should == [ef1, ef2, ef3, ef4].sort end end + + describe "finding per-order enterprise fees" do + it "returns fees with FlatRate and FlexiRate calculators" do + ef1 = create(:enterprise_fee, calculator: Spree::Calculator::FlatRate.new) + ef2 = create(:enterprise_fee, calculator: Spree::Calculator::FlexiRate.new) + + EnterpriseFee.per_order.sort.should == [ef1, ef2].sort + end + + it "does not return 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_order.should be_empty + end + end end describe "clearing all enterprise fee adjustments for a line item" do