Commit 427bfae2 authored by Mateusz Bajorski's avatar Mateusz Bajorski

Fixed typos and improved reference checking

parent d691df02
...@@ -257,22 +257,22 @@ module QuickActions ...@@ -257,22 +257,22 @@ module QuickActions
end end
desc 'Copy labels and milestone from other issue or merge request' desc 'Copy labels and milestone from other issue or merge request'
explanation do |issueable_id| explanation do |issuable_id|
"Copy labels and milestone from issue or merge_request \"#{issueable_id}\"." "Copy labels and milestone from issue or merge_request \"#{issuable_id}\"."
end end
params '< #issue | !merge_request >' params '#issue | !merge_request'
condition do condition do
issuable.persisted? && issuable.persisted? &&
current_user.can?(:"update_#{issuable.to_ability_name}", issuable) current_user.can?(:"update_#{issuable.to_ability_name}", issuable)
end end
command :copy_metadata do |issueable_id| command :copy_metadata do |issuable_id|
reference_type = issueable_id.include?("#") ? :issue : :merge_request source_issuable = extract_references(issuable_id, :issue).first
issue = extract_references(issueable_id, reference_type).first source_issuable = extract_references(issuable_id, :merge_request).first if !source_issuable.present?
if issue.present? && issue.project.id == issuable.project.id if source_issuable.present? && source_issuable.project.id == issuable.project.id
@updates[:add_label_ids] = issue.labels.map(&:id) @updates[:add_label_ids] = source_issuable.labels.map(&:id)
@updates[:milestone_id] = issue.milestone.id if issue.milestone @updates[:milestone_id] = source_issuable.milestone.id if source_issuable.milestone
end end
end end
......
--- ---
title: Add Inherit quick action title: Add Copy metadata quick action
merge_request: 16473 merge_request: 16473
author: Mateusz Bajorski author: Mateusz Bajorski
type: added type: added
...@@ -41,4 +41,4 @@ do. ...@@ -41,4 +41,4 @@ do.
| `/move path/to/project` | Moves issue to another project | | `/move path/to/project` | Moves issue to another project |
| `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` | | `/tableflip` | Append the comment with `(╯°□°)╯︵ ┻━┻` |
| `/shrug` | Append the comment with `¯\_(ツ)_/¯` | | `/shrug` | Append the comment with `¯\_(ツ)_/¯` |
| <code>/copy_metadata &lt; #issue &#124; !merge_request &gt;</code> | copy_metadata labels and milestone from other issue or merge request | | <code>/copy_metadata &lt; #issue &#124; !merge_request &gt;</code> | Copy labels and milestone from other issue or merge request |
...@@ -308,15 +308,15 @@ describe QuickActions::InterpretService do ...@@ -308,15 +308,15 @@ describe QuickActions::InterpretService do
shared_examples 'copy_metadata command' do shared_examples 'copy_metadata command' do
it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do it 'fetches issue or merge request and copies labels and milestone if content contains /copy_metadata reference' do
issueable_father # populate the issue source_issuable # populate the issue
todo_label # populate this label todo_label # populate this label
inreview_label # populate this label inreview_label # populate this label
_, updates = service.execute(content, issuable) _, updates = service.execute(content, issuable)
expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id]) expect(updates[:add_label_ids]).to match_array([inreview_label.id, todo_label.id])
if issueable_father.milestone if source_issuable.milestone
expect(updates[:milestone_id]).to eq(issueable_father.milestone.id) expect(updates[:milestone_id]).to eq(source_issuable.milestone.id)
else else
expect(updates).not_to have_key(:milestone_id) expect(updates).not_to have_key(:milestone_id)
end end
...@@ -768,17 +768,17 @@ describe QuickActions::InterpretService do ...@@ -768,17 +768,17 @@ describe QuickActions::InterpretService do
end end
it_behaves_like 'copy_metadata command' do it_behaves_like 'copy_metadata command' do
let(:issueable_father) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) } let(:source_issuable) { create(:labeled_issue, project: project, labels: [inreview_label, todo_label]) }
let(:content) { "/copy_metadata #{issueable_father.to_reference}" } let(:content) { "/copy_metadata #{source_issuable.to_reference}" }
let(:issuable) { issue } let(:issuable) { issue }
end end
context 'when the parent issueable has a milestone' do context 'when the parent issuable has a milestone' do
it_behaves_like 'copy_metadata command' do it_behaves_like 'copy_metadata command' do
let(:issueable_father) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) } let(:source_issuable) { create(:labeled_issue, project: project, labels: [todo_label, inreview_label], milestone: milestone) }
let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" }
let(:issuable) { issue } let(:issuable) { issue }
end end
end end
...@@ -786,8 +786,8 @@ describe QuickActions::InterpretService do ...@@ -786,8 +786,8 @@ describe QuickActions::InterpretService do
context 'cross project references' do context 'cross project references' do
it_behaves_like 'empty command' do it_behaves_like 'empty command' do
let(:other_project) { create(:project, :public) } let(:other_project) { create(:project, :public) }
let(:issueable_father) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) } let(:source_issuable) { create(:labeled_issue, project: other_project, labels: [todo_label, inreview_label]) }
let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" }
let(:issuable) { issue } let(:issuable) { issue }
end end
...@@ -798,9 +798,9 @@ describe QuickActions::InterpretService do ...@@ -798,9 +798,9 @@ describe QuickActions::InterpretService do
it_behaves_like 'empty command' do it_behaves_like 'empty command' do
let(:other_project) { create(:project, :private) } let(:other_project) { create(:project, :private) }
let(:issueable_father) { create(:issue, project: other_project) } let(:source_issuable) { create(:issue, project: other_project) }
let(:content) { "/copy_metadata #{issueable_father.to_reference(project)}" } let(:content) { "/copy_metadata #{source_issuable.to_reference(project)}" }
let(:issuable) { issue } let(:issuable) { issue }
end end
end end
......
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