From 95e9b97abecac3a2c92c102f648730c2716afd11 Mon Sep 17 00:00:00 2001 From: Michael Bianco Date: Mon, 9 Jul 2012 13:32:45 -0400 Subject: [PATCH] Spree 1.1.2 compat. Adding specs for digital shipping --- Gemfile | 2 +- app/models/spree/order_decorator.rb | 3 ++- spec/factories/digital_factory.rb | 3 ++- spec/factories/digital_shipping_factory.rb | 12 ++++++++++ spec/models/order_spec.rb | 28 +++++++++++++++++++--- 5 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 spec/factories/digital_shipping_factory.rb diff --git a/Gemfile b/Gemfile index d272462..4e3bea9 100644 --- a/Gemfile +++ b/Gemfile @@ -11,6 +11,6 @@ group :test do end end -gem 'spree', '~> 1.1.1' +gem 'spree', '~> 1.1.2' gemspec diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 5ac00de..8982712 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -10,12 +10,13 @@ Spree::Order.class_eval do false end + # UPGRADE_CHECK # 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) return [] unless ship_address all_methods = Spree::ShippingMethod.all_available(self, display_on) - + puts "ALL METHODS #{all_methods.count} #{display_on}" if self.digital? all_methods.detect { |m| m.calculator.class == Spree::Calculator::DigitalDelivery }.try { |d| [d] } || all_methods else diff --git a/spec/factories/digital_factory.rb b/spec/factories/digital_factory.rb index c8e6f3c..0250802 100644 --- a/spec/factories/digital_factory.rb +++ b/spec/factories/digital_factory.rb @@ -1,5 +1,6 @@ FactoryGirl.define do 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 \ No newline at end of file diff --git a/spec/factories/digital_shipping_factory.rb b/spec/factories/digital_shipping_factory.rb new file mode 100644 index 0000000..10f5afc --- /dev/null +++ b/spec/factories/digital_shipping_factory.rb @@ -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 \ No newline at end of file diff --git a/spec/models/order_spec.rb b/spec/models/order_spec.rb index 9600aa0..554409d 100644 --- a/spec/models/order_spec.rb +++ b/spec/models/order_spec.rb @@ -52,15 +52,37 @@ describe Spree::Order do context "digital shipping" 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 + 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 + puts "SHIPP #{order.rate_hash.first}" + order.rate_hash.first.cost.should == 10.0 end end