Skip to content
Snippets Groups Projects
Commit 9aa3edc6 authored by Douwe Maan's avatar Douwe Maan
Browse files

Remove unneeded aliases

parent 3e7eeefc
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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|
label_ids = find_label_ids(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?
@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'
Loading
Loading
@@ -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
Loading
Loading
@@ -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
 
Loading
Loading
Loading
Loading
@@ -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 | Aliases | Action |
|:---------------------------|:--------------------|:-------------|
| `/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 |
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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 [['reopen']]
expect(msg).to eq final_msg
end
end
Loading
Loading
@@ -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\nworld" }
let(:original_msg) { "/reopen\nworld" }
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\nworld" }
let(:original_msg) { "hello\n/reopen\nworld" }
let(:final_msg) { "hello\nworld" }
end
end
 
context 'in the middle of a line' do
it 'does not extract command' do
msg = "hello\nworld /open"
msg = "hello\nworld /reopen"
msg, commands = extractor.extract_commands(msg)
 
expect(commands).to be_empty
expect(msg).to eq "hello\nworld /open"
expect(msg).to eq "hello\nworld /reopen"
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/reopen" }
let(:final_msg) { "hello" }
end
end
Loading
Loading
@@ -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/reopen)
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'], ['reopen']]
expect(msg).to eq "hello\nworld"
end
 
Loading
Loading
Loading
Loading
@@ -69,12 +69,12 @@ describe Notes::SlashCommandsService, services: true do
end
end
 
describe '/open' do
describe '/reopen' do
before do
note.noteable.close!
expect(note.noteable).to be_closed
end
let(:note_text) { '/open' }
let(:note_text) { '/reopen' }
 
it 'opens the noteable, and leave no note' do
content, command_params = service.extract_commands(note)
Loading
Loading
@@ -104,12 +104,12 @@ describe Notes::SlashCommandsService, services: true do
end
end
 
describe '/open' do
describe '/reopen' do
before do
note.noteable.close
expect(note.noteable).to be_closed
end
let(:note_text) { "HELLO\n/open\nWORLD" }
let(:note_text) { "HELLO\n/reopen\nWORLD" }
 
it 'opens the noteable' do
content, command_params = service.extract_commands(note)
Loading
Loading
Loading
Loading
@@ -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 'reopen command' do
it 'returns state_event: "reopen" if content contains /reopen' do
issuable.close!
_, updates = service.execute(content, issuable)
 
Loading
Loading
@@ -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')
Loading
Loading
@@ -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)
 
Loading
Loading
@@ -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_labels' do
shared_examples 'unlabel command with no argument' do
it 'populates label_ids: [] if content contains /unlabel with no arguments' do
issuable.update(label_ids: [inprogress.id]) # populate the label
_, updates = service.execute(content, issuable)
 
Loading
Loading
@@ -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)
Loading
Loading
@@ -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)
 
Loading
Loading
@@ -163,19 +173,14 @@ describe SlashCommands::InterpretService, services: true do
end
end
 
it_behaves_like 'open command' do
let(:content) { '/open' }
it_behaves_like 'reopen command' do
let(:content) { '/reopen' }
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
Loading
Loading
@@ -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 }
Loading
Loading
@@ -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
Loading
Loading
@@ -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 }
Loading
Loading
@@ -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 }
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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/unlabel ~#{labels.third.name}"
}
end
 
Loading
Loading
@@ -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/unlabel ~#{labels.third.name}"
}
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment