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,6 +686,17 @@ class ProfileTest < Test::Unit::TestCase | ||
686 | assert_equal [c2, c3], profile.categories(true) | 686 | assert_equal [c2, c3], profile.categories(true) |
687 | end | 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 | private | 700 | private |
690 | 701 | ||
691 | def assert_invalid_identifier(id) | 702 | def assert_invalid_identifier(id) |
vendor/plugins/access_control/lib/acts_as_accessible.rb
@@ -6,7 +6,7 @@ class ActiveRecord::Base | @@ -6,7 +6,7 @@ class ActiveRecord::Base | ||
6 | 6 | ||
7 | # Acts as accessible makes a model acts as a resource that can be targeted by a permission | 7 | # Acts as accessible makes a model acts as a resource that can be targeted by a permission |
8 | def self.acts_as_accessible | 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 | # A superior instance is an object that has higher level an thus can be targeted by a permission | 11 | # A superior instance is an object that has higher level an thus can be targeted by a permission |
12 | # to represent an permission over a group of related resources rather than a single one | 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
1 | class ActiveRecord::Base | 1 | class ActiveRecord::Base |
2 | def self.acts_as_accessor | 2 | def self.acts_as_accessor |
3 | - has_many :role_assignments, :as => :accessor | 3 | + has_many :role_assignments, :as => :accessor, :dependent => :destroy |
4 | 4 | ||
5 | def has_permission?(permission, resource = nil) | 5 | def has_permission?(permission, resource = nil) |
6 | return true if resource == self | 6 | return true if resource == self |
vendor/plugins/access_control/test/acts_as_accessible_test.rb
1 | require 'test/unit' | 1 | require 'test/unit' |
2 | require File.dirname(__FILE__) + '/test_helper' | 2 | require File.dirname(__FILE__) + '/test_helper' |
3 | 3 | ||
4 | -class AccessControlTest < Test::Unit::TestCase | 4 | +class ActsAsAccessibleTest < Test::Unit::TestCase |
5 | 5 | ||
6 | def test_can_have_role_in_respect_to_an_resource | 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 | r.affiliate(a, member_role) | 10 | r.affiliate(a, member_role) |
11 | assert a.has_permission?('bli', r) | 11 | assert a.has_permission?('bli', r) |
12 | end | 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 | r = AccessControlTestResource.create(:name => 'bla') | 15 | r = AccessControlTestResource.create(:name => 'bla') |
16 | a = AccessControlTestAccessor.create(:name => 'ze') | 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 | r.affiliate(a, member_role) | 18 | r.affiliate(a, member_role) |
19 | + assert a.has_permission?('bli', r) | ||
19 | r.disaffiliate(a, member_role) | 20 | r.disaffiliate(a, member_role) |
21 | + r.reload; a.reload | ||
20 | assert !a.has_permission?('bli', r) | 22 | assert !a.has_permission?('bli', r) |
21 | end | 23 | end |
22 | 24 | ||
23 | def test_can_affiliate_more_than_one_role | 25 | def test_can_affiliate_more_than_one_role |
24 | r = AccessControlTestResource.create(:name => 'bla') | 26 | r = AccessControlTestResource.create(:name => 'bla') |
25 | a = AccessControlTestAccessor.create(:name => 'ze') | 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 | r.affiliate(a, [member_role, admin_role]) | 30 | r.affiliate(a, [member_role, admin_role]) |
29 | assert a.has_permission?('bli', r) | 31 | assert a.has_permission?('bli', r) |
30 | assert a.has_permission?('bla', r) | 32 | assert a.has_permission?('bla', r) |
31 | end | 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 | end | 47 | end |