diff --git a/test/unit/profile_test.rb b/test/unit/profile_test.rb index 5820fed..7975c23 100644 --- a/test/unit/profile_test.rb +++ b/test/unit/profile_test.rb @@ -686,6 +686,17 @@ class ProfileTest < Test::Unit::TestCase assert_equal [c2, c3], profile.categories(true) end + should 'not return nil members when a member is removed from system' do + p = Profile.create!(:name => 'test profile', :identifier => 'test_profile') + member = create_user('test_user').person + p.affiliate(member, Profile::Roles.member) + + member.destroy + p.reload + + assert_not_includes p.members, nil + end + private def assert_invalid_identifier(id) diff --git a/vendor/plugins/access_control/lib/acts_as_accessible.rb b/vendor/plugins/access_control/lib/acts_as_accessible.rb index 82f8c4e..3f896d1 100644 --- a/vendor/plugins/access_control/lib/acts_as_accessible.rb +++ b/vendor/plugins/access_control/lib/acts_as_accessible.rb @@ -6,7 +6,7 @@ class ActiveRecord::Base # Acts as accessible makes a model acts as a resource that can be targeted by a permission def self.acts_as_accessible - has_many :role_assignments, :as => :resource + has_many :role_assignments, :as => :resource, :dependent => :destroy # A superior instance is an object that has higher level an thus can be targeted by a permission # to represent an permission over a group of related resources rather than a single one diff --git a/vendor/plugins/access_control/lib/acts_as_accessor.rb b/vendor/plugins/access_control/lib/acts_as_accessor.rb index 81cf859..f1bd39b 100644 --- a/vendor/plugins/access_control/lib/acts_as_accessor.rb +++ b/vendor/plugins/access_control/lib/acts_as_accessor.rb @@ -1,6 +1,6 @@ class ActiveRecord::Base def self.acts_as_accessor - has_many :role_assignments, :as => :accessor + has_many :role_assignments, :as => :accessor, :dependent => :destroy def has_permission?(permission, resource = nil) return true if resource == self diff --git a/vendor/plugins/access_control/test/acts_as_accessible_test.rb b/vendor/plugins/access_control/test/acts_as_accessible_test.rb index 6560f9d..3f51b82 100644 --- a/vendor/plugins/access_control/test/acts_as_accessible_test.rb +++ b/vendor/plugins/access_control/test/acts_as_accessible_test.rb @@ -1,33 +1,47 @@ require 'test/unit' require File.dirname(__FILE__) + '/test_helper' -class AccessControlTest < Test::Unit::TestCase +class ActsAsAccessibleTest < Test::Unit::TestCase def test_can_have_role_in_respect_to_an_resource - r = AccessControlTestResource.create(:name => 'bla') - a = AccessControlTestAccessor.create(:name => 'ze') - member_role = Role.create(:name => 'member', :permissions => ['bli']) + r = AccessControlTestResource.create!(:name => 'bla') + a = AccessControlTestAccessor.create!(:name => 'ze') + member_role = Role.create!(:name => 'some new role for member', :permissions => ['bli']) r.affiliate(a, member_role) assert a.has_permission?('bli', r) end - def test_cant_have_role_in_respect_to_an_resource + def test_can_unhave_a_role_in_respect_to_an_resource r = AccessControlTestResource.create(:name => 'bla') a = AccessControlTestAccessor.create(:name => 'ze') - member_role = Role.create(:name => 'member', :permissions => ['bli']) + member_role = Role.create(:name => 'some wrenked role for member', :permissions => ['bli']) r.affiliate(a, member_role) + assert a.has_permission?('bli', r) r.disaffiliate(a, member_role) + r.reload; a.reload assert !a.has_permission?('bli', r) end def test_can_affiliate_more_than_one_role r = AccessControlTestResource.create(:name => 'bla') a = AccessControlTestAccessor.create(:name => 'ze') - member_role = Role.create(:name => 'member', :permissions => ['bli']) - admin_role = Role.create(:name => 'admin', :permissions => ['bla']) + member_role = Role.create(:name => 'some member role', :permissions => ['bli']) + admin_role = Role.create(:name => 'some admin role', :permissions => ['bla']) r.affiliate(a, [member_role, admin_role]) assert a.has_permission?('bli', r) assert a.has_permission?('bla', r) end + def test_do_not_list_removed_nil_members + r = AccessControlTestResource.create(:name => 'bla') + a = AccessControlTestAccessor.create(:name => 'ze') + member_role = Role.create(:name => 'some tested member role', :permissions => ['bli']) + r.affiliate(a, member_role) + assert r.members.include?( a ), "expected #{r.inspect} to include #{a.inspect}" + a.destroy + r.reload + assert !r.members.include?( a ), "expected #{r.inspect} to not include #{a.inspect}" + assert !r.members.include?( nil ), "expected #{r.inspect} to not include nil" + end + end -- libgit2 0.21.2