diff --git a/lib/open_food_network/enterprise_fee_applicator.rb b/lib/open_food_network/enterprise_fee_applicator.rb index c2b3001bca..45905bfaca 100644 --- a/lib/open_food_network/enterprise_fee_applicator.rb +++ b/lib/open_food_network/enterprise_fee_applicator.rb @@ -1,15 +1,28 @@ module OpenFoodNetwork class EnterpriseFeeApplicator < Struct.new(:enterprise_fee, :variant, :role) def create_line_item_adjustment(line_item) - a = enterprise_fee.create_locked_adjustment(adjustment_label, line_item.order, line_item, true) + a = enterprise_fee.create_locked_adjustment(line_item_adjustment_label, line_item.order, line_item, true) + AdjustmentMetadata.create! adjustment: a, enterprise: enterprise_fee.enterprise, fee_name: enterprise_fee.name, fee_type: enterprise_fee.fee_type, enterprise_role: role + end + + def create_order_adjustment(order) + a = enterprise_fee.create_locked_adjustment(order_adjustment_label, order, order, true) AdjustmentMetadata.create! adjustment: a, enterprise: enterprise_fee.enterprise, fee_name: enterprise_fee.name, fee_type: enterprise_fee.fee_type, enterprise_role: role end private - def adjustment_label - "#{variant.product.name} - #{enterprise_fee.fee_type} fee by #{role} #{enterprise_fee.enterprise.name}" + def line_item_adjustment_label + "#{variant.product.name} - #{base_adjustment_label}" + end + + def order_adjustment_label + "Whole order - #{base_adjustment_label}" + end + + def base_adjustment_label + "#{enterprise_fee.fee_type} fee by #{role} #{enterprise_fee.enterprise.name}" end end end diff --git a/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb b/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb index 345eae845c..d10a5e9b72 100644 --- a/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb +++ b/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb @@ -8,7 +8,7 @@ module OpenFoodNetwork product = create(:simple_product) efa = EnterpriseFeeApplicator.new enterprise_fee, product.master, 'role' - efa.stub(:adjustment_label) { 'label' } + efa.stub(:line_item_adjustment_label) { 'label' } efa.create_line_item_adjustment line_item adjustment = Spree::Adjustment.last @@ -25,13 +25,45 @@ module OpenFoodNetwork md.enterprise_role.should == 'role' end - it "makes adjustment labels" do + it "creates an adjustment for an order" do + order = create(:order) + #line_item = create(:line_item) + enterprise_fee = create(:enterprise_fee) + product = create(:simple_product) + + efa = EnterpriseFeeApplicator.new enterprise_fee, nil, 'role' + efa.stub(:order_adjustment_label) { 'label' } + efa.create_order_adjustment order + + adjustment = Spree::Adjustment.last + adjustment.label.should == 'label' + adjustment.adjustable.should == order + adjustment.source.should == order + adjustment.originator.should == enterprise_fee + adjustment.should be_mandatory + + md = adjustment.metadata + md.enterprise.should == enterprise_fee.enterprise + md.fee_name.should == enterprise_fee.name + md.fee_type.should == enterprise_fee.fee_type + md.enterprise_role.should == 'role' + end + + it "makes an adjustment label for a line item" do variant = double(:variant, product: double(:product, name: 'Bananas')) enterprise_fee = double(:enterprise_fee, fee_type: 'packing', enterprise: double(:enterprise, name: 'Ballantyne')) efa = EnterpriseFeeApplicator.new enterprise_fee, variant, 'distributor' - efa.send(:adjustment_label).should == "Bananas - packing fee by distributor Ballantyne" + efa.send(:line_item_adjustment_label).should == "Bananas - packing fee by distributor Ballantyne" + end + + it "makes an adjustment label for an order" do + enterprise_fee = double(:enterprise_fee, fee_type: 'packing', enterprise: double(:enterprise, name: 'Ballantyne')) + + efa = EnterpriseFeeApplicator.new enterprise_fee, nil, 'distributor' + + efa.send(:order_adjustment_label).should == "Whole order - packing fee by distributor Ballantyne" end end end