85 lines
3.3 KiB
Ruby
85 lines
3.3 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Spree::Order do
|
|
context "#add_variant" do
|
|
it "should add digital Variants of quantity 1 to an order" do
|
|
order = FactoryGirl.create(:order)
|
|
order.add_variant variant1 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
order.add_variant variant2 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
order.add_variant variant3 = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
order.line_items.first.variant.should == variant1
|
|
order.line_items.second.variant.should == variant2
|
|
order.line_items.third.variant.should == variant3
|
|
end
|
|
|
|
it "should handle quantity higher than 1 when adding one specific digital Variant" do
|
|
order = FactoryGirl.create(:order)
|
|
digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
order.add_variant digital_variant, 3
|
|
order.line_items.first.quantity.should == 3
|
|
order.add_variant digital_variant, 2
|
|
order.line_items.first.quantity.should == 5
|
|
end
|
|
end
|
|
|
|
context "line_item analysis" do
|
|
it "should understand that all products are digital" do
|
|
order = FactoryGirl.create(:order)
|
|
3.times do
|
|
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
end
|
|
order.digital?.should be_true
|
|
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
|
order.digital?.should be_true
|
|
end
|
|
|
|
it "should understand that not all products are digital" do
|
|
order = FactoryGirl.create(:order)
|
|
3.times do
|
|
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
|
|
end
|
|
order.add_variant FactoryGirl.create(:variant) # this is the analog product
|
|
order.digital?.should be_false
|
|
order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
|
|
order.digital?.should be_false
|
|
end
|
|
end
|
|
|
|
context "digital shipping" do
|
|
before do
|
|
@order = FactoryGirl.create(:order)
|
|
# need shipp_address for rate_hash.count != 0
|
|
@order.ship_address = FactoryGirl.create :address
|
|
@order.bill_address = FactoryGirl.create :address
|
|
@order.save!
|
|
|
|
3.times { @order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]) }
|
|
|
|
FactoryGirl.create :digital_shipping_method
|
|
s = FactoryGirl.create :shipping_method
|
|
s.calculator.set_preference(:amount, 10)
|
|
end
|
|
|
|
let(:order) { @order }
|
|
|
|
it "should only offer digital shipping if all items are digital" do
|
|
order.digital?.should be_true
|
|
order.rate_hash.count.should == 1
|
|
order.rate_hash.first.shipping_method.calculator.class.should == Spree::Calculator::DigitalDelivery
|
|
order.rate_hash.first.cost.should == 0.0
|
|
end
|
|
|
|
it "should not offer digital shipping if only some items are digital" do
|
|
order.digital?.should be_true
|
|
order.add_variant FactoryGirl.create(:variant) # this is the analog product
|
|
order.digital?.should be_false
|
|
|
|
order.rate_hash.count.should == 1
|
|
order.rate_hash.first.shipping_method.calculator.class.should_not == Spree::Calculator::DigitalDelivery
|
|
order.rate_hash.first.cost.should == 10.0
|
|
end
|
|
end
|
|
|
|
end
|
|
|