Commit df8d2e9cee8f33997fe129fcc11991805c2dce2e

Authored by MoisesMachado
1 parent 168a8df7

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