]> source.dussan.org Git - redmine.git/commitdiff
Fixed that project settings should show locked members (#22034).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 31 Dec 2016 13:33:02 +0000 (13:33 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 31 Dec 2016 13:33:02 +0000 (13:33 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@16116 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/members_controller.rb
app/views/projects/settings/_members.html.erb
test/functional/members_controller_test.rb
test/functional/projects_controller_test.rb
test/integration/api_test/memberships_test.rb

index 4aedf8f2d95935b7b4259e27bc0c589465adc38b..ca3dcd474dede359547cd2767ba3ff46d0d114e3 100644 (file)
@@ -26,7 +26,7 @@ class MembersController < ApplicationController
   require_sudo_mode :create, :update, :destroy
 
   def index
-    scope = @project.memberships.active
+    scope = @project.memberships
     @offset, @limit = api_offset_and_limit
     @member_count = scope.count
     @member_pages = Paginator.new @member_count, @limit, params['page']
index 05707fe781ebb7875a69421abc4d6da942856dea..1dd665a34e2afe7e00abc662f85e38365c37a227 100644 (file)
@@ -1,5 +1,5 @@
 <% roles = Role.find_all_givable
-   members = @project.memberships.active.sorted.to_a %>
+   members = @project.memberships.sorted.to_a %>
 
 <p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
 
index c9337e210b234c83ed350a23b5d58b095a6aeae2..d132c8293cdc7b2f057b30fa9dfbe95b267a6690 100644 (file)
@@ -117,6 +117,16 @@ class MembersControllerTest < Redmine::ControllerTest
     assert_redirected_to '/projects/ecookbook/settings/members'
   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
     role = Role.find(1)
     role.update! :all_roles_managed => false
@@ -157,6 +167,14 @@ class MembersControllerTest < Redmine::ControllerTest
     assert !User.find(3).member_of?(Project.find(1))
   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
     role = Role.find(1)
     role.update! :all_roles_managed => false
index 01c68308fbab35e442040918cea06ef94eeaab0d..da2818174cd25bf08e0cf641e7eb43a15c8adf5e 100644 (file)
@@ -527,6 +527,18 @@ class ProjectsControllerTest < Redmine::ControllerTest
     assert_select 'a#tab-versions[href=?]', '/projects/ecookbook/settings/versions?version_name=.1&version_status='
   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
     @request.session[:user_id] = 2 # manager
     post :update, :id => 1, :project => {:name => 'Test changed name',
index 92d4b094cc11532b607e5edf5c4802dcd82672d6..dd259839d70ce3cde60ffbd5e7d435bf0a37d2b5 100644 (file)
@@ -37,20 +37,17 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base
     assert_response :success
     assert_equal 'application/json', @response.content_type
     json = ActiveSupport::JSON.decode(response.body)
-    assert_equal({
-      "memberships" =>
-        [{"id"=>1,
-          "project" => {"name"=>"eCookbook", "id"=>1},
-          "roles" => [{"name"=>"Manager", "id"=>1}],
-          "user" => {"name"=>"John Smith", "id"=>2}},
-         {"id"=>2,
-          "project" => {"name"=>"eCookbook", "id"=>1},
-          "roles" => [{"name"=>"Developer", "id"=>2}],
-          "user" => {"name"=>"Dave Lopper", "id"=>3}}],
-     "limit" => 25,
-     "total_count" => 2,
-     "offset" => 0},
-     json)
+    assert_equal 3,  json["total_count"]
+    assert_equal 25, json["limit"]
+    assert_equal 0,  json["offset"]
+    assert_include({
+        "id"=>1,
+        "project" => {"name"=>"eCookbook", "id"=>1},
+        "roles" => [{"name"=>"Manager", "id"=>1}],
+        "user" => {"name"=>"John Smith", "id"=>2}
+      },
+      json["memberships"]
+    )
   end
 
   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
   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
     assert_difference 'Member.count' do
       post '/projects/1/memberships.xml', {:membership => {:user_id => 7, :role_ids => [2,3]}}, credentials('jsmith')