Spree 1.1.2 compat. Adding specs for digital shipping
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -11,6 +11,6 @@ group :test do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
gem 'spree', '~> 1.1.1'
|
gem 'spree', '~> 1.1.2'
|
||||||
|
|
||||||
gemspec
|
gemspec
|
||||||
|
|||||||
@@ -10,12 +10,13 @@ Spree::Order.class_eval do
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# UPGRADE_CHECK
|
||||||
# TODO this works as of spree 1.1.1; make sure to check the original function on upgrade
|
# TODO this works as of spree 1.1.1; make sure to check the original function on upgrade
|
||||||
|
|
||||||
def available_shipping_methods(display_on = nil)
|
def available_shipping_methods(display_on = nil)
|
||||||
return [] unless ship_address
|
return [] unless ship_address
|
||||||
all_methods = Spree::ShippingMethod.all_available(self, display_on)
|
all_methods = Spree::ShippingMethod.all_available(self, display_on)
|
||||||
|
puts "ALL METHODS #{all_methods.count} #{display_on}"
|
||||||
if self.digital?
|
if self.digital?
|
||||||
all_methods.detect { |m| m.calculator.class == Spree::Calculator::DigitalDelivery }.try { |d| [d] } || all_methods
|
all_methods.detect { |m| m.calculator.class == Spree::Calculator::DigitalDelivery }.try { |d| [d] } || all_methods
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
FactoryGirl.define do
|
FactoryGirl.define do
|
||||||
factory :digital, :class => Spree::Digital do |f|
|
factory :digital, :class => Spree::Digital do |f|
|
||||||
f.variant { |p| p.association(:variant) }
|
# TODO good to assign variant association if no association is manually defined
|
||||||
|
# f.variant { |p| p.association(:variant) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
12
spec/factories/digital_shipping_factory.rb
Normal file
12
spec/factories/digital_shipping_factory.rb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
FactoryGirl.define do
|
||||||
|
# https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#modifying-factories
|
||||||
|
|
||||||
|
factory :digital_shipping_calculator, class: Spree::Calculator::DigitalDelivery do |c|
|
||||||
|
after_create { |c| c.set_preference(:amount, 0) }
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :digital_shipping_method, parent: :shipping_method do |f|
|
||||||
|
name "Digital Delivery"
|
||||||
|
calculator { FactoryGirl.build :digital_shipping_calculator }
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -52,15 +52,37 @@ describe Spree::Order do
|
|||||||
|
|
||||||
context "digital shipping" do
|
context "digital shipping" do
|
||||||
before do
|
before do
|
||||||
# TODO create digital shipping factory
|
@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
|
end
|
||||||
|
|
||||||
|
let(:order) { @order }
|
||||||
|
|
||||||
it "should only offer digital shipping if all items are digital" do
|
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
|
end
|
||||||
|
|
||||||
it "should not offer digital shipping if only some items are digital" do
|
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
|
||||||
|
puts "SHIPP #{order.rate_hash.first}"
|
||||||
|
order.rate_hash.first.cost.should == 10.0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user