Commit 310b417b authored by Grzegorz Bizon's avatar Grzegorz Bizon

Preserve original author when moving issue

This also wrapps entire process into transation, as rewriting references
may have large memory footprint.
parent 4354bfab
...@@ -4,7 +4,7 @@ module Issues ...@@ -4,7 +4,7 @@ module Issues
super(project, current_user, params) super(project, current_user, params)
@issue_old = issue @issue_old = issue
@issue_new = nil @issue_new = issue.dup
@project_old = @project @project_old = @project
@project_new = Project.find(new_project_id) if new_project_id @project_new = Project.find(new_project_id) if new_project_id
end end
...@@ -12,6 +12,7 @@ module Issues ...@@ -12,6 +12,7 @@ module Issues
def execute def execute
return unless move? return unless move?
ActiveRecord::Base.transaction do
# New issue tasks # New issue tasks
# #
open_new_issue open_new_issue
...@@ -22,6 +23,7 @@ module Issues ...@@ -22,6 +23,7 @@ module Issues
# #
add_moved_to_note add_moved_to_note
close_old_issue close_old_issue
end
# Notifications # Notifications
# #
...@@ -42,16 +44,12 @@ module Issues ...@@ -42,16 +44,12 @@ module Issues
end end
def open_new_issue def open_new_issue
create_service = CreateService.new(@project_new, current_user, new_issue_params) @issue_new.iid = nil
@issue_new = create_service.execute @issue_new.project = @project_new
end @issue_new.labels = []
@issue_new.milestone = nil
def new_issue_params @issue_new.description = rewrite_references(@issue_old)
new_params = { id: nil, iid: nil, milestone_id: nil, label_ids: [], @issue_new.save!
project_id: @project_new.id,
description: rewrite_references(@issue_old) }
params.merge(new_params)
end end
def rewrite_notes def rewrite_notes
......
...@@ -74,13 +74,13 @@ describe Issues::MoveService, services: true do ...@@ -74,13 +74,13 @@ describe Issues::MoveService, services: true do
expect(new_issue.persisted?).to be true expect(new_issue.persisted?).to be true
end end
it 'persist all changes' do it 'persists all changes' do
expect(old_issue.changed?).to be false expect(old_issue.changed?).to be false
expect(new_issue.changed?).to be false expect(new_issue.persisted?).to be true
end end
it 'changes author' do it 'preserves author' do
expect(new_issue.author).to eq user expect(new_issue.author).to eq author
end end
it 'removes data that is invalid in new context' do it 'removes data that is invalid in new context' do
......
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