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 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
1 1 class ActiveRecord::Base
2 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 5 def has_permission?(permission, resource = nil)
6 6 return true if resource == self
... ...
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
... ...