Commit b9c94cee722f6d974ec80013c1e8e653f15d8619

Authored by Joenio Costa
Committed by Antonio Terceiro
1 parent 1acb5dd8

Fix crash when listing admins of environment

 - Fixing tests for access_control plugin
 - Remove associated role_asignments when destroy a role
 - Clean role_assignments without a role

(ActionItem1287)

Signed-off-by: Antonio Terceiro <terceiro@colivre.coop.br>
db/migrate/076_change_role_assignments.rb 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +class ChangeRoleAssignments < ActiveRecord::Migration
  2 + def self.up
  3 + execute 'DELETE FROM role_assignments WHERE role_id NOT IN (SELECT id FROM roles)'
  4 +
  5 + change_column :role_assignments, :accessor_id, :integer, :null => false
  6 + change_column :role_assignments, :role_id, :integer, :null => false
  7 + end
  8 +
  9 + def self.down
  10 + change_column :role_assignments, :accessor_id, :integer, :null => true
  11 + change_column :role_assignments, :role_id, :integer, :null => true
  12 + end
  13 +end
... ...
db/schema.rb
... ... @@ -9,7 +9,7 @@
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11  
12   -ActiveRecord::Schema.define(:version => 75) do
  12 +ActiveRecord::Schema.define(:version => 76) do
13 13  
14 14 create_table "article_versions", :force => true do |t|
15 15 t.integer "article_id"
... ... @@ -282,11 +282,11 @@ ActiveRecord::Schema.define(:version =&gt; 75) do
282 282 end
283 283  
284 284 create_table "role_assignments", :force => true do |t|
285   - t.integer "accessor_id"
  285 + t.integer "accessor_id", :null => false
286 286 t.string "accessor_type"
287 287 t.integer "resource_id"
288 288 t.string "resource_type"
289   - t.integer "role_id"
  289 + t.integer "role_id", :null => false
290 290 t.boolean "is_global"
291 291 end
292 292  
... ...
vendor/plugins/access_control/lib/role.rb
1 1 class Role < ActiveRecord::Base
2 2  
3   - has_many :role_assignments
  3 + has_many :role_assignments, :dependent => :destroy
4 4 belongs_to :environment
5 5 serialize :permissions, Array
6 6 validates_presence_of :name
... ...
vendor/plugins/access_control/test/acts_as_accessor_test.rb
... ... @@ -14,8 +14,8 @@ class ActAsAccessorTest &lt; Test::Unit::TestCase
14 14 r = AccessControlTestResource.create!(:name => 'bla')
15 15 a = AccessControlTestAccessor.create!(:name => 'ze')
16 16 member_role = Role.create!(:name => 'just_a_moderator', :permissions => ['bli'])
17   - assert a.add_role(member_role, 'global')
18   - assert a.has_permission?('bli', 'global')
  17 + assert a.add_role(member_role, r)
  18 + assert a.has_permission?('bli', r)
19 19 end
20 20  
21 21 def test_add_role
... ...
vendor/plugins/access_control/test/permission_check_test.rb
... ... @@ -15,17 +15,6 @@ class PermissionCheckTest &lt; Test::Unit::TestCase
15 15 assert_template 'access_denied.rhtml'
16 16 end
17 17  
18   - def test_global_permission_granted
19   - user = AccessControlTestAccessor.create!(:name => 'user')
20   - role = Role.create!(:name => 'some_role', :permissions => ['see_index'])
21   - assert user.add_role(role, 'global')
22   - assert user.has_permission?('see_index', 'global')
23   -
24   - get :index, :user => user.id
25   - assert_response :success
26   - assert_template nil
27   - end
28   -
29 18 def test_specific_permission_granted
30 19 user = AccessControlTestAccessor.create!(:name => 'other_user')
31 20 role = Role.create!(:name => 'other_role', :permissions => ['do_some_stuff'])
... ...
vendor/plugins/access_control/test/role_test.rb
... ... @@ -98,4 +98,13 @@ class RoleTest &lt; Test::Unit::TestCase
98 98 assert ! role.has_kind?('kind3')
99 99 end
100 100  
  101 + def test_should_destroy_associated_role_assignments
  102 + role = Role.create!(:name => 'a test role', :permissions => ['perm1'])
  103 + ra = RoleAssignment.create!(:role => role, :accessor => AccessControlTestAccessor.create(:name => 'accessor'))
  104 +
  105 + role.destroy
  106 +
  107 + assert !RoleAssignment.exists?(ra.id)
  108 + end
  109 +
101 110 end
... ...
vendor/plugins/access_control/test/test_helper.rb
... ... @@ -18,7 +18,7 @@ RoleAssignment.set_table_name &#39;access_control_test_role_assignments&#39;
18 18 class AccessControlTestAccessor < ActiveRecord::Base
19 19 set_table_name 'access_control_test_accessors'
20 20 acts_as_accessor
21   - def cache_keys
  21 + def cache_keys(arg)
22 22 []
23 23 end
24 24 def blocks_to_expire_cache
... ...