Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
9aa3edc6
Commit
9aa3edc6
authored
Aug 17, 2016
by
Douwe Maan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove unneeded aliases
parent
3e7eeefc
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
109 additions
and
117 deletions
+109
-117
app/services/slash_commands/interpret_service.rb
app/services/slash_commands/interpret_service.rb
+21
-14
doc/workflow/slash_commands.md
doc/workflow/slash_commands.md
+20
-20
spec/features/issues/user_uses_slash_commands_spec.rb
spec/features/issues/user_uses_slash_commands_spec.rb
+4
-4
spec/features/merge_requests/user_uses_slash_commands_spec.rb
.../features/merge_requests/user_uses_slash_commands_spec.rb
+2
-2
spec/lib/gitlab/slash_commands/extractor_spec.rb
spec/lib/gitlab/slash_commands/extractor_spec.rb
+8
-8
spec/services/notes/slash_commands_service_spec.rb
spec/services/notes/slash_commands_service_spec.rb
+4
-4
spec/services/slash_commands/interpret_service_spec.rb
spec/services/slash_commands/interpret_service_spec.rb
+48
-63
spec/support/issuable_create_service_slash_commands_shared_examples.rb
...issuable_create_service_slash_commands_shared_examples.rb
+2
-2
No files found.
app/services/slash_commands/interpret_service.rb
View file @
9aa3edc6
...
...
@@ -54,7 +54,7 @@ module SlashCommands
issuable
.
closed?
&&
current_user
.
can?
(
:"update_
#{
issuable
.
to_ability_name
}
"
,
issuable
)
end
command
:reopen
,
:open
do
command
:reopen
do
@updates
[
:state_event
]
=
'reopen'
end
...
...
@@ -86,7 +86,7 @@ module SlashCommands
issuable
.
assignee_id?
&&
current_user
.
can?
(
:"admin_
#{
issuable
.
to_ability_name
}
"
,
project
)
end
command
:unassign
,
:remove_assignee
do
command
:unassign
do
@updates
[
:assignee_id
]
=
nil
end
...
...
@@ -109,7 +109,7 @@ module SlashCommands
issuable
.
milestone_id?
&&
current_user
.
can?
(
:"admin_
#{
issuable
.
to_ability_name
}
"
,
project
)
end
command
:
clear_milestone
,
:
remove_milestone
do
command
:remove_milestone
do
@updates
[
:milestone_id
]
=
nil
end
...
...
@@ -119,33 +119,40 @@ module SlashCommands
current_user
.
can?
(
:"admin_
#{
issuable
.
to_ability_name
}
"
,
project
)
&&
project
.
labels
.
any?
end
command
:label
,
:labels
do
|
labels_param
|
command
:label
do
|
labels_param
|
label_ids
=
find_label_ids
(
labels_param
)
@updates
[
:add_label_ids
]
=
label_ids
unless
label_ids
.
empty?
end
desc
'Remove label(s)'
desc
'Remove
all or specific
label(s)'
params
'~label1 ~"label 2"'
condition
do
issuable
.
persisted?
&&
issuable
.
labels
.
any?
&&
current_user
.
can?
(
:"admin_
#{
issuable
.
to_ability_name
}
"
,
project
)
end
command
:unlabel
,
:remove_label
,
:remove_labels
do
|
labels_param
|
command
:unlabel
do
|
labels_param
=
nil
|
if
labels_param
.
present?
label_ids
=
find_label_ids
(
labels_param
)
@updates
[
:remove_label_ids
]
=
label_ids
unless
label_ids
.
empty?
else
@updates
[
:label_ids
]
=
[]
end
end
desc
'Remove all labels'
desc
'Replace all label(s)'
params
'~label1 ~"label 2"'
condition
do
issuable
.
persisted?
&&
issuable
.
labels
.
any?
&&
current_user
.
can?
(
:"admin_
#{
issuable
.
to_ability_name
}
"
,
project
)
end
command
:clear_labels
,
:clear_label
do
@updates
[
:label_ids
]
=
[]
command
:relabel
do
|
labels_param
|
label_ids
=
find_label_ids
(
labels_param
)
@updates
[
:label_ids
]
=
label_ids
unless
label_ids
.
empty?
end
desc
'Add a todo'
...
...
@@ -185,12 +192,12 @@ module SlashCommands
end
desc
'Set due date'
params
'<in 2 days
; this Friday;
December 31st>'
params
'<in 2 days
| this Friday |
December 31st>'
condition
do
issuable
.
respond_to?
(
:due_date
)
&&
current_user
.
can?
(
:"update_
#{
issuable
.
to_ability_name
}
"
,
issuable
)
end
command
:due
,
:due_date
do
|
due_date_param
|
command
:due
do
|
due_date_param
|
due_date
=
Chronic
.
parse
(
due_date_param
).
try
(
:to_date
)
@updates
[
:due_date
]
=
due_date
if
due_date
...
...
@@ -203,7 +210,7 @@ module SlashCommands
issuable
.
due_date?
&&
current_user
.
can?
(
:"update_
#{
issuable
.
to_ability_name
}
"
,
issuable
)
end
command
:
clear
_due_date
do
command
:
remove
_due_date
do
@updates
[
:due_date
]
=
nil
end
...
...
doc/workflow/slash_commands.md
View file @
9aa3edc6
...
...
@@ -5,26 +5,26 @@ requests that are usually done by clicking buttons or dropdowns in GitLab's UI.
You can enter these commands while creating a new issue or merge request, and
in comments. Each command should be on a separate line in order to be properly
detected and executed. The commands are removed from the issue, merge request or
comment body before it is saved and will not be visible
as such
to anyone else.
comment body before it is saved and will not be visible to anyone else.
Here
is a list of all of the available commands and descriptions about what they
Below
is a list of all of the available commands and descriptions about what they
do.
| Command | A
liases | A
ction |
|:---------------------------|:-------------
-------|:-------------
|
|
`/close`
|
None |
Close the issue or merge request |
|
`/reopen`
|
`/open`
|
Reopen the issue or merge request |
|
`/title <New title>`
|
None |
Change title |
|
`/assign @username`
|
None |
Assign |
|
`/unassign`
|
`/remove_assignee`
|
Remove assignee |
|
`/milestone %milestone`
|
None |
Set milestone |
|
`/
clear_milestone`
|
`/remove_milestone`
| Remove milestone |
|
`/label ~foo ~"bar baz"`
|
`/labels`
|
Add label(s) |
|
`/unlabel ~foo ~"bar baz"`
|
`/remove_label`
,
`remove_labels`
| Remove
label(s) |
|
`/
clear_labels`
|
`/clear_label`
| Clear all labels
|
|
`/todo`
|
None |
Add a todo |
|
`/done`
|
None |
Mark todo as done |
|
`/subscribe`
|
None |
Subscribe |
|
`/unsubscribe`
|
None |
Unsubscribe |
|
`/due <in 2 days
; this Friday; December 31st>`
|
`/due_date
`
| Set due date |
|
`/
clear_due_date`
| None
| Remove due date |
| Command | Action |
|:---------------------------|:-------------|
|
`/close`
| Close the issue or merge request |
|
`/reopen`
| Reopen the issue or merge request |
|
`/title <New title>`
| Change title |
|
`/assign @username`
| Assign |
|
`/unassign`
| Remove assignee |
|
`/milestone %milestone`
| Set milestone |
|
`/
remove_milestone`
| Remove milestone |
|
`/label ~foo ~"bar baz"`
| Add label(s) |
|
`/unlabel ~foo ~"bar baz"`
|
Remove all or specific
label(s) |
|
`/
relabel ~foo ~"bar baz"`
| Replace all label(s)
|
|
`/todo`
| Add a todo |
|
`/done`
| Mark todo as done |
|
`/subscribe`
| Subscribe |
|
`/unsubscribe`
| Unsubscribe |
|
`/due <in 2 days
| this Friday | December 31st>
`
| Set due date |
|
`/
remove_due_date`
| Remove due date |
spec/features/issues/user_uses_slash_commands_spec.rb
View file @
9aa3edc6
...
...
@@ -22,11 +22,11 @@ feature 'Issues > User uses slash commands', feature: true, js: true do
it
'does not create a note, and sets the due date accordingly'
do
page
.
within
(
'.js-main-target-form'
)
do
fill_in
'note[note]'
,
with:
"/due
_date
2016-08-28"
fill_in
'note[note]'
,
with:
"/due 2016-08-28"
click_button
'Comment'
end
expect
(
page
).
not_to
have_content
'/due
_date
2016-08-28'
expect
(
page
).
not_to
have_content
'/due 2016-08-28'
expect
(
page
).
to
have_content
'Your commands have been executed!'
issue
.
reload
...
...
@@ -42,11 +42,11 @@ feature 'Issues > User uses slash commands', feature: true, js: true do
expect
(
issue
.
due_date
).
to
eq
Date
.
new
(
2016
,
8
,
28
)
page
.
within
(
'.js-main-target-form'
)
do
fill_in
'note[note]'
,
with:
"/
clear
_due_date"
fill_in
'note[note]'
,
with:
"/
remove
_due_date"
click_button
'Comment'
end
expect
(
page
).
not_to
have_content
'/
clear
_due_date'
expect
(
page
).
not_to
have_content
'/
remove
_due_date'
expect
(
page
).
to
have_content
'Your commands have been executed!'
issue
.
reload
...
...
spec/features/merge_requests/user_uses_slash_commands_spec.rb
View file @
9aa3edc6
...
...
@@ -22,11 +22,11 @@ feature 'Merge Requests > User uses slash commands', feature: true, js: true do
it
'does not recognize the command nor create a note'
do
page
.
within
(
'.js-main-target-form'
)
do
fill_in
'note[note]'
,
with:
"/due
_date
2016-08-28"
fill_in
'note[note]'
,
with:
"/due 2016-08-28"
click_button
'Comment'
end
expect
(
page
).
not_to
have_content
'/due
_date
2016-08-28'
expect
(
page
).
not_to
have_content
'/due 2016-08-28'
end
end
end
spec/lib/gitlab/slash_commands/extractor_spec.rb
View file @
9aa3edc6
...
...
@@ -18,7 +18,7 @@ describe Gitlab::SlashCommands::Extractor do
it
'extracts command'
do
msg
,
commands
=
extractor
.
extract_commands
(
original_msg
)
expect
(
commands
).
to
eq
[[
'open'
]]
expect
(
commands
).
to
eq
[[
'
re
open'
]]
expect
(
msg
).
to
eq
final_msg
end
end
...
...
@@ -45,31 +45,31 @@ describe Gitlab::SlashCommands::Extractor do
describe
'command with no argument'
do
context
'at the start of content'
do
it_behaves_like
'command with no argument'
do
let
(
:original_msg
)
{
"/open
\n
world"
}
let
(
:original_msg
)
{
"/
re
open
\n
world"
}
let
(
:final_msg
)
{
"world"
}
end
end
context
'in the middle of content'
do
it_behaves_like
'command with no argument'
do
let
(
:original_msg
)
{
"hello
\n
/open
\n
world"
}
let
(
:original_msg
)
{
"hello
\n
/
re
open
\n
world"
}
let
(
:final_msg
)
{
"hello
\n
world"
}
end
end
context
'in the middle of a line'
do
it
'does not extract command'
do
msg
=
"hello
\n
world /open"
msg
=
"hello
\n
world /
re
open"
msg
,
commands
=
extractor
.
extract_commands
(
msg
)
expect
(
commands
).
to
be_empty
expect
(
msg
).
to
eq
"hello
\n
world /open"
expect
(
msg
).
to
eq
"hello
\n
world /
re
open"
end
end
context
'at the end of content'
do
it_behaves_like
'command with no argument'
do
let
(
:original_msg
)
{
"hello
\n
/open"
}
let
(
:original_msg
)
{
"hello
\n
/
re
open"
}
let
(
:final_msg
)
{
"hello"
}
end
end
...
...
@@ -170,10 +170,10 @@ describe Gitlab::SlashCommands::Extractor do
end
it
'extracts multiple commands'
do
msg
=
%(hello\n/power @user.name %9.10 ~"bar baz.2" label\nworld\n/open)
msg
=
%(hello\n/power @user.name %9.10 ~"bar baz.2" label\nworld\n/
re
open)
msg
,
commands
=
extractor
.
extract_commands
(
msg
)
expect
(
commands
).
to
eq
[[
'power'
,
'@user.name %9.10 ~"bar baz.2" label'
],
[
'open'
]]
expect
(
commands
).
to
eq
[[
'power'
,
'@user.name %9.10 ~"bar baz.2" label'
],
[
'
re
open'
]]
expect
(
msg
).
to
eq
"hello
\n
world"
end
...
...
spec/services/notes/slash_commands_service_spec.rb
View file @
9aa3edc6
...
...
@@ -69,12 +69,12 @@ describe Notes::SlashCommandsService, services: true do
end
end
describe
'/open'
do
describe
'/
re
open'
do
before
do
note
.
noteable
.
close!
expect
(
note
.
noteable
).
to
be_closed
end
let
(
:note_text
)
{
'/open'
}
let
(
:note_text
)
{
'/
re
open'
}
it
'opens the noteable, and leave no note'
do
content
,
command_params
=
service
.
extract_commands
(
note
)
...
...
@@ -104,12 +104,12 @@ describe Notes::SlashCommandsService, services: true do
end
end
describe
'/open'
do
describe
'/
re
open'
do
before
do
note
.
noteable
.
close
expect
(
note
.
noteable
).
to
be_closed
end
let
(
:note_text
)
{
"HELLO
\n
/open
\n
WORLD"
}
let
(
:note_text
)
{
"HELLO
\n
/
re
open
\n
WORLD"
}
it
'opens the noteable'
do
content
,
command_params
=
service
.
extract_commands
(
note
)
...
...
spec/services/slash_commands/interpret_service_spec.rb
View file @
9aa3edc6
...
...
@@ -16,8 +16,8 @@ describe SlashCommands::InterpretService, services: true do
let
(
:service
)
{
described_class
.
new
(
project
,
user
)
}
let
(
:merge_request
)
{
create
(
:merge_request
,
source_project:
project
)
}
shared_examples
'open command'
do
it
'returns state_event: "
open" if content contains /
open'
do
shared_examples
'
re
open command'
do
it
'returns state_event: "
reopen" if content contains /re
open'
do
issuable
.
close!
_
,
updates
=
service
.
execute
(
content
,
issuable
)
...
...
@@ -26,7 +26,7 @@ describe SlashCommands::InterpretService, services: true do
end
shared_examples
'close command'
do
it
'returns state_event: "close" if content contains /
open
'
do
it
'returns state_event: "close" if content contains /
close
'
do
_
,
updates
=
service
.
execute
(
content
,
issuable
)
expect
(
updates
).
to
eq
(
state_event:
'close'
)
...
...
@@ -67,8 +67,8 @@ describe SlashCommands::InterpretService, services: true do
end
end
shared_examples
'
clear
_milestone command'
do
it
'populates milestone_id: nil if content contains /
clear
_milestone'
do
shared_examples
'
remove
_milestone command'
do
it
'populates milestone_id: nil if content contains /
remove
_milestone'
do
issuable
.
update
(
milestone_id:
milestone
.
id
)
_
,
updates
=
service
.
execute
(
content
,
issuable
)
...
...
@@ -95,8 +95,8 @@ describe SlashCommands::InterpretService, services: true do
end
end
shared_examples
'
clear_labels command
'
do
it
'populates label_ids: [] if content contains /
clear_label
s'
do
shared_examples
'
unlabel command with no argument
'
do
it
'populates label_ids: [] if content contains /
unlabel with no argument
s'
do
issuable
.
update
(
label_ids:
[
inprogress
.
id
])
# populate the label
_
,
updates
=
service
.
execute
(
content
,
issuable
)
...
...
@@ -104,6 +104,16 @@ describe SlashCommands::InterpretService, services: true do
end
end
shared_examples
'relabel command'
do
it
'populates label_ids: [] if content contains /relabel'
do
issuable
.
update
(
label_ids:
[
bug
.
id
])
# populate the label
inprogress
# populate the label
_
,
updates
=
service
.
execute
(
content
,
issuable
)
expect
(
updates
).
to
eq
(
label_ids:
[
inprogress
.
id
])
end
end
shared_examples
'todo command'
do
it
'populates todo_event: "add" if content contains /todo'
do
_
,
updates
=
service
.
execute
(
content
,
issuable
)
...
...
@@ -138,16 +148,16 @@ describe SlashCommands::InterpretService, services: true do
end
end
shared_examples
'due
_date
command'
do
it
'populates due_date: Date.new(2016, 8, 28) if content contains /due
_date
2016-08-28'
do
shared_examples
'due command'
do
it
'populates due_date: Date.new(2016, 8, 28) if content contains /due 2016-08-28'
do
_
,
updates
=
service
.
execute
(
content
,
issuable
)
expect
(
updates
).
to
eq
(
due_date:
defined?
(
expected_date
)
?
expected_date
:
Date
.
new
(
2016
,
8
,
28
))
end
end
shared_examples
'
clear
_due_date command'
do
it
'populates due_date: nil if content contains /
clear
_due_date'
do
shared_examples
'
remove
_due_date command'
do
it
'populates due_date: nil if content contains /
remove
_due_date'
do
issuable
.
update
(
due_date:
Date
.
today
)
_
,
updates
=
service
.
execute
(
content
,
issuable
)
...
...
@@ -163,19 +173,14 @@ describe SlashCommands::InterpretService, services: true do
end
end
it_behaves_like
'open command'
do
let
(
:content
)
{
'/open'
}
it_behaves_like
'
re
open command'
do
let
(
:content
)
{
'/
re
open'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'open command'
do
let
(
:content
)
{
'/open'
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'open command'
do
it_behaves_like
'reopen command'
do
let
(
:content
)
{
'/reopen'
}
let
(
:issuable
)
{
issue
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'close command'
do
...
...
@@ -233,11 +238,6 @@ describe SlashCommands::InterpretService, services: true do
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'unassign command'
do
let
(
:content
)
{
'/remove_assignee'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'milestone command'
do
let
(
:content
)
{
"/milestone %
#{
milestone
.
title
}
"
}
let
(
:issuable
)
{
issue
}
...
...
@@ -248,19 +248,14 @@ describe SlashCommands::InterpretService, services: true do
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'
clear
_milestone command'
do
let
(
:content
)
{
'/
clear
_milestone'
}
it_behaves_like
'
remove
_milestone command'
do
let
(
:content
)
{
'/
remove
_milestone'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'clear_milestone command'
do
let
(
:content
)
{
'/clear_milestone'
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'clear_milestone command'
do
it_behaves_like
'remove_milestone command'
do
let
(
:content
)
{
'/remove_milestone'
}
let
(
:issuable
)
{
issue
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'label command'
do
...
...
@@ -273,11 +268,6 @@ describe SlashCommands::InterpretService, services: true do
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'label command'
do
let
(
:content
)
{
%(/labels ~"#{inprogress.title}" ~#{bug.title} ~unknown)
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'unlabel command'
do
let
(
:content
)
{
%(/unlabel ~"#{inprogress.title}")
}
let
(
:issuable
)
{
issue
}
...
...
@@ -288,31 +278,26 @@ describe SlashCommands::InterpretService, services: true do
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'unlabel command'
do
let
(
:content
)
{
%(/
remove_labels ~"#{inprogress.title}"
)
}
it_behaves_like
'unlabel command
with no argument
'
do
let
(
:content
)
{
%(/
unlabel
)
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'unlabel command'
do
let
(
:content
)
{
%(/
remove_label ~"#{inprogress.title}"
)
}
let
(
:issuable
)
{
issue
}
it_behaves_like
'unlabel command
with no argument
'
do
let
(
:content
)
{
%(/
unlabel
)
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'
clear_labels
command'
do
let
(
:content
)
{
'/clear_labels'
}
it_behaves_like
'
relabel
command'
do
let
(
:content
)
{
%(/relabel ~"#{inprogress.title}")
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'
clear_labels
command'
do
let
(
:content
)
{
'/clear_labels'
}
it_behaves_like
'
relabel
command'
do
let
(
:content
)
{
%(/relabel ~"#{inprogress.title}")
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'clear_labels command'
do
let
(
:content
)
{
'/clear_label'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'todo command'
do
let
(
:content
)
{
'/todo'
}
let
(
:issuable
)
{
issue
}
...
...
@@ -353,46 +338,46 @@ describe SlashCommands::InterpretService, services: true do
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'due
_date
command'
do
let
(
:content
)
{
'/due
_date
2016-08-28'
}
it_behaves_like
'due command'
do
let
(
:content
)
{
'/due 2016-08-28'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'due
_date
command'
do
it_behaves_like
'due command'
do
let
(
:content
)
{
'/due tomorrow'
}
let
(
:issuable
)
{
issue
}
let
(
:expected_date
)
{
Date
.
tomorrow
}
end
it_behaves_like
'due
_date
command'
do
it_behaves_like
'due command'
do
let
(
:content
)
{
'/due 5 days from now'
}
let
(
:issuable
)
{
issue
}
let
(
:expected_date
)
{
5
.
days
.
from_now
.
to_date
}
end
it_behaves_like
'due
_date
command'
do
it_behaves_like
'due command'
do
let
(
:content
)
{
'/due in 2 days'
}
let
(
:issuable
)
{
issue
}
let
(
:expected_date
)
{
2
.
days
.
from_now
.
to_date
}
end
it_behaves_like
'empty command'
do
let
(
:content
)
{
'/due
_date
foo bar'
}
let
(
:content
)
{
'/due foo bar'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'empty command'
do
let
(
:content
)
{
'/due
_date
2016-08-28'
}
let
(
:content
)
{
'/due 2016-08-28'
}
let
(
:issuable
)
{
merge_request
}
end
it_behaves_like
'
clear
_due_date command'
do
let
(
:content
)
{
'/
clear
_due_date'
}
it_behaves_like
'
remove
_due_date command'
do
let
(
:content
)
{
'/
remove
_due_date'
}
let
(
:issuable
)
{
issue
}
end
it_behaves_like
'empty command'
do
let
(
:content
)
{
'/
clear
_due_date'
}
let
(
:content
)
{
'/
remove
_due_date'
}
let
(
:issuable
)
{
merge_request
}
end
end
...
...
spec/support/issuable_create_service_slash_commands_shared_examples.rb
View file @
9aa3edc6
...
...
@@ -14,7 +14,7 @@ shared_examples 'new issuable record that supports slash commands' do
context
'with labels in command only'
do
let
(
:example_params
)
do
{
description:
"/label ~
#{
labels
.
first
.
name
}
~
#{
labels
.
second
.
name
}
\n
/
remove_
label ~
#{
labels
.
third
.
name
}
"
description:
"/label ~
#{
labels
.
first
.
name
}
~
#{
labels
.
second
.
name
}
\n
/
un
label ~
#{
labels
.
third
.
name
}
"
}
end
...
...
@@ -28,7 +28,7 @@ shared_examples 'new issuable record that supports slash commands' do
let
(
:example_params
)
do
{
label_ids:
[
labels
.
second
.
id
],
description:
"/label ~
#{
labels
.
first
.
name
}
\n
/
remove_
label ~
#{
labels
.
third
.
name
}
"
description:
"/label ~
#{
labels
.
first
.
name
}
\n
/
un
label ~
#{
labels
.
third
.
name
}
"
}
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment