Add support for no-op slash commands that appear in autocomplete
The first one is /cc Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
e021604454
commit
23db644954
|
@ -117,7 +117,7 @@ module SlashCommands
|
|||
return unless noteable.respond_to?(:due_date)
|
||||
|
||||
due_date = begin
|
||||
if due_date_param.downcase == 'tomorrow'
|
||||
if due_date_param.casecmp('tomorrow').zero?
|
||||
Date.tomorrow
|
||||
else
|
||||
Time.now + ChronicDuration.parse(due_date_param)
|
||||
|
@ -136,6 +136,14 @@ module SlashCommands
|
|||
@updates[:due_date] = nil
|
||||
end
|
||||
|
||||
# This is a dummy command, so that it appears in the autocomplete commands
|
||||
desc 'CC'
|
||||
params '@user'
|
||||
noop true
|
||||
command :cc do
|
||||
return
|
||||
end
|
||||
|
||||
def find_label_ids(labels_param)
|
||||
extract_references(labels_param, :label).map(&:id)
|
||||
end
|
||||
|
|
|
@ -14,8 +14,10 @@ module Gitlab
|
|||
|
||||
def command_names
|
||||
command_definitions.flat_map do |command_definition|
|
||||
[command_definition[:name], command_definition[:aliases]].flatten
|
||||
end
|
||||
unless command_definition[:noop]
|
||||
[command_definition[:name], command_definition[:aliases]].flatten
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
|
||||
# Allows to give a description to the next slash command
|
||||
|
@ -28,6 +30,11 @@ module Gitlab
|
|||
@params = params
|
||||
end
|
||||
|
||||
# Allows to define if a command is a no-op, but should appear in autocomplete
|
||||
def noop(noop)
|
||||
@noop = noop
|
||||
end
|
||||
|
||||
# Registers a new command which is recognizeable
|
||||
# from body of email or comment.
|
||||
# Example:
|
||||
|
@ -63,7 +70,8 @@ module Gitlab
|
|||
name: command_name,
|
||||
aliases: aliases,
|
||||
description: @description || '',
|
||||
params: @params || []
|
||||
params: @params || [],
|
||||
noop: @noop || false
|
||||
}
|
||||
@command_definitions << command_definition
|
||||
|
||||
|
|
|
@ -29,6 +29,11 @@ describe Gitlab::SlashCommands::Dsl do
|
|||
command :wildcard do |*args|
|
||||
args
|
||||
end
|
||||
|
||||
noop true
|
||||
command :cc do |*args|
|
||||
args
|
||||
end
|
||||
end
|
||||
end
|
||||
let(:dummy) { DummyClass.new }
|
||||
|
@ -36,11 +41,12 @@ describe Gitlab::SlashCommands::Dsl do
|
|||
describe '.command_definitions' do
|
||||
it 'returns an array with commands definitions' do
|
||||
expected = [
|
||||
{ name: :no_args, aliases: [:none], description: 'A command with no args', params: [] },
|
||||
{ name: :returning, aliases: [], description: 'A command returning a value', params: [] },
|
||||
{ name: :one_arg, aliases: [:once, :first], description: '', params: ['The first argument'] },
|
||||
{ name: :two_args, aliases: [], description: 'A command with two args', params: ['The first argument', 'The second argument'] },
|
||||
{ name: :wildcard, aliases: [], description: '', params: [] }
|
||||
{ name: :no_args, aliases: [:none], description: 'A command with no args', params: [], noop: false },
|
||||
{ name: :returning, aliases: [], description: 'A command returning a value', params: [], noop: false },
|
||||
{ name: :one_arg, aliases: [:once, :first], description: '', params: ['The first argument'], noop: false },
|
||||
{ name: :two_args, aliases: [], description: 'A command with two args', params: ['The first argument', 'The second argument'], noop: false },
|
||||
{ name: :wildcard, aliases: [], description: '', params: [], noop: false },
|
||||
{ name: :cc, aliases: [], description: '', params: [], noop: true }
|
||||
]
|
||||
|
||||
expect(DummyClass.command_definitions).to eq expected
|
||||
|
|
|
@ -175,7 +175,7 @@ describe Gitlab::SlashCommands::Extractor do
|
|||
end
|
||||
|
||||
it 'does not extract commands inside a blockcode' do
|
||||
msg = msg = "Hello\r\n```\r\nThis is some text\r\n/close\r\n/assign @user\r\n```\r\n\r\nWorld"
|
||||
msg = "Hello\r\n```\r\nThis is some text\r\n/close\r\n/assign @user\r\n```\r\n\r\nWorld"
|
||||
expected = msg.delete("\r")
|
||||
commands = extractor.extract_commands!(msg)
|
||||
|
||||
|
@ -193,7 +193,7 @@ describe Gitlab::SlashCommands::Extractor do
|
|||
end
|
||||
|
||||
it 'does not extract commands inside a HTML tag' do
|
||||
msg = msg = "Hello\r\n<div>\r\nThis is some text\r\n/close\r\n/assign @user\r\n</div>\r\n\r\nWorld"
|
||||
msg = "Hello\r\n<div>\r\nThis is some text\r\n/close\r\n/assign @user\r\n</div>\r\n\r\nWorld"
|
||||
expected = msg.delete("\r")
|
||||
commands = extractor.extract_commands!(msg)
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ shared_examples 'issuable record that supports slash commands in its description
|
|||
|
||||
issuable = project.public_send(issuable_type.to_s.pluralize).first
|
||||
|
||||
expect(issuable.description).to eq "bug description\r\n"
|
||||
expect(issuable.description).to eq "bug description\n"
|
||||
expect(issuable.labels).to eq [label_bug]
|
||||
expect(issuable.milestone).to eq milestone
|
||||
expect(page).to have_content 'bug 345'
|
||||
|
@ -57,7 +57,7 @@ shared_examples 'issuable record that supports slash commands in its description
|
|||
issuable.reload
|
||||
note = issuable.notes.user.first
|
||||
|
||||
expect(note.note).to eq "Awesome!\r\n"
|
||||
expect(note.note).to eq "Awesome!\n"
|
||||
expect(issuable.assignee).to eq assignee
|
||||
expect(issuable.labels).to eq [label_bug]
|
||||
expect(issuable.milestone).to eq milestone
|
||||
|
@ -189,7 +189,6 @@ shared_examples 'issuable record that supports slash commands in its description
|
|||
end
|
||||
|
||||
it "does not reopen the #{issuable_type}" do
|
||||
current_title = issuable.title
|
||||
page.within('.js-main-target-form') do
|
||||
fill_in 'note[note]', with: "/title Awesome new title"
|
||||
click_button 'Comment'
|
||||
|
|
Loading…
Reference in New Issue