From 2194856fcf45c9556067a7c2fb6db677f9388c61 Mon Sep 17 00:00:00 2001 From: Toon Claes Date: Tue, 20 Jun 2017 22:02:41 +0200 Subject: [PATCH] Ensure /reassign does not assign multiple users Set the assignee to last user in the array if multiple assignees aren't allowed. Also, use `parse_params` where possible. --- .../quick_actions/interpret_service.rb | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index df13976fb3b..e4dfe87e614 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -133,10 +133,11 @@ module QuickActions issuable.assignees.any? && current_user.can?(:"admin_#{issuable.to_ability_name}", project) end - command :unassign do |unassign_param = nil| + parse_params do |unassign_param| # When multiple users are assigned, all will be unassigned if multiple assignees are no longer allowed - users = extract_users(unassign_param) if issuable.allows_multiple_assignees? - + extract_users(unassign_param) if issuable.allows_multiple_assignees? + end + command :unassign do |users = nil| @updates[:assignee_ids] = if users&.any? issuable.assignees.pluck(:id) - users.map(&:id) @@ -159,8 +160,16 @@ module QuickActions issuable.persisted? && current_user.can?(:"admin_#{issuable.to_ability_name}", project) end - command :reassign do |unassign_param| - @updates[:assignee_ids] = extract_users(unassign_param).map(&:id) + parse_params do |assignee_param| + extract_users(assignee_param) + end + command :reassign do |users| + @updates[:assignee_ids] = + if issuable.allows_multiple_assignees? + users.map(&:id) + else + [users.last.id] + end end desc 'Set milestone'