diff --git a/app/models/product.rb b/app/models/product.rb index e62a2be..554d773 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -164,13 +164,21 @@ class Product < ActiveRecord::Base def qualifiers_list=(qualifiers) self.product_qualifiers.destroy_all qualifiers.each do |qualifier_id, certifier_id| - self.product_qualifiers.create(:qualifier_id => qualifier_id, :certifier_id => certifier_id) if qualifier_id != 'nil' + if qualifier_id != 'nil' + product_qualifier = ProductQualifier.new + product_qualifier.product = self + product_qualifier.qualifier_id = qualifier_id + product_qualifier.certifier_id = certifier_id + product_qualifier.save! + end end end def order_inputs!(order = []) order.each_with_index do |input_id, array_index| - self.inputs.find(input_id).update_attributes(:position => array_index + 1) + input = self.inputs.find(input_id) + input.position = array_index + 1 + input.save! end end diff --git a/test/unit/product_test.rb b/test/unit/product_test.rb index b0698c1..7ac1aa5 100644 --- a/test/unit/product_test.rb +++ b/test/unit/product_test.rb @@ -25,7 +25,7 @@ class ProductTest < ActiveSupport::TestCase should 'create product' do assert_difference Product, :count do - p = Product.new(:name => 'test product1', :product_category => @product_category, :enterprise_id => @profile.id) + p = build(Product, :name => 'test product1', :product_category => @product_category, :enterprise_id => @profile.id) assert p.save end end @@ -82,7 +82,7 @@ class ProductTest < ActiveSupport::TestCase should 'save image on create product' do assert_difference Product, :count do - p = Product.create!(:name => 'test product1', :product_category => @product_category, :image_builder => { + p = create(Product, :name => 'test product1', :product_category => @product_category, :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png') }, :enterprise_id => @profile.id) assert_equal p.image(true).filename, 'rails.png' @@ -158,7 +158,7 @@ class ProductTest < ActiveSupport::TestCase ["12.345.678", 12345678.00], ["12,345,678", 12345678.00] ].each do |input, output| - product = Product.new(:price => input) + product = build(Product, :price => input) assert_equal output, product.price end end @@ -173,13 +173,13 @@ class ProductTest < ActiveSupport::TestCase ["12.345.678", 12345678.00], ["12,345,678", 12345678.00] ].each do |input, output| - product = Product.new(:discount => input) + product = build(Product, :discount => input) assert_equal output, product.discount end end should 'strip name with malformed HTML when sanitize' do - product = Product.new(:product_category => @product_category) + product = build(Product, :product_category => @product_category) product.name = "

" product.valid? @@ -187,7 +187,7 @@ class ProductTest < ActiveSupport::TestCase end should 'escape malformed html tags' do - product = Product.new(:product_category => @product_category) + product = build(Product, :product_category => @product_category) product.name = "

> html >< tag" product.description = "

><<> >> html >< tag" product.valid? @@ -197,21 +197,23 @@ class ProductTest < ActiveSupport::TestCase end should 'use name of category when has no name yet' do - product = Product.new(:product_category => @product_category, :enterprise_id => @profile.id) + product = Product.new + product.product_category = @product_category + product.enterprise = @profile assert product.valid? - assert_equal product.name, @product_category.name + assert_equal @product_category.name, product.name end should 'not save without category' do - product = Product.new(:name => 'A product without category') + product = build(Product, :name => 'A product without category') product.valid? assert product.errors[:product_category_id.to_s].present? end should 'not save with a invalid category' do - category = Category.new(:name => 'Region', :environment => Environment.default) + category = build(Category, :name => 'Region', :environment => Environment.default) assert_raise ActiveRecord::AssociationTypeMismatch do - Product.new(:name => 'Invalid category product', :product_category => category) + build(Product, :name => 'Invalid category product', :product_category => category) end end @@ -282,13 +284,13 @@ class ProductTest < ActiveSupport::TestCase product = Product.new assert !product.has_basic_info? - product = Product.new(:unit => Unit.new) + product = build(Product, :unit => Unit.new) assert product.has_basic_info? - product = Product.new(:price => 1) + product = build(Product, :price => 1) assert product.has_basic_info? - product = Product.new(:discount => 1) + product = build(Product, :discount => 1) assert product.has_basic_info? end @@ -307,9 +309,9 @@ class ProductTest < ActiveSupport::TestCase should 'save order of inputs' do product = fast_create(Product) - first = Input.create!(:product => product, :product_category => fast_create(ProductCategory)) - second = Input.create!(:product => product, :product_category => fast_create(ProductCategory)) - third = Input.create!(:product => product, :product_category => fast_create(ProductCategory)) + first = create(Input, :product => product, :product_category => fast_create(ProductCategory)) + second = create(Input, :product => product, :product_category => fast_create(ProductCategory)) + third = create(Input, :product => product, :product_category => fast_create(ProductCategory)) assert_equal [first, second, third], product.inputs @@ -319,9 +321,9 @@ class ProductTest < ActiveSupport::TestCase end should 'format name with unit' do - product = Product.new(:name => "My product") + product = build(Product, :name => "My product") assert_equal "My product", product.name_with_unit - product.unit = Unit.new(:name => 'litre') + product.unit = build(Unit, :name => 'litre') assert_equal "My product - litre", product.name_with_unit end @@ -427,7 +429,7 @@ class ProductTest < ActiveSupport::TestCase env_production_cost = fast_create(ProductionCost, :owner_id => ent.environment.id, :owner_type => 'Environment') ent_production_cost = fast_create(ProductionCost, :owner_id => ent.id, :owner_type => 'Profile') - product.price_details.create(:production_cost => env_production_cost, :product => product) + create(PriceDetail, :product => product, :production_cost => env_production_cost, :product => product) assert_equal [env_production_cost, ent_production_cost], product.available_production_costs end @@ -436,7 +438,7 @@ class ProductTest < ActiveSupport::TestCase product = fast_create(Product, :enterprise_id => ent.id) env_production_cost = fast_create(ProductionCost, :owner_id => ent.environment.id, :owner_type => 'Environment') - price_detail = product.price_details.create(:production_cost => env_production_cost, :price => 10) + price_detail = create(PriceDetail, :product => product, :production_cost => env_production_cost, :price => 10) input = fast_create(Input, :product_id => product.id, :product_category_id => fast_create(ProductCategory).id, :price_per_unit => 20.0, :amount_used => 2) @@ -493,31 +495,31 @@ class ProductTest < ActiveSupport::TestCase prod = fast_create(Product, :name => 'test product1', :product_category_id => @product_category.id, :enterprise_id => @profile.id) assert_equal 0, prod.percentage_from_solidarity_economy.first - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => false) assert_equal 0, prod.percentage_from_solidarity_economy.first - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => true) assert_equal 50, prod.percentage_from_solidarity_economy.first - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => false) assert_equal 25, prod.percentage_from_solidarity_economy.first prod = fast_create(Product, :name => 'test product1', :product_category_id => @product_category.id, :enterprise_id => @profile.id) - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => true) - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => true) - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => true) - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => false) assert_equal 75, prod.percentage_from_solidarity_economy.first prod = fast_create(Product, :name => 'test product', :product_category_id => @product_category.id, :enterprise_id => @profile.id) - Input.create!(:product_id => prod.id, :product_category_id => @product_category.id, + create(Input, :product_id => prod.id, :product_category_id => @product_category.id, :amount_used => 10, :price_per_unit => 10, :is_from_solidarity_economy => true) assert_equal 100, prod.percentage_from_solidarity_economy.first end @@ -543,9 +545,9 @@ class ProductTest < ActiveSupport::TestCase should 'return more recent products' do Product.destroy_all - prod1 = Product.create!(:name => 'Damaged LP', :enterprise_id => @profile.id, :product_category_id => @product_category.id) - prod2 = Product.create!(:name => 'Damaged CD', :enterprise_id => @profile.id, :product_category_id => @product_category.id) - prod3 = Product.create!(:name => 'Damaged DVD', :enterprise_id => @profile.id, :product_category_id => @product_category.id) + prod1 = create(Product, :name => 'Damaged LP', :enterprise_id => @profile.id, :product_category_id => @product_category.id) + prod2 = create(Product, :name => 'Damaged CD', :enterprise_id => @profile.id, :product_category_id => @product_category.id) + prod3 = create(Product, :name => 'Damaged DVD', :enterprise_id => @profile.id, :product_category_id => @product_category.id) prod1.update_attribute :created_at, Time.now-2.days prod2.update_attribute :created_at, Time.now-1.days @@ -555,9 +557,9 @@ class ProductTest < ActiveSupport::TestCase end should 'return products from a category' do - pc1 = ProductCategory.create!(:name => 'PC1', :environment => Environment.default) - pc2 = ProductCategory.create!(:name => 'PC2', :environment => Environment.default) - pc3 = ProductCategory.create!(:name => 'PC3', :environment => Environment.default, :parent => pc1) + pc1 = create(ProductCategory, :name => 'PC1', :environment => Environment.default) + pc2 = create(ProductCategory, :name => 'PC2', :environment => Environment.default) + pc3 = create(ProductCategory, :name => 'PC3', :environment => Environment.default, :parent => pc1) p1 = fast_create(Product, :product_category_id => pc1) p2 = fast_create(Product, :product_category_id => pc1) p3 = fast_create(Product, :product_category_id => pc2) -- libgit2 0.21.2