Commit 7a857453f63c1aebd689602c132d5cb3f2c40ad4
1 parent
69ebcc10
Exists in
master
and in
29 other branches
ActionItem512: adding region for profiles
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2129 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
6 changed files
with
111 additions
and
1 deletions
Show diff stats
app/helpers/application_helper.rb
... | ... | @@ -405,7 +405,7 @@ module ApplicationHelper |
405 | 405 | Effect.toggle( div, "slide", { link:link, div:div, afterFinish:end } ) |
406 | 406 | }') |
407 | 407 | environment.top_level_categories.each do |toplevel| |
408 | - next if toplevel.is_a?(ProductCategory) | |
408 | + next unless object.accept_category?(toplevel) | |
409 | 409 | # FIXME |
410 | 410 | ([toplevel] + toplevel.children_for_menu).each do |cat| |
411 | 411 | if cat.top_level? | ... | ... |
app/models/article.rb
app/models/profile.rb
... | ... | @@ -103,6 +103,8 @@ class Profile < ActiveRecord::Base |
103 | 103 | has_many :profile_categorizations, :conditions => [ 'categories_profiles.virtual = ?', false ] |
104 | 104 | has_many :categories, :through => :profile_categorizations |
105 | 105 | |
106 | + belongs_to :region | |
107 | + | |
106 | 108 | def pending_categorizations |
107 | 109 | @pending_categorizations ||= [] |
108 | 110 | end |
... | ... | @@ -359,4 +361,19 @@ class Profile < ActiveRecord::Base |
359 | 361 | end |
360 | 362 | end |
361 | 363 | |
364 | + after_save :update_category_from_region | |
365 | + def update_category_from_region | |
366 | + categories.find(:all, :conditions => "type = 'Region'").each do |cat| | |
367 | + categories.delete(cat) | |
368 | + end | |
369 | + if region | |
370 | + categories << region | |
371 | + end | |
372 | + end | |
373 | + | |
374 | + def accept_category?(cat) | |
375 | + forbidden = [ ProductCategory, Region ] | |
376 | + !forbidden.include?(cat.class) | |
377 | + end | |
378 | + | |
362 | 379 | end | ... | ... |
test/unit/article_test.rb
test/unit/profile_test.rb
... | ... | @@ -580,6 +580,82 @@ class ProfileTest < Test::Unit::TestCase |
580 | 580 | assert_equivalent [c1, c2], profile.categories(true) |
581 | 581 | end |
582 | 582 | |
583 | + should 'be associated with a region' do | |
584 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
585 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region) | |
586 | + | |
587 | + assert_equal region, profile.region | |
588 | + end | |
589 | + | |
590 | + should 'categorized automatically in its region' do | |
591 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
592 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region) | |
593 | + | |
594 | + assert_equal [region], profile.categories(true) | |
595 | + end | |
596 | + | |
597 | + should 'change categorization when changing region' do | |
598 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
599 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region) | |
600 | + | |
601 | + region2 = Region.create!(:name => "Feira de Santana", :environment => Environment.default) | |
602 | + | |
603 | + profile.region = region2 | |
604 | + profile.save! | |
605 | + | |
606 | + assert_equal [region2], profile.categories(true) | |
607 | + end | |
608 | + | |
609 | + should 'remove categorization when removing region' do | |
610 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
611 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region) | |
612 | + | |
613 | + profile.region = nil | |
614 | + profile.save! | |
615 | + | |
616 | + assert_equal [], profile.categories(true) | |
617 | + end | |
618 | + | |
619 | + should 'not remove region, only dissasociate from it' do | |
620 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
621 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region) | |
622 | + | |
623 | + profile.region = nil | |
624 | + profile.save! | |
625 | + | |
626 | + assert_nothing_raised do | |
627 | + Region.find(region.id) | |
628 | + end | |
629 | + end | |
630 | + | |
631 | + should 'be able to create with categories and region at the same time' do | |
632 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
633 | + category = Category.create!(:name => 'test category', :environment => Environment.default) | |
634 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region, :category_ids => [category.id]) | |
635 | + | |
636 | + assert_equivalent [region, category], profile.categories(true) | |
637 | + end | |
638 | + | |
639 | + should 'be able to update categories and not get regions removed' do | |
640 | + region = Region.create!(:name => "Salvador", :environment => Environment.default) | |
641 | + category = Category.create!(:name => 'test category', :environment => Environment.default) | |
642 | + profile = Profile.create!(:name => 'testprofile', :identifier => 'testprofile', :region => region, :category_ids => [category.id]) | |
643 | + | |
644 | + category2 = Category.create!(:name => 'test category 2', :environment => Environment.default) | |
645 | + | |
646 | + profile.update_attributes!(:category_ids => [category2.id]) | |
647 | + | |
648 | + assert_includes profile.categories(true), region | |
649 | + end | |
650 | + | |
651 | + should 'not accept product category as category' do | |
652 | + assert !Profile.new.accept_category?(ProductCategory.new) | |
653 | + end | |
654 | + | |
655 | + should 'not accept region as a category' do | |
656 | + assert !Profile.new.accept_category?(Region.new) | |
657 | + end | |
658 | + | |
583 | 659 | private |
584 | 660 | |
585 | 661 | def assert_invalid_identifier(id) | ... | ... |