Commit df8d2e9cee8f33997fe129fcc11991805c2dce2e
1 parent
168a8df7
Exists in
master
and in
28 other branches
ActionItem557: fixed nil members
changed the acts_as_accessible and acts_as_accessor to destroy theirs role assginments when deleted so theres no nil members or nil memberships git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2276 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
4 changed files
with
35 additions
and
10 deletions
Show diff stats
test/unit/profile_test.rb
| ... | ... | @@ -686,6 +686,17 @@ class ProfileTest < Test::Unit::TestCase |
| 686 | 686 | assert_equal [c2, c3], profile.categories(true) |
| 687 | 687 | end |
| 688 | 688 | |
| 689 | + should 'not return nil members when a member is removed from system' do | |
| 690 | + p = Profile.create!(:name => 'test profile', :identifier => 'test_profile') | |
| 691 | + member = create_user('test_user').person | |
| 692 | + p.affiliate(member, Profile::Roles.member) | |
| 693 | + | |
| 694 | + member.destroy | |
| 695 | + p.reload | |
| 696 | + | |
| 697 | + assert_not_includes p.members, nil | |
| 698 | + end | |
| 699 | + | |
| 689 | 700 | private |
| 690 | 701 | |
| 691 | 702 | def assert_invalid_identifier(id) | ... | ... |
vendor/plugins/access_control/lib/acts_as_accessible.rb
| ... | ... | @@ -6,7 +6,7 @@ class ActiveRecord::Base |
| 6 | 6 | |
| 7 | 7 | # Acts as accessible makes a model acts as a resource that can be targeted by a permission |
| 8 | 8 | def self.acts_as_accessible |
| 9 | - has_many :role_assignments, :as => :resource | |
| 9 | + has_many :role_assignments, :as => :resource, :dependent => :destroy | |
| 10 | 10 | |
| 11 | 11 | # A superior instance is an object that has higher level an thus can be targeted by a permission |
| 12 | 12 | # to represent an permission over a group of related resources rather than a single one | ... | ... |
vendor/plugins/access_control/lib/acts_as_accessor.rb
vendor/plugins/access_control/test/acts_as_accessible_test.rb
| 1 | 1 | require 'test/unit' |
| 2 | 2 | require File.dirname(__FILE__) + '/test_helper' |
| 3 | 3 | |
| 4 | -class AccessControlTest < Test::Unit::TestCase | |
| 4 | +class ActsAsAccessibleTest < Test::Unit::TestCase | |
| 5 | 5 | |
| 6 | 6 | def test_can_have_role_in_respect_to_an_resource |
| 7 | - r = AccessControlTestResource.create(:name => 'bla') | |
| 8 | - a = AccessControlTestAccessor.create(:name => 'ze') | |
| 9 | - member_role = Role.create(:name => 'member', :permissions => ['bli']) | |
| 7 | + r = AccessControlTestResource.create!(:name => 'bla') | |
| 8 | + a = AccessControlTestAccessor.create!(:name => 'ze') | |
| 9 | + member_role = Role.create!(:name => 'some new role for member', :permissions => ['bli']) | |
| 10 | 10 | r.affiliate(a, member_role) |
| 11 | 11 | assert a.has_permission?('bli', r) |
| 12 | 12 | end |
| 13 | 13 | |
| 14 | - def test_cant_have_role_in_respect_to_an_resource | |
| 14 | + def test_can_unhave_a_role_in_respect_to_an_resource | |
| 15 | 15 | r = AccessControlTestResource.create(:name => 'bla') |
| 16 | 16 | a = AccessControlTestAccessor.create(:name => 'ze') |
| 17 | - member_role = Role.create(:name => 'member', :permissions => ['bli']) | |
| 17 | + member_role = Role.create(:name => 'some wrenked role for member', :permissions => ['bli']) | |
| 18 | 18 | r.affiliate(a, member_role) |
| 19 | + assert a.has_permission?('bli', r) | |
| 19 | 20 | r.disaffiliate(a, member_role) |
| 21 | + r.reload; a.reload | |
| 20 | 22 | assert !a.has_permission?('bli', r) |
| 21 | 23 | end |
| 22 | 24 | |
| 23 | 25 | def test_can_affiliate_more_than_one_role |
| 24 | 26 | r = AccessControlTestResource.create(:name => 'bla') |
| 25 | 27 | a = AccessControlTestAccessor.create(:name => 'ze') |
| 26 | - member_role = Role.create(:name => 'member', :permissions => ['bli']) | |
| 27 | - admin_role = Role.create(:name => 'admin', :permissions => ['bla']) | |
| 28 | + member_role = Role.create(:name => 'some member role', :permissions => ['bli']) | |
| 29 | + admin_role = Role.create(:name => 'some admin role', :permissions => ['bla']) | |
| 28 | 30 | r.affiliate(a, [member_role, admin_role]) |
| 29 | 31 | assert a.has_permission?('bli', r) |
| 30 | 32 | assert a.has_permission?('bla', r) |
| 31 | 33 | end |
| 32 | 34 | |
| 35 | + def test_do_not_list_removed_nil_members | |
| 36 | + r = AccessControlTestResource.create(:name => 'bla') | |
| 37 | + a = AccessControlTestAccessor.create(:name => 'ze') | |
| 38 | + member_role = Role.create(:name => 'some tested member role', :permissions => ['bli']) | |
| 39 | + r.affiliate(a, member_role) | |
| 40 | + assert r.members.include?( a ), "expected #{r.inspect} to include #{a.inspect}" | |
| 41 | + a.destroy | |
| 42 | + r.reload | |
| 43 | + assert !r.members.include?( a ), "expected #{r.inspect} to not include #{a.inspect}" | |
| 44 | + assert !r.members.include?( nil ), "expected #{r.inspect} to not include nil" | |
| 45 | + end | |
| 46 | + | |
| 33 | 47 | end | ... | ... |