diff --git a/app/models/spree/line_item_decorator.rb b/app/models/spree/line_item_decorator.rb
index 8d73a3e..abdf8be 100644
--- a/app/models/spree/line_item_decorator.rb
+++ b/app/models/spree/line_item_decorator.rb
@@ -1,10 +1,8 @@
Spree::LineItem.class_eval do
has_many :digital_links, :dependent => :destroy
-
after_save :create_digital_links, :if => :digital?
- # Is this item digital?
def digital?
variant.digital?
end
@@ -15,8 +13,10 @@ Spree::LineItem.class_eval do
def create_digital_links
digital_links.delete_all
- self.quantity.times do
- digital_links.create!(:digital => variant.digital)
+ variant.digitals.each do |digital|
+ self.quantity.times do
+ digital_links.create!(:digital => digital)
+ end
end
end
diff --git a/app/models/spree/variant_decorator.rb b/app/models/spree/variant_decorator.rb
index acf8eb5..e090aa4 100644
--- a/app/models/spree/variant_decorator.rb
+++ b/app/models/spree/variant_decorator.rb
@@ -1,11 +1,11 @@
Spree::Variant.class_eval do
- has_one :digital, :dependent => :destroy
+ has_many :digitals, :dependent => :destroy
after_save :destroy_digital, :if => :deleted?
# Is this variant to be downloaded by the customer?
def digital?
- digital.present?
+ digitals.present?
end
private
diff --git a/app/views/spree/admin/digitals/_form.html.erb b/app/views/spree/admin/digitals/_form.html.erb
index e017113..7ac9233 100644
--- a/app/views/spree/admin/digitals/_form.html.erb
+++ b/app/views/spree/admin/digitals/_form.html.erb
@@ -1,35 +1,36 @@
-
-
- <%= form_for(:digital, :url => { :controller => 'digitals', :action => 'create' }, :html => { :multipart => true }) do |f| %>
+
+
+ <%= form_for(:digital, :url => { :controller => 'digitals', :action => 'create' }, :html => { :multipart => true }) do |f| %>
+ <%= hidden_field_tag 'digital[variant_id]', variant.id %>
+
+ <%= button t('spree_digital.upload') %>
+
+
+
<% end %>
-
-
\ No newline at end of file
+
diff --git a/spec/models/line_item_spec.rb b/spec/models/line_item_spec.rb
index b8a64dd..97dbc0e 100644
--- a/spec/models/line_item_spec.rb
+++ b/spec/models/line_item_spec.rb
@@ -4,27 +4,31 @@ describe Spree::LineItem do
context "#save" do
it "should create one link for a single digital Variant" do
- digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
+ digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
line_item = FactoryGirl.create(:line_item, :variant => digital_variant)
- links = digital_variant.digital.digital_links
+ links = digital_variant.digitals.first.digital_links
links.all.size.should == 1
links.first.line_item.should == line_item
end
it "should create a link for each quantity of a digital Variant, even when quantity changes later" do
- digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
+ digital_variant = FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
line_item = FactoryGirl.create(:line_item, :variant => digital_variant, :quantity => 5)
- links = digital_variant.digital.digital_links
+ links = digital_variant.digitals.first.digital_links
links.all.size.should == 5
links.each { |link| link.line_item.should == line_item }
# quantity update
line_item.quantity = 8
line_item.save
- links = digital_variant.digital.digital_links
+ links = digital_variant.digitals.first.digital_links
links.all.size.should == 8
links.each { |link| link.line_item.should == line_item }
end
+
+ it "should create a link for digital variants with multiple digital downloads attached" do
+
+ end
end
end
diff --git a/spec/models/order_spec.rb b/spec/models/order_spec.rb
index 404d055..b361524 100644
--- a/spec/models/order_spec.rb
+++ b/spec/models/order_spec.rb
@@ -9,9 +9,9 @@ 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, :digital => FactoryGirl.create(:digital))
- order.add_variant variant2 = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
- order.add_variant variant3 = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
+ 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
@@ -19,7 +19,7 @@ describe Spree::Order do
it "should handle quantity higher than 1 when adding one specific digital Variant" do
order = FactoryGirl.create(:order)
- digital_variant = FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
+ 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
@@ -31,21 +31,21 @@ describe Spree::Order do
it "should understand that all products are digital" do
order = FactoryGirl.create(:order)
3.times do
- order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital))
+ order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)])
end
order.digital?.should be_true
- order.add_variant FactoryGirl.create(:variant, :digital => FactoryGirl.create(:digital)), 4
+ 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, :digital => FactoryGirl.create(:digital))
+ 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, :digital => FactoryGirl.create(:digital)), 4
+ order.add_variant FactoryGirl.create(:variant, :digitals => [FactoryGirl.create(:digital)]), 4
order.digital?.should be_false
end
end