Skip to content
Snippets Groups Projects
Commit 9882802a authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Improve system notes that are added when issue is moved

parent 69b89d4e
No related branches found
No related tags found
1 merge request!2831Ability to move issue to another project
Loading
Loading
@@ -4,6 +4,7 @@ module Issues
@issue_old = issue_old
@issue_new = issue_old.dup
@project_new = project_new
@project_old = @project
 
open_new_issue
rewrite_notes
Loading
Loading
@@ -33,10 +34,11 @@ module Issues
end
 
def add_note_moved_from
SystemNoteService.noteable_moved(:from, @issue_new, @project_new, @issue_old, @current_user)
end
 
def add_note_moved_to
SystemNoteService.issue_moved_to_another_project(@issue_old, @project, @project_new, @current_user)
SystemNoteService.noteable_moved(:to, @issue_old, @project_old, @issue_new, @current_user)
end
end
end
Loading
Loading
@@ -3,6 +3,7 @@
# Used for creating system notes (e.g., when a user references a merge request
# from an issue, an issue's assignee changes, an issue is closed, etc.)
class SystemNoteService
extend GitlabMarkdownHelper
# Called when commits are added to a Merge Request
#
# noteable - Noteable object
Loading
Loading
@@ -388,20 +389,26 @@ class SystemNoteService
create_note(noteable: noteable, project: project, author: author, note: body)
end
 
# Called when issue has been moved to another project
# Called when noteable has been moved to another project
#
# issue - Issue that has been moved to another project
# project_from - Source project of the issue
# project_to - Destination project for the issue
# author - User performing the move
# direction - symbol, :to or :from
# noteable - Noteable object
# noteable_ref - Referenced noteable
# author - User performing the move
#
# Example Note text:
#
# "This issue has been moved to SomeNamespace / SomeProject"
# "Moved to project_new/#11"
#
# Returns the created Note object
def self.issue_moved_to_another_project(issue, project_from, project_to, author)
body = "This issue has been moved to #{project_to.to_reference} by #{author.to_reference}"
create_note(noteable: issue, project: project_from, author: author, note: body)
def self.noteable_moved(direction, noteable, project, noteable_ref, author)
unless [:to, :from].include?(direction)
raise StandardError, "Invalid direction `#{direction}`"
end
cross_reference = cross_project_reference(noteable_ref.project, noteable_ref)
body = "Moved #{direction} #{cross_reference}"
create_note(noteable: noteable, project: project, author: author, note: body)
end
end
Loading
Loading
@@ -20,7 +20,11 @@ describe Issues::MoveService, services: true do
end
 
it 'should add system note to old issue' do
expect(issue.notes.last.note).to match /This issue has been moved to/
expect(issue.notes.last.note).to match /^Moved to/
end
it 'should add system note to new issue' do
expect(new_issue.notes.last.note).to match /^Moved from/
end
end
end
Loading
Loading
@@ -441,23 +441,56 @@ describe SystemNoteService, services: true do
end
end
 
describe '.issue_moved_to_another_project' do
describe '.noteable_moved' do
let(:new_project) { create(:project) }
let(:new_noteable) { create(:issue, project: new_project) }
subject do
described_class.issue_moved_to_another_project(noteable, project, new_project, author)
described_class.noteable_moved(direction, noteable, project, new_noteable, author)
end
 
let(:new_project) { create(:project) }
shared_examples 'cross project mentionable' do
include GitlabMarkdownHelper
it 'should contain cross reference to new noteable' do
expect(subject.note).to include cross_project_reference(new_project, new_noteable)
end
it 'should mention referenced noteable' do
expect(subject.note).to include new_noteable.to_reference
end
it 'should mention referenced project' do
expect(subject.note).to include new_project.to_reference
end
end
context 'moved to' do
let(:direction) { :to }
it_behaves_like 'cross project mentionable'
 
it 'should notify about issue being moved' do
expect(subject.note).to match /This issue has been moved to/
it 'should notify about noteable being moved to' do
expect(subject.note).to match /Moved to/
end
end
 
it 'should mention destination project' do
expect(subject.note).to include new_project.to_reference
context 'moved from' do
let(:direction) { :from }
it_behaves_like 'cross project mentionable'
it 'should notify about noteable being moved from' do
expect(subject.note).to match /Moved from/
end
end
 
it 'should mention author of that change' do
expect(subject.note).to include author.to_reference
context 'invalid direction' do
let (:direction) { :invalid }
it 'should raise error' do
expect { subject }.to raise_error StandardError, /Invalid direction/
end
end
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment