Commit 6697a453e239550c59c9988a7649a72e307842e5
Committed by
Daniela Feitosa
1 parent
63d08ecc
Exists in
master
and in
29 other branches
Removing references between Product and qualifier when destroy qualifier
(ActionItem1879)
Showing
4 changed files
with
49 additions
and
1 deletions
Show diff stats
app/models/qualifier.rb
| @@ -8,4 +8,6 @@ class Qualifier < ActiveRecord::Base | @@ -8,4 +8,6 @@ class Qualifier < ActiveRecord::Base | ||
| 8 | validates_presence_of :environment_id | 8 | validates_presence_of :environment_id |
| 9 | validates_presence_of :name | 9 | validates_presence_of :name |
| 10 | 10 | ||
| 11 | + has_many :product_qualifiers, :dependent => :destroy | ||
| 12 | + | ||
| 11 | end | 13 | end |
test/factories.rb
| @@ -358,7 +358,9 @@ module Noosfero::Factory | @@ -358,7 +358,9 @@ module Noosfero::Factory | ||
| 358 | # Certifier | 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 | # Scrap | 366 | # Scrap |
test/unit/manage_products_helper_test.rb
| @@ -137,6 +137,38 @@ class ManageProductsHelperTest < Test::Unit::TestCase | @@ -137,6 +137,38 @@ class ManageProductsHelperTest < Test::Unit::TestCase | ||
| 137 | assert_equal 'LINK', edit_ui_button('link to edit', {:action => 'add_input', :id => product.id}) | 137 | assert_equal 'LINK', edit_ui_button('link to edit', {:action => 'add_input', :id => product.id}) |
| 138 | end | 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 | protected | 172 | protected |
| 141 | include NoosferoTestHelper | 173 | include NoosferoTestHelper |
| 142 | include ActionView::Helpers::TextHelper | 174 | include ActionView::Helpers::TextHelper |
test/unit/qualifier_test.rb
| @@ -30,4 +30,16 @@ class QualifierTest < Test::Unit::TestCase | @@ -30,4 +30,16 @@ class QualifierTest < Test::Unit::TestCase | ||
| 30 | assert qualifier.valid? | 30 | assert qualifier.valid? |
| 31 | end | 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 | end | 45 | end |