Commit df8d2e9cee8f33997fe129fcc11991805c2dce2e
1 parent
168a8df7
Exists in
master
and in
23 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 |