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

Rewrite references in issue description when moving it

parent 5ed8a1e1
No related branches found
No related tags found
1 merge request!2831Ability to move issue to another project
Loading
@@ -45,7 +45,8 @@ module Issues
Loading
@@ -45,7 +45,8 @@ module Issues
end end
   
def open_new_issue def open_new_issue
@issue_new.update(project: @project_new) new_description = rewrite_references(@issue_old, @issue_old.description)
@issue_new.update(project: @project_new, description: new_description)
end end
   
def rewrite_notes def rewrite_notes
Loading
@@ -69,5 +70,19 @@ module Issues
Loading
@@ -69,5 +70,19 @@ module Issues
def add_moved_to_note def add_moved_to_note
SystemNoteService.noteable_moved(:to, @issue_old, @project_old, @issue_new, @current_user) SystemNoteService.noteable_moved(:to, @issue_old, @project_old, @issue_new, @current_user)
end end
def rewrite_references(mentionable, text)
new_content = text.dup
references = mentionable.all_references
[:issues, :merge_requests, :milestones].each do |type|
references.public_send(type).each do |mentioned|
new_content.gsub!(mentioned.to_reference,
mentioned.to_reference(@project_new))
end
end
new_content
end
end end
end end
Loading
@@ -4,8 +4,8 @@ describe Issues::MoveService, services: true do
Loading
@@ -4,8 +4,8 @@ describe Issues::MoveService, services: true do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:title) { 'Some issue' } let(:title) { 'Some issue' }
let(:description) { 'Some issue description' } let(:description) { 'Some issue description' }
let(:old_issue) { create(:issue, title: title, description: description) } let(:old_project) { create(:project) }
let(:old_project) { old_issue.project } let(:old_issue) { create(:issue, title: title, description: description, project: old_project) }
let(:new_project) { create(:project) } let(:new_project) { create(:project) }
let(:move_service) { described_class.new(old_project, user, move_params, old_issue) } let(:move_service) { described_class.new(old_project, user, move_params, old_issue) }
   
Loading
@@ -61,13 +61,12 @@ describe Issues::MoveService, services: true do
Loading
@@ -61,13 +61,12 @@ describe Issues::MoveService, services: true do
expect(old_issue.closed?).to be true expect(old_issue.closed?).to be true
end end
   
it 'persists changes to old and new issue' do it 'persists new issue' do
expect(new_issue.changed?).to be false expect(new_issue.persisted?).to be true
expect(old_issue.changed?).to be false
end end
end end
   
context 'notes exist' do context 'issue with notes' do
let(:note_contents) do let(:note_contents) do
['Some system note 1', 'Some comment', 'Some system note 2'] ['Some system note 1', 'Some comment', 'Some system note 2']
end end
Loading
@@ -91,6 +90,20 @@ describe Issues::MoveService, services: true do
Loading
@@ -91,6 +90,20 @@ describe Issues::MoveService, services: true do
expect(new_notes.last).to match /^Moved from/ expect(new_notes.last).to match /^Moved from/
end end
end end
describe 'rewritting references' do
include_context 'issue move executed'
context 'issue reference' do
let(:another_issue) { create(:issue, project: old_project) }
let(:description) { "Some description #{another_issue.to_reference}" }
it 'rewrites referenced issues creating cross project reference' do
expect(new_issue.description)
.to eq "Some description #{old_project.to_reference}#{another_issue.to_reference}"
end
end
end
end end
end 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