Implement the `tag` commands

This commit is contained in:
Peter Leitzen 2018-07-21 12:23:53 +02:00
parent 2022243a22
commit cc1aecdb4f
2 changed files with 62 additions and 0 deletions

View File

@ -582,6 +582,23 @@ module QuickActions
@updates[:confidential] = true
end
desc 'Tag this commit.'
explanation do |(tag_name), _|
"Tags this commit to #{tag_name}."
end
params 'v1.2.3 <message>'
parse_params do |tag_name_and_message|
tag_name_and_message.split(' ', 2)
end
condition do
issuable.is_a?(Commit)
# TODO authorize
end
command :tag do |(tag_name, message)|
@updates[:tag_name] = tag_name
@updates[:tag_message] = message
end
def extract_users(params)
return [] if params.nil?

View File

@ -6,6 +6,7 @@ describe QuickActions::InterpretService do
let(:developer2) { create(:user) }
let(:issue) { create(:issue, project: project) }
let(:milestone) { create(:milestone, project: project, title: '9.10') }
let(:commit) { create(:commit, project: project) }
let(:inprogress) { create(:label, project: project, title: 'In Progress') }
let(:bug) { create(:label, project: project, title: 'Bug') }
let(:note) { build(:note, commit_id: merge_request.diff_head_sha) }
@ -347,6 +348,14 @@ describe QuickActions::InterpretService do
end
end
shared_examples 'tag command' do
it 'tags a commit' do
_, updates = service.execute(content, issuable)
expect(updates).to eq(tag_name: tag_name, tag_message: tag_message)
end
end
it_behaves_like 'reopen command' do
let(:content) { '/reopen' }
let(:issuable) { issue }
@ -1102,6 +1111,32 @@ describe QuickActions::InterpretService do
it_behaves_like 'empty command'
end
end
context '/tag command' do
let(:issuable) { commit }
context 'ignores command with no argument' do
it_behaves_like 'empty command' do
let(:content) { '/tag' }
end
end
context 'tags a commit with a tag name' do
it_behaves_like 'tag command' do
let(:tag_name) { 'v1.2.3' }
let(:tag_message) { nil }
let(:content) { "/tag #{tag_name}" }
end
end
context 'tags a commit with a tag name and message' do
it_behaves_like 'tag command' do
let(:tag_name) { 'v1.2.3' }
let(:tag_message) { 'Stable release' }
let(:content) { "/tag #{tag_name} #{tag_message}" }
end
end
end
end
describe '#explain' do
@ -1319,5 +1354,15 @@ describe QuickActions::InterpretService do
expect(explanations).to eq(["Moves this issue to test/project."])
end
end
describe 'tag a commit' do
let(:content) { '/tag 1.2.3 some message' }
it 'includes the tag name' do
_, explanations = service.explain(content, commit)
expect(explanations).to eq(["Tags this commit to 1.2.3."])
end
end
end
end