mirror of
https://github.com/redmine/redmine.git
synced 2025-11-09 14:56:01 +01:00
Merged r16116 (#22034).
git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@16128 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -26,7 +26,7 @@ class MembersController < ApplicationController
|
|||||||
require_sudo_mode :create, :update, :destroy
|
require_sudo_mode :create, :update, :destroy
|
||||||
|
|
||||||
def index
|
def index
|
||||||
scope = @project.memberships.active
|
scope = @project.memberships
|
||||||
@offset, @limit = api_offset_and_limit
|
@offset, @limit = api_offset_and_limit
|
||||||
@member_count = scope.count
|
@member_count = scope.count
|
||||||
@member_pages = Paginator.new @member_count, @limit, params['page']
|
@member_pages = Paginator.new @member_count, @limit, params['page']
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<% roles = Role.find_all_givable
|
<% roles = Role.find_all_givable
|
||||||
members = @project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort %>
|
members = @project.memberships.includes(:member_roles, :roles, :principal).to_a.sort %>
|
||||||
|
|
||||||
<p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
|
<p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,16 @@ class MembersControllerTest < ActionController::TestCase
|
|||||||
assert_redirected_to '/projects/ecookbook/settings/members'
|
assert_redirected_to '/projects/ecookbook/settings/members'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_update_locked_member_should_be_allowed
|
||||||
|
User.find(3).lock!
|
||||||
|
|
||||||
|
put :update, :id => 2, :membership => {:role_ids => [1]}
|
||||||
|
assert_response 302
|
||||||
|
member = Member.find(2)
|
||||||
|
assert member.user.locked?
|
||||||
|
assert_equal [1], member.role_ids
|
||||||
|
end
|
||||||
|
|
||||||
def test_update_should_not_add_unmanaged_roles
|
def test_update_should_not_add_unmanaged_roles
|
||||||
role = Role.find(1)
|
role = Role.find(1)
|
||||||
role.update! :all_roles_managed => false
|
role.update! :all_roles_managed => false
|
||||||
@@ -160,6 +170,14 @@ class MembersControllerTest < ActionController::TestCase
|
|||||||
assert !User.find(3).member_of?(Project.find(1))
|
assert !User.find(3).member_of?(Project.find(1))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_destroy_locked_member_should_be_allowed
|
||||||
|
assert User.find(3).lock!
|
||||||
|
|
||||||
|
assert_difference 'Member.count', -1 do
|
||||||
|
delete :destroy, :id => 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_destroy_should_fail_with_unmanaged_roles
|
def test_destroy_should_fail_with_unmanaged_roles
|
||||||
role = Role.find(1)
|
role = Role.find(1)
|
||||||
role.update! :all_roles_managed => false
|
role.update! :all_roles_managed => false
|
||||||
|
|||||||
@@ -461,6 +461,18 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_settings_should_show_locked_members
|
||||||
|
user = User.generate!
|
||||||
|
member = User.add_to_project(user, Project.find(1))
|
||||||
|
user.lock!
|
||||||
|
assert user.reload.locked?
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
|
||||||
|
get :settings, :id => 'ecookbook', :tab => 'members'
|
||||||
|
assert_response :success
|
||||||
|
assert_select "tr#member-#{member.id}"
|
||||||
|
end
|
||||||
|
|
||||||
def test_update
|
def test_update
|
||||||
@request.session[:user_id] = 2 # manager
|
@request.session[:user_id] = 2 # manager
|
||||||
post :update, :id => 1, :project => {:name => 'Test changed name',
|
post :update, :id => 1, :project => {:name => 'Test changed name',
|
||||||
|
|||||||
@@ -37,20 +37,17 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
|
|||||||
assert_response :success
|
assert_response :success
|
||||||
assert_equal 'application/json', @response.content_type
|
assert_equal 'application/json', @response.content_type
|
||||||
json = ActiveSupport::JSON.decode(response.body)
|
json = ActiveSupport::JSON.decode(response.body)
|
||||||
assert_equal({
|
assert_equal 3, json["total_count"]
|
||||||
"memberships" =>
|
assert_equal 25, json["limit"]
|
||||||
[{"id"=>1,
|
assert_equal 0, json["offset"]
|
||||||
"project" => {"name"=>"eCookbook", "id"=>1},
|
assert_include({
|
||||||
"roles" => [{"name"=>"Manager", "id"=>1}],
|
"id"=>1,
|
||||||
"user" => {"name"=>"John Smith", "id"=>2}},
|
"project" => {"name"=>"eCookbook", "id"=>1},
|
||||||
{"id"=>2,
|
"roles" => [{"name"=>"Manager", "id"=>1}],
|
||||||
"project" => {"name"=>"eCookbook", "id"=>1},
|
"user" => {"name"=>"John Smith", "id"=>2}
|
||||||
"roles" => [{"name"=>"Developer", "id"=>2}],
|
},
|
||||||
"user" => {"name"=>"Dave Lopper", "id"=>3}}],
|
json["memberships"]
|
||||||
"limit" => 25,
|
)
|
||||||
"total_count" => 2,
|
|
||||||
"offset" => 0},
|
|
||||||
json)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "GET /projects/:project_id/memberships.xml should succeed for closed project" do
|
test "GET /projects/:project_id/memberships.xml should succeed for closed project" do
|
||||||
@@ -61,6 +58,15 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
|
|||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "GET /projects/:project_id/memberships.xml should include locked users" do
|
||||||
|
assert User.find(3).lock!
|
||||||
|
get '/projects/ecookbook/memberships.xml', {}, credentials('jsmith')
|
||||||
|
assert_response :success
|
||||||
|
assert_select 'memberships[type=array] membership id', :text => '2' do
|
||||||
|
assert_select '~ user[id="3"][name="Dave Lopper"]'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
test "POST /projects/:project_id/memberships.xml should create the membership" do
|
test "POST /projects/:project_id/memberships.xml should create the membership" do
|
||||||
assert_difference 'Member.count' do
|
assert_difference 'Member.count' do
|
||||||
post '/projects/1/memberships.xml', {:membership => {:user_id => 7, :role_ids => [2,3]}}, credentials('jsmith')
|
post '/projects/1/memberships.xml', {:membership => {:user_id => 7, :role_ids => [2,3]}}, credentials('jsmith')
|
||||||
|
|||||||
Reference in New Issue
Block a user