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
end
def add_users
- @users = User.where(:id => (params[:user_id] || params[:user_ids])).all
- @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
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')