Merge branch 'backport_fix_slash_commands_for_multiple_assignee' into 'master'
Backport from EE: Fix '/unassign' slash command See merge request !11926
This commit is contained in:
commit
4cb619fd73
|
@ -92,26 +92,20 @@ module SlashCommands
|
||||||
|
|
||||||
desc 'Assign'
|
desc 'Assign'
|
||||||
explanation do |users|
|
explanation do |users|
|
||||||
"Assigns #{users.map(&:to_reference).to_sentence}." if users.any?
|
"Assigns #{users.first.to_reference}." if users.any?
|
||||||
end
|
end
|
||||||
params '@user'
|
params '@user'
|
||||||
condition do
|
condition do
|
||||||
current_user.can?(:"admin_#{issuable.to_ability_name}", project)
|
current_user.can?(:"admin_#{issuable.to_ability_name}", project)
|
||||||
end
|
end
|
||||||
parse_params do |assignee_param|
|
parse_params do |assignee_param|
|
||||||
users = extract_references(assignee_param, :user)
|
extract_users(assignee_param)
|
||||||
|
|
||||||
if users.empty?
|
|
||||||
users = User.where(username: assignee_param.split(' ').map(&:strip))
|
|
||||||
end
|
|
||||||
|
|
||||||
users
|
|
||||||
end
|
end
|
||||||
command :assign do |users|
|
command :assign do |users|
|
||||||
next if users.empty?
|
next if users.empty?
|
||||||
|
|
||||||
if issuable.is_a?(Issue)
|
if issuable.is_a?(Issue)
|
||||||
@updates[:assignee_ids] = users.map(&:id)
|
@updates[:assignee_ids] = [users.last.id]
|
||||||
else
|
else
|
||||||
@updates[:assignee_id] = users.last.id
|
@updates[:assignee_id] = users.last.id
|
||||||
end
|
end
|
||||||
|
@ -459,6 +453,18 @@ module SlashCommands
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def extract_users(params)
|
||||||
|
return [] if params.nil?
|
||||||
|
|
||||||
|
users = extract_references(params, :user)
|
||||||
|
|
||||||
|
if users.empty?
|
||||||
|
users = User.where(username: params.split(' ').map(&:strip))
|
||||||
|
end
|
||||||
|
|
||||||
|
users
|
||||||
|
end
|
||||||
|
|
||||||
def find_labels(labels_param)
|
def find_labels(labels_param)
|
||||||
extract_references(labels_param, :label) |
|
extract_references(labels_param, :label) |
|
||||||
LabelsFinder.new(current_user, project_id: project.id, name: labels_param.split).execute
|
LabelsFinder.new(current_user, project_id: project.id, name: labels_param.split).execute
|
||||||
|
|
|
@ -48,17 +48,23 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_h(opts)
|
def to_h(opts)
|
||||||
|
context = OpenStruct.new(opts)
|
||||||
|
|
||||||
desc = description
|
desc = description
|
||||||
if desc.respond_to?(:call)
|
if desc.respond_to?(:call)
|
||||||
context = OpenStruct.new(opts)
|
|
||||||
desc = context.instance_exec(&desc) rescue ''
|
desc = context.instance_exec(&desc) rescue ''
|
||||||
end
|
end
|
||||||
|
|
||||||
|
prms = params
|
||||||
|
if prms.respond_to?(:call)
|
||||||
|
prms = Array(context.instance_exec(&prms)) rescue params
|
||||||
|
end
|
||||||
|
|
||||||
{
|
{
|
||||||
name: name,
|
name: name,
|
||||||
aliases: aliases,
|
aliases: aliases,
|
||||||
description: desc,
|
description: desc,
|
||||||
params: params
|
params: prms
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -40,8 +40,8 @@ module Gitlab
|
||||||
# command :command_key do |arguments|
|
# command :command_key do |arguments|
|
||||||
# # Awesome code block
|
# # Awesome code block
|
||||||
# end
|
# end
|
||||||
def params(*params)
|
def params(*params, &block)
|
||||||
@params = params
|
@params = block_given? ? block : params
|
||||||
end
|
end
|
||||||
|
|
||||||
# Allows to give an explanation of what the command will do when
|
# Allows to give an explanation of what the command will do when
|
||||||
|
|
|
@ -72,7 +72,7 @@ describe Issuable::BulkUpdateService, services: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the new assignee ID is #{IssuableFinder::NONE}" do
|
context "when the new assignee ID is #{IssuableFinder::NONE}" do
|
||||||
it "unassigns the issues" do
|
it 'unassigns the issues' do
|
||||||
expect { bulk_update(merge_request, assignee_id: IssuableFinder::NONE) }
|
expect { bulk_update(merge_request, assignee_id: IssuableFinder::NONE) }
|
||||||
.to change { merge_request.reload.assignee }.to(nil)
|
.to change { merge_request.reload.assignee }.to(nil)
|
||||||
end
|
end
|
||||||
|
|
|
@ -384,7 +384,7 @@ describe SlashCommands::InterpretService, services: true do
|
||||||
it 'fetches assignee and populates assignee_id if content contains /assign' do
|
it 'fetches assignee and populates assignee_id if content contains /assign' do
|
||||||
_, updates = service.execute(content, issue)
|
_, updates = service.execute(content, issue)
|
||||||
|
|
||||||
expect(updates[:assignee_ids]).to match_array([developer.id, developer2.id])
|
expect(updates[:assignee_ids]).to match_array([developer.id])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue