Look up a product's shipping method though a particular distributor

This commit is contained in:
Rohan Mitchell
2012-06-29 11:02:34 +10:00
parent 411ba107ce
commit a0c1d1d255
2 changed files with 24 additions and 0 deletions

View File

@@ -14,6 +14,13 @@ Spree::Product.class_eval do
scope :in_distributor, lambda { |distributor| joins(:product_distributions).where('product_distributions.distributor_id = ?', (distributor.respond_to?(:id) ? distributor.id : distributor.to_i)) }
def shipping_method_for_distributor(distributor)
distribution = self.product_distributions.find_by_distributor_id(distributor)
raise ArgumentError, "This product is not available through that distributor" unless distribution
distribution.shipping_method
end
# Build a product distribution for each distributor
def build_product_distributions
Spree::Distributor.all.each do |distributor|

View File

@@ -19,4 +19,21 @@ describe Spree::Product do
end
end
context "finders" do
it "finds the shipping method for a particular distributor" do
shipping_method = create(:shipping_method)
distributor = create(:distributor)
product = create(:product)
product_distribution = create(:product_distribution, :product => product, :distributor => distributor, :shipping_method => shipping_method)
product.shipping_method_for_distributor(distributor).should == shipping_method
end
it "raises an error if distributor is not found" do
distributor = create(:distributor)
product = create(:product)
expect do
product.shipping_method_for_distributor(distributor)
end.to raise_error "This product is not available through that distributor"
end
end
end