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 | ... | ... |