Commit 7a857453f63c1aebd689602c132d5cb3f2c40ad4
1 parent
69ebcc10
Exists in
master
and in
28 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) | ... | ... |