Commit 6697a453e239550c59c9988a7649a72e307842e5

Authored by Joenio Costa
Committed by Daniela Feitosa
1 parent 63d08ecc

Removing references between Product and qualifier when destroy qualifier

(ActionItem1879)
app/models/qualifier.rb
... ... @@ -8,4 +8,6 @@ class Qualifier < ActiveRecord::Base
8 8 validates_presence_of :environment_id
9 9 validates_presence_of :name
10 10  
  11 + has_many :product_qualifiers, :dependent => :destroy
  12 +
11 13 end
... ...
test/factories.rb
... ... @@ -358,7 +358,9 @@ module Noosfero::Factory
358 358 # Certifier
359 359 ###############################################
360 360  
361   - alias :defaults_for_certifier :defaults_for_qualifier
  361 + def defaults_for_certifier
  362 + defaults_for_qualifier.merge({ :name => 'Certifier ' + factory_num_seq.to_s })
  363 + end
362 364  
363 365 ###############################################
364 366 # Scrap
... ...
test/unit/manage_products_helper_test.rb
... ... @@ -137,6 +137,38 @@ class ManageProductsHelperTest < Test::Unit::TestCase
137 137 assert_equal 'LINK', edit_ui_button('link to edit', {:action => 'add_input', :id => product.id})
138 138 end
139 139  
  140 + should 'list qualifiers and certifiers of a product' do
  141 + product = fast_create(Product)
  142 + qualifier = fast_create(Qualifier)
  143 + certifier = fast_create(Certifier)
  144 + ProductQualifier.create!(:product => product, :qualifier => qualifier, :certifier => certifier)
  145 + assert_match /✔ Qualifier \d+ certified by Certifier \d+/, display_qualifiers(product)
  146 + end
  147 +
  148 + should 'product survive to a Qualifier deletation' do
  149 + product = fast_create(Product)
  150 + qualifier = fast_create(Qualifier)
  151 + certifier = fast_create(Certifier)
  152 + ProductQualifier.create!(:product => product, :qualifier => qualifier, :certifier => certifier)
  153 + qualifier.destroy
  154 + assert_nothing_raised do
  155 + assert_no_match /✔ Qualifier \d+ certified by Certifier \d+/, display_qualifiers(product)
  156 + end
  157 + end
  158 +
  159 + should 'product consider its Qualifier self-declared when Certifier is deleted' do
  160 + product = fast_create(Product)
  161 + qualifier = fast_create(Qualifier)
  162 + certifier = fast_create(Certifier)
  163 + ProductQualifier.create!(:product => product, :qualifier => qualifier, :certifier => certifier)
  164 + certifier.destroy
  165 + assert_nothing_raised do
  166 + result = display_qualifiers(product)
  167 + assert_match /✔ Qualifier \d+ \(Self declared\)/, result
  168 + assert_no_match /certified by Certifier \d+/, result
  169 + end
  170 + end
  171 +
140 172 protected
141 173 include NoosferoTestHelper
142 174 include ActionView::Helpers::TextHelper
... ...
test/unit/qualifier_test.rb
... ... @@ -30,4 +30,16 @@ class QualifierTest < Test::Unit::TestCase
30 30 assert qualifier.valid?
31 31 end
32 32  
  33 + should 'clean all ProductQualifier when destroy a Qualifier' do
  34 + product1 = fast_create(Product)
  35 + product2 = fast_create(Product)
  36 + qualifier = fast_create(Qualifier, :name => 'Free Software')
  37 + certifier = fast_create(Certifier, :name => 'FSF')
  38 + ProductQualifier.create!(:product => product1, :qualifier => qualifier, :certifier => certifier)
  39 + ProductQualifier.create!(:product => product2, :qualifier => qualifier, :certifier => certifier)
  40 + assert_equal [['Free Software', 'FSF']], product1.product_qualifiers.map{|i| [i.qualifier.name, i.certifier.name]}
  41 + Qualifier.destroy_all
  42 + assert_equal [], product1.product_qualifiers(true)
  43 + end
  44 +
33 45 end
... ...