require 'spec_helper' describe Spree::Calculator::FlexiRate, type: :model do let(:calculator) { Spree::Calculator::FlexiRate.new } let(:order) do mock_model( Spree::Order, quantity: 10 ) end context "compute" do it "should compute amount correctly when all fees are 0" do expect(calculator.compute(order).round(2)).to eq(0.0) end it "should compute amount correctly when first_item has a value" do allow(calculator).to receive_messages preferred_first_item: 1.0 expect(calculator.compute(order).round(2)).to eq(1.0) end it "should compute amount correctly when additional_items has a value" do allow(calculator).to receive_messages preferred_additional_item: 1.0 expect(calculator.compute(order).round(2)).to eq(9.0) end it "should compute amount correctly when additional_items and first_item have values" do allow(calculator).to receive_messages preferred_first_item: 5.0, preferred_additional_item: 1.0 expect(calculator.compute(order).round(2)).to eq(14.0) end it "should compute amount correctly when additional_items and first_item have values AND max items has value" do allow(calculator).to receive_messages preferred_first_item: 5.0, preferred_additional_item: 1.0, preferred_max_items: 3 expect(calculator.compute(order).round(2)).to eq(7.0) end it "should allow creation of new object with all the attributes" do Spree::Calculator::FlexiRate.new(preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1) end end end