mirror of
https://github.com/redmine/redmine.git
synced 2026-07-20 08:21:14 +02:00
User groups feature initial commit.
git-svn-id: http://redmine.rubyforge.org/svn/branches/work@1373 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
7
groups/test/fixtures/groups.yml
vendored
Normal file
7
groups/test/fixtures/groups.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
managers:
|
||||
id: 1
|
||||
name: Managers
|
||||
clients:
|
||||
id: 2
|
||||
name: Clients
|
||||
|
||||
27
groups/test/fixtures/members.yml
vendored
27
groups/test/fixtures/members.yml
vendored
@@ -4,24 +4,43 @@ members_001:
|
||||
project_id: 1
|
||||
role_id: 1
|
||||
id: 1
|
||||
user_id: 2
|
||||
principal_type: User
|
||||
principal_id: 2
|
||||
members_002:
|
||||
created_on: 2006-07-19 19:35:36 +02:00
|
||||
project_id: 1
|
||||
role_id: 2
|
||||
id: 2
|
||||
user_id: 3
|
||||
principal_type: User
|
||||
principal_id: 3
|
||||
members_003:
|
||||
created_on: 2006-07-19 19:35:36 +02:00
|
||||
project_id: 2
|
||||
role_id: 2
|
||||
id: 3
|
||||
user_id: 2
|
||||
principal_type: User
|
||||
principal_id: 2
|
||||
members_004:
|
||||
id: 4
|
||||
created_on: 2006-07-19 19:35:36 +02:00
|
||||
project_id: 1
|
||||
role_id: 2
|
||||
# Locked user
|
||||
user_id: 5
|
||||
principal_type: User
|
||||
principal_id: 5
|
||||
members_005:
|
||||
id: 5
|
||||
created_on: 2008-01-19 19:35:36 +02:00
|
||||
project_id: 1
|
||||
role_id: 3
|
||||
principal_type: Group
|
||||
principal_id: 2 # Clients
|
||||
members_006:
|
||||
id: 6
|
||||
created_on: 2008-01-19 19:35:36 +02:00
|
||||
project_id: 1
|
||||
role_id: 3
|
||||
principal_type: User
|
||||
principal_id: 7
|
||||
inherited_from: 5
|
||||
|
||||
10
groups/test/fixtures/roles.yml
vendored
10
groups/test/fixtures/roles.yml
vendored
@@ -1,5 +1,5 @@
|
||||
---
|
||||
roles_001:
|
||||
manager:
|
||||
name: Manager
|
||||
id: 1
|
||||
builtin: 0
|
||||
@@ -41,7 +41,7 @@ roles_001:
|
||||
- :view_changesets
|
||||
|
||||
position: 1
|
||||
roles_002:
|
||||
developer:
|
||||
name: Developer
|
||||
id: 2
|
||||
builtin: 0
|
||||
@@ -78,7 +78,7 @@ roles_002:
|
||||
- :view_changesets
|
||||
|
||||
position: 2
|
||||
roles_003:
|
||||
reporter:
|
||||
name: Reporter
|
||||
id: 3
|
||||
builtin: 0
|
||||
@@ -113,7 +113,7 @@ roles_003:
|
||||
- :view_changesets
|
||||
|
||||
position: 3
|
||||
roles_004:
|
||||
non_member:
|
||||
name: Non member
|
||||
id: 4
|
||||
builtin: 1
|
||||
@@ -141,7 +141,7 @@ roles_004:
|
||||
- :view_changesets
|
||||
|
||||
position: 4
|
||||
roles_005:
|
||||
anonymous:
|
||||
name: Anonymous
|
||||
id: 5
|
||||
builtin: 2
|
||||
|
||||
33
groups/test/fixtures/users.yml
vendored
33
groups/test/fixtures/users.yml
vendored
@@ -96,5 +96,38 @@ users_006:
|
||||
mail_notification: false
|
||||
login: ''
|
||||
type: AnonymousUser
|
||||
client:
|
||||
id: 7
|
||||
created_on: 2006-07-19 19:33:19 +02:00
|
||||
status: 1
|
||||
last_login_on:
|
||||
language: ''
|
||||
hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
|
||||
updated_on: 2006-07-19 19:33:19 +02:00
|
||||
admin: false
|
||||
mail: 'client@foo.bar'
|
||||
lastname: User
|
||||
firstname: Client
|
||||
auth_source_id:
|
||||
mail_notification: false
|
||||
login: client
|
||||
type: User
|
||||
group_id: 2 # Clients
|
||||
new_client:
|
||||
id: 8
|
||||
created_on: 2006-07-19 19:33:19 +02:00
|
||||
status: 1
|
||||
last_login_on:
|
||||
language: ''
|
||||
hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
|
||||
updated_on: 2006-07-19 19:33:19 +02:00
|
||||
admin: false
|
||||
mail: 'newclient@foo.bar'
|
||||
lastname: New
|
||||
firstname: Client
|
||||
auth_source_id:
|
||||
mail_notification: false
|
||||
login: newclient
|
||||
type: User
|
||||
|
||||
|
||||
76
groups/test/functional/groups_controller_test.rb
Normal file
76
groups/test/functional/groups_controller_test.rb
Normal file
@@ -0,0 +1,76 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2008 FreeCode
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
require 'groups_controller'
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class GroupsController; def rescue_action(e) raise e end; end
|
||||
|
||||
class GroupsControllerTest < Test::Unit::TestCase
|
||||
fixtures :groups, :users
|
||||
|
||||
def setup
|
||||
@controller = GroupsController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
User.current = nil
|
||||
@request.session[:user_id] = 1 # admin
|
||||
end
|
||||
|
||||
def test_should_get_index
|
||||
get :index
|
||||
assert_response :success
|
||||
assert_not_nil assigns(:groups)
|
||||
end
|
||||
|
||||
def test_should_get_new
|
||||
get :new
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_should_create_group
|
||||
assert_difference('Group.count') do
|
||||
post :create, :group => { :name => 'New group' }
|
||||
end
|
||||
assert_redirected_to groups_path
|
||||
assert_not_nil Group.find_by_name('New group')
|
||||
end
|
||||
|
||||
def test_should_show_group
|
||||
get :show, :id => 1
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_should_get_edit
|
||||
get :edit, :id => 1
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_should_update_group
|
||||
put :update, :id => 1, :group => { :name => 'Renamed' }
|
||||
assert_redirected_to groups_path
|
||||
assert_equal 'Renamed', Group.find(1).name
|
||||
end
|
||||
|
||||
def test_should_destroy_group
|
||||
assert_difference('Group.count', -1) do
|
||||
delete :destroy, :id => 1
|
||||
end
|
||||
assert_redirected_to groups_path
|
||||
end
|
||||
end
|
||||
80
groups/test/functional/members_controller_test.rb
Normal file
80
groups/test/functional/members_controller_test.rb
Normal file
@@ -0,0 +1,80 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2008 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
require 'members_controller'
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class MembersController; def rescue_action(e) raise e end; end
|
||||
|
||||
class MembersControllerTest < Test::Unit::TestCase
|
||||
fixtures :projects, :roles, :users, :groups, :members
|
||||
|
||||
def setup
|
||||
@controller = MembersController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
User.current = nil
|
||||
@request.session[:user_id] = 1 # admin
|
||||
end
|
||||
|
||||
def test_should_create_user_member
|
||||
p = Project.find(1)
|
||||
u = users(:new_client)
|
||||
assert_difference('Member.count') do
|
||||
post :new, :id => p.id, :member => { :role_id => roles(:reporter).id }, :principal => "user_#{u.id}"
|
||||
end
|
||||
assert_redirected_to :controller => 'projects', :action => 'settings', :id => p, :tab => 'members'
|
||||
assert u.reload.member_of?(p)
|
||||
assert_equal roles(:reporter), u.role_for_project(p)
|
||||
end
|
||||
|
||||
def test_should_create_group_member
|
||||
p = Project.find(2)
|
||||
assert_difference('Member.count') do
|
||||
post :new, :id => p.id, :member => { :role_id => roles(:reporter) }, :principal => 'group_1'
|
||||
end
|
||||
assert_redirected_to :controller => 'projects', :action => 'settings', :id => p, :tab => 'members'
|
||||
end
|
||||
|
||||
def test_should_update_user_member
|
||||
u = User.find(3)
|
||||
p = Project.find(1)
|
||||
assert_equal roles(:developer), u.role_for_project(p)
|
||||
assert_difference('Member.count', 0) do
|
||||
post :edit, :id => 2, :member => { :role_id => roles(:manager).id }
|
||||
end
|
||||
assert_redirected_to :controller => 'projects', :action => 'settings', :id => p, :tab => 'members'
|
||||
assert_equal roles(:manager), u.reload.role_for_project(p)
|
||||
end
|
||||
|
||||
def test_should_destroy
|
||||
p = Project.find(1)
|
||||
assert_difference('Member.count', -1) do
|
||||
post :destroy, :id => 2
|
||||
end
|
||||
assert_redirected_to :controller => 'projects', :action => 'settings', :id => p, :tab => 'members'
|
||||
end
|
||||
|
||||
def test_should_not_destroy_inherited_membership
|
||||
p = Project.find(1)
|
||||
assert_difference('Member.count', 0) do
|
||||
post :destroy, :id => 6
|
||||
end
|
||||
assert_response 404
|
||||
end
|
||||
end
|
||||
@@ -47,6 +47,14 @@ class UsersControllerTest < Test::Unit::TestCase
|
||||
assert_nil assigns(:users).detect {|u| !u.active?}
|
||||
end
|
||||
|
||||
def test_should_add_membership
|
||||
assert_difference('User.find(2).memberships.count') do
|
||||
post :edit_membership, :id => 2, :membership => { :role_id => 1, :project_id => 3 }
|
||||
assert_redirected_to 'users/edit/2'
|
||||
assert User.find(2).member_of?(Project.find(3))
|
||||
end
|
||||
end
|
||||
|
||||
def test_edit_membership
|
||||
post :edit_membership, :id => 2, :membership_id => 1,
|
||||
:membership => { :role_id => 2}
|
||||
|
||||
129
groups/test/unit/group_test.rb
Normal file
129
groups/test/unit/group_test.rb
Normal file
@@ -0,0 +1,129 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2008 FreeCode
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
|
||||
class GroupTest < ActiveSupport::TestCase
|
||||
fixtures :groups, :users, :projects, :roles, :members
|
||||
|
||||
def test_should_validate_presence_of_name
|
||||
g = Group.new(:name => '')
|
||||
assert !g.save
|
||||
assert_equal 1, g.errors.size
|
||||
end
|
||||
|
||||
def test_should_validate_uniqueness_of_name
|
||||
g = Group.new(:name => groups(:clients).name)
|
||||
assert !g.save
|
||||
assert_equal 1, g.errors.size
|
||||
end
|
||||
|
||||
def test_should_create
|
||||
g = Group.new(:name => 'New group')
|
||||
assert g.save
|
||||
assert g.users.empty?
|
||||
end
|
||||
|
||||
def test_should_destroy
|
||||
g = groups(:clients)
|
||||
p = Project.find(1)
|
||||
u = users(:client)
|
||||
assert u.member_of?(p)
|
||||
|
||||
assert_difference('Member.count', -2) do
|
||||
g.destroy
|
||||
end
|
||||
u.reload
|
||||
assert_nil u.group
|
||||
assert !u.member_of?(p)
|
||||
end
|
||||
|
||||
def test_should_add_user_to_group
|
||||
g = groups(:clients)
|
||||
p = Project.find(1)
|
||||
u = users(:new_client)
|
||||
r = roles(:reporter)
|
||||
assert !u.member_of?(p)
|
||||
|
||||
assert_difference('Member.count') do
|
||||
assert_difference('g.reload.users.size') do
|
||||
u.group_id = g.id
|
||||
assert u.save
|
||||
end
|
||||
end
|
||||
u.reload
|
||||
assert u.group = g
|
||||
assert u.member_of?(p)
|
||||
assert_equal r, u.role_for_project(p)
|
||||
end
|
||||
|
||||
def test_should_add_group_to_project
|
||||
g = groups(:clients)
|
||||
p = Project.find(2)
|
||||
u = users(:client)
|
||||
r = roles(:reporter)
|
||||
assert !u.member_of?(p)
|
||||
|
||||
assert_difference('Member.count', 2) do
|
||||
assert_difference('p.reload.users.size') do
|
||||
m = Member.new(:project => p, :principal => g, :role => r)
|
||||
assert m.save
|
||||
end
|
||||
end
|
||||
u.reload
|
||||
assert u.member_of?(p)
|
||||
assert_equal r, u.role_for_project(p)
|
||||
end
|
||||
|
||||
def test_should_remove_user_from_group
|
||||
g = groups(:clients)
|
||||
p = Project.find(1)
|
||||
u = users(:client)
|
||||
assert u.member_of?(p)
|
||||
|
||||
assert_difference('Member.count', -1) do
|
||||
assert_difference('g.reload.users.size', -1) do
|
||||
u.group_id = nil
|
||||
assert u.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_override_group_role
|
||||
g = groups(:clients)
|
||||
p = Project.find(1)
|
||||
u = users(:client)
|
||||
assert u.member_of?(p)
|
||||
assert_equal roles(:reporter), u.role_for_project(p)
|
||||
|
||||
assert_difference('Member.count', 1) do
|
||||
assert_difference('p.reload.users.size', 0) do
|
||||
m = Member.new(:project => p, :principal => u, :role => roles(:manager))
|
||||
assert m.save
|
||||
end
|
||||
end
|
||||
assert_equal roles(:manager), u.reload.role_for_project(p)
|
||||
|
||||
# Remove the group, user should still be a member
|
||||
assert_difference('Member.count', -2) do
|
||||
assert_difference('p.reload.users.size', 0) do
|
||||
assert g.destroy
|
||||
end
|
||||
end
|
||||
assert_equal roles(:manager), u.reload.role_for_project(p)
|
||||
end
|
||||
end
|
||||
@@ -25,7 +25,7 @@ class MemberTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_create
|
||||
member = Member.new(:project_id => 1, :user_id => 4, :role_id => 1)
|
||||
member = Member.new(:project_id => 1, :principal_type => 'User', :principal_id => 4, :role_id => 1)
|
||||
assert member.save
|
||||
end
|
||||
|
||||
@@ -39,7 +39,7 @@ class MemberTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_validate
|
||||
member = Member.new(:project_id => 1, :user_id => 2, :role_id =>2)
|
||||
member = Member.new(:project_id => 1, :principal_type => 'User', :principal_id => 2, :role_id =>2)
|
||||
# same use can't have more than one role for a project
|
||||
assert !member.save
|
||||
end
|
||||
|
||||
@@ -80,10 +80,10 @@ class ProjectTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_destroy
|
||||
# 2 active members
|
||||
assert_equal 2, @ecookbook.members.size
|
||||
# 3 active members
|
||||
assert_equal 3, @ecookbook.members.size
|
||||
# and 1 is locked
|
||||
assert_equal 3, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size
|
||||
assert_equal 5, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size
|
||||
# some boards
|
||||
assert @ecookbook.boards.any?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user