]> source.dussan.org Git - redmine.git/commitdiff
Error when adding user to group where he is already assigned (#18665).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 21 Dec 2014 20:15:24 +0000 (20:15 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 21 Dec 2014 20:15:24 +0000 (20:15 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@13785 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/application_controller.rb
app/controllers/groups_controller.rb
test/integration/api_test/groups_test.rb

index fbdb1d301408a74d6705173cd66a4b170e6391c3..4b4e04cd07b7868f80c380d774e0c55232ad6cdd 100644 (file)
@@ -637,12 +637,14 @@ class ApplicationController < ActionController::Base
   end
 
   # Renders API response on validation failure
+  # for an object or an array of objects
   def render_validation_errors(objects)
-    if objects.is_a?(Array)
-      @error_messages = objects.map {|object| object.errors.full_messages}.flatten
-    else
-      @error_messages = objects.errors.full_messages
-    end
+    messages = Array.wrap(objects).map {|object| object.errors.full_messages}.flatten
+    render_api_errors(messages)
+  end
+
+  def render_api_errors(*messages)
+    @error_messages = messages.flatten
     render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => nil
   end
 
index 4a12b9b5b081fe37973de776df36982f6de826f9..5d82782ec111693c0275a46109a7cefe7c1cb8a7 100644 (file)
@@ -99,12 +99,18 @@ class GroupsController < ApplicationController
   end
 
   def add_users
-    @users = User.where(:id => (params[:user_id] || params[:user_ids])).to_a
-    @group.users << @users if request.post?
+    @users = User.not_in_group(@group).where(:id => (params[:user_id] || params[:user_ids])).to_a
+    @group.users << @users
     respond_to do |format|
       format.html { redirect_to edit_group_path(@group, :tab => 'users') }
       format.js
-      format.api { render_api_ok }
+      format.api {
+        if @users.any?
+          render_api_ok
+        else
+          render_api_errors "#{l(:label_user)} #{l('activerecord.errors.messages.invalid')}"
+        end
+      }
     end
   end
 
index 2fe8271b139748feaa0fe42479104f91929fb85f..087041219ca025f48c9930ff029c8282baf24e39 100644 (file)
@@ -185,6 +185,19 @@ class Redmine::ApiTest::GroupsTest < Redmine::ApiTest::Base
     assert_include User.find(5), Group.find(10).users
   end
 
+  test "POST /groups/:id/users.xml should not add the user if already added" do
+    Group.find(10).users << User.find(5)
+
+    assert_no_difference 'Group.find(10).users.count' do
+      post '/groups/10/users.xml', {:user_id => 5}, credentials('admin')
+      assert_response :unprocessable_entity
+    end
+
+    assert_select 'errors' do
+      assert_select 'error', :text => /User is invalid/
+    end
+  end
+
   test "DELETE /groups/:id/users/:user_id.xml should remove user from the group" do
     assert_difference 'Group.find(10).users.count', -1 do
       delete '/groups/10/users/8.xml', {}, credentials('admin')