Commit 5ba9279c authored by Jan's avatar Jan Committed by Rémy Coutable

Resolve "Add `/confidential` quick action for issues"

parent 031ee142
...@@ -561,6 +561,17 @@ module QuickActions ...@@ -561,6 +561,17 @@ module QuickActions
end end
end end
desc 'Make issue confidential.'
explanation do
'Makes this issue confidential'
end
condition do
issuable.is_a?(Issue) && current_user.can?(:"admin_#{issuable.to_ability_name}", issuable)
end
command :confidential do
@updates[:confidential] = true
end
def extract_users(params) def extract_users(params)
return [] if params.nil? return [] if params.nil?
......
---
title: Add /confidential quick action
merge_request:
author: Jan Beckmann
type: added
...@@ -42,3 +42,4 @@ do. ...@@ -42,3 +42,4 @@ do.
| `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` |
| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` |
| <code>/copy_metadata #issue &#124; !merge_request</code> | Copy labels and milestone from other issue or merge request | | <code>/copy_metadata #issue &#124; !merge_request</code> | Copy labels and milestone from other issue or merge request |
| `/confidential` | Makes the issue confidential |
\ No newline at end of file
...@@ -153,6 +153,42 @@ feature 'Issues > User uses quick actions', :js do ...@@ -153,6 +153,42 @@ feature 'Issues > User uses quick actions', :js do
end end
end end
describe 'make issue confidential' do
let(:issue) { create(:issue, project: project) }
let(:original_issue) { create(:issue, project: project) }
context 'when the current user can update issues' do
it 'does not create a note, and marks the issue as confidential' do
add_note("/confidential")
expect(page).not_to have_content "/confidential"
expect(page).to have_content 'Commands applied'
expect(page).to have_content "made the issue confidential"
expect(issue.reload).to be_confidential
end
end
context 'when the current user cannot update the issue' do
let(:guest) { create(:user) }
before do
project.add_guest(guest)
gitlab_sign_out
sign_in(guest)
visit project_issue_path(project, issue)
end
it 'does not create a note, and does not mark the issue as confidential' do
add_note("/confidential")
expect(page).not_to have_content 'Commands applied'
expect(page).not_to have_content "made the issue confidential"
expect(issue.reload).not_to be_confidential
end
end
end
describe 'move the issue to another project' do describe 'move the issue to another project' do
let(:issue) { create(:issue, project: project) } let(:issue) { create(:issue, project: project) }
......
...@@ -323,6 +323,14 @@ describe QuickActions::InterpretService do ...@@ -323,6 +323,14 @@ describe QuickActions::InterpretService do
end end
end end
shared_examples 'confidential command' do
it 'marks issue as confidential if content contains /confidential' do
_, updates = service.execute(content, issuable)
expect(updates).to eq(confidential: true)
end
end
shared_examples 'shrug command' do shared_examples 'shrug command' do
it 'appends ¯\_(ツ)_/¯ to the comment' do it 'appends ¯\_(ツ)_/¯ to the comment' do
new_content, _ = service.execute(content, issuable) new_content, _ = service.execute(content, issuable)
...@@ -774,6 +782,11 @@ describe QuickActions::InterpretService do ...@@ -774,6 +782,11 @@ describe QuickActions::InterpretService do
let(:issuable) { issue } let(:issuable) { issue }
end end
it_behaves_like 'confidential command' do
let(:content) { '/confidential' }
let(:issuable) { issue }
end
context '/copy_metadata command' do context '/copy_metadata command' do
let(:todo_label) { create(:label, project: project, title: 'To Do') } let(:todo_label) { create(:label, project: project, title: 'To Do') }
let(:inreview_label) { create(:label, project: project, title: 'In Review') } let(:inreview_label) { create(:label, project: project, title: 'In Review') }
...@@ -918,6 +931,11 @@ describe QuickActions::InterpretService do ...@@ -918,6 +931,11 @@ describe QuickActions::InterpretService do
let(:issuable) { issue } let(:issuable) { issue }
end end
it_behaves_like 'empty command' do
let(:content) { '/confidential' }
let(:issuable) { issue }
end
it_behaves_like 'empty command' do it_behaves_like 'empty command' do
let(:content) { '/duplicate #{issue.to_reference}' } let(:content) { '/duplicate #{issue.to_reference}' }
let(:issuable) { issue } let(:issuable) { issue }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment