##// END OF EJS Templates
Merged r16116 (#22034)....
Jean-Philippe Lang -
r15746:7ec2c2738593
parent child
Show More
@@ -26,7 +26,7 class MembersController < ApplicationController
26 require_sudo_mode :create, :update, :destroy
26 require_sudo_mode :create, :update, :destroy
27
27
28 def index
28 def index
29 scope = @project.memberships.active
29 scope = @project.memberships
30 @offset, @limit = api_offset_and_limit
30 @offset, @limit = api_offset_and_limit
31 @member_count = scope.count
31 @member_count = scope.count
32 @member_pages = Paginator.new @member_count, @limit, params['page']
32 @member_pages = Paginator.new @member_count, @limit, params['page']
@@ -1,5 +1,5
1 <% roles = Role.find_all_givable
1 <% roles = Role.find_all_givable
2 members = @project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort %>
2 members = @project.memberships.includes(:member_roles, :roles, :principal).to_a.sort %>
3
3
4 <p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
4 <p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
5
5
@@ -119,6 +119,16 class MembersControllerTest < ActionController::TestCase
119 assert_redirected_to '/projects/ecookbook/settings/members'
119 assert_redirected_to '/projects/ecookbook/settings/members'
120 end
120 end
121
121
122 def test_update_locked_member_should_be_allowed
123 User.find(3).lock!
124
125 put :update, :id => 2, :membership => {:role_ids => [1]}
126 assert_response 302
127 member = Member.find(2)
128 assert member.user.locked?
129 assert_equal [1], member.role_ids
130 end
131
122 def test_update_should_not_add_unmanaged_roles
132 def test_update_should_not_add_unmanaged_roles
123 role = Role.find(1)
133 role = Role.find(1)
124 role.update! :all_roles_managed => false
134 role.update! :all_roles_managed => false
@@ -160,6 +170,14 class MembersControllerTest < ActionController::TestCase
160 assert !User.find(3).member_of?(Project.find(1))
170 assert !User.find(3).member_of?(Project.find(1))
161 end
171 end
162
172
173 def test_destroy_locked_member_should_be_allowed
174 assert User.find(3).lock!
175
176 assert_difference 'Member.count', -1 do
177 delete :destroy, :id => 2
178 end
179 end
180
163 def test_destroy_should_fail_with_unmanaged_roles
181 def test_destroy_should_fail_with_unmanaged_roles
164 role = Role.find(1)
182 role = Role.find(1)
165 role.update! :all_roles_managed => false
183 role.update! :all_roles_managed => false
@@ -461,6 +461,18 class ProjectsControllerTest < ActionController::TestCase
461 end
461 end
462 end
462 end
463
463
464 def test_settings_should_show_locked_members
465 user = User.generate!
466 member = User.add_to_project(user, Project.find(1))
467 user.lock!
468 assert user.reload.locked?
469 @request.session[:user_id] = 2
470
471 get :settings, :id => 'ecookbook', :tab => 'members'
472 assert_response :success
473 assert_select "tr#member-#{member.id}"
474 end
475
464 def test_update
476 def test_update
465 @request.session[:user_id] = 2 # manager
477 @request.session[:user_id] = 2 # manager
466 post :update, :id => 1, :project => {:name => 'Test changed name',
478 post :update, :id => 1, :project => {:name => 'Test changed name',
@@ -37,20 +37,17 class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
37 assert_response :success
37 assert_response :success
38 assert_equal 'application/json', @response.content_type
38 assert_equal 'application/json', @response.content_type
39 json = ActiveSupport::JSON.decode(response.body)
39 json = ActiveSupport::JSON.decode(response.body)
40 assert_equal({
40 assert_equal 3, json["total_count"]
41 "memberships" =>
41 assert_equal 25, json["limit"]
42 [{"id"=>1,
42 assert_equal 0, json["offset"]
43 "project" => {"name"=>"eCookbook", "id"=>1},
43 assert_include({
44 "roles" => [{"name"=>"Manager", "id"=>1}],
44 "id"=>1,
45 "user" => {"name"=>"John Smith", "id"=>2}},
45 "project" => {"name"=>"eCookbook", "id"=>1},
46 {"id"=>2,
46 "roles" => [{"name"=>"Manager", "id"=>1}],
47 "project" => {"name"=>"eCookbook", "id"=>1},
47 "user" => {"name"=>"John Smith", "id"=>2}
48 "roles" => [{"name"=>"Developer", "id"=>2}],
48 },
49 "user" => {"name"=>"Dave Lopper", "id"=>3}}],
49 json["memberships"]
50 "limit" => 25,
50 )
51 "total_count" => 2,
52 "offset" => 0},
53 json)
54 end
51 end
55
52
56 test "GET /projects/:project_id/memberships.xml should succeed for closed project" do
53 test "GET /projects/:project_id/memberships.xml should succeed for closed project" do
@@ -61,6 +58,15 class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
61 assert_response :success
58 assert_response :success
62 end
59 end
63
60
61 test "GET /projects/:project_id/memberships.xml should include locked users" do
62 assert User.find(3).lock!
63 get '/projects/ecookbook/memberships.xml', {}, credentials('jsmith')
64 assert_response :success
65 assert_select 'memberships[type=array] membership id', :text => '2' do
66 assert_select '~ user[id="3"][name="Dave Lopper"]'
67 end
68 end
69
64 test "POST /projects/:project_id/memberships.xml should create the membership" do
70 test "POST /projects/:project_id/memberships.xml should create the membership" do
65 assert_difference 'Member.count' do
71 assert_difference 'Member.count' do
66 post '/projects/1/memberships.xml', {:membership => {:user_id => 7, :role_ids => [2,3]}}, credentials('jsmith')
72 post '/projects/1/memberships.xml', {:membership => {:user_id => 7, :role_ids => [2,3]}}, credentials('jsmith')
General Comments 0
You need to be logged in to leave comments. Login now