Commit a23f0e8c authored by Grzegorz Bizon's avatar Grzegorz Bizon

Reuse existing issue services when moving issue

parent 93812f25
module Issues
class CloseService < Issues::BaseService
def execute(issue, commit = nil)
def execute(issue, commit = nil, notifications: true, system_note: true)
if project.jira_tracker? && project.jira_service.active
project.jira_service.execute(commit, issue)
todo_service.close_issue(issue, current_user)
......@@ -9,8 +9,8 @@ module Issues
if project.default_issues_tracker? && issue.close
event_service.close_issue(issue, current_user)
create_note(issue, commit)
notification_service.close_issue(issue, current_user)
create_note(issue, commit) if system_note
notification_service.close_issue(issue, current_user) if notifications
todo_service.close_issue(issue, current_user)
execute_hooks(issue, 'close')
end
......
module Issues
class CreateService < Issues::BaseService
def execute
def execute(set_author: true)
filter_params
label_params = params[:label_ids]
issue = project.issues.new(params.except(:label_ids))
issue.author = current_user
issue.author = current_user if set_author
if issue.save
issue.update_attributes(label_ids: label_params)
......
......@@ -4,14 +4,20 @@ module Issues
super(project, current_user, params)
@issue_old = issue
@issue_new = issue.dup
@issue_new = nil
@project_old = @project
if new_project_id
@project_new = Project.find(new_project_id)
end
end
def execute
return unless move?
# Using trasaction because of a high footprint on
# rewriting notes (unfolding references)
#
ActiveRecord::Base.transaction do
# New issue tasks
#
......@@ -25,10 +31,7 @@ module Issues
close_old_issue
end
# Notifications and hooks
#
# notify_participants
# trigger_hooks_and_events
notify_participants
@issue_new
end
......@@ -45,20 +48,14 @@ module Issues
end
def create_new_issue
@issue_new.project = @project_new
# Reset internal ID, will be regenerated before save
#
@issue_new.iid = nil
new_params = { id: nil, iid: nil, milestone: nil, label_ids: [],
project: @project_new, author: @issue_old.author,
description: rewrite_references(@issue_old) }
# Reset labels and milestones, as those are not valid in context
# of a new project
#
@issue_new.labels = []
@issue_new.milestone = nil
create_service = CreateService.new(@project_new, @current_user,
params.merge(new_params))
@issue_new.description = rewrite_references(@issue_old)
@issue_new.save!
@issue_new = create_service.execute(set_author: false)
end
def rewrite_notes
......@@ -72,7 +69,8 @@ module Issues
end
def close_old_issue
@issue_old.update(state: :closed)
close_service = CloseService.new(@project_new, @current_user)
close_service.execute(@issue_old, notifications: false, system_note: false)
end
def add_moved_from_note
......@@ -93,30 +91,14 @@ module Issues
def noteable_content(noteable)
case noteable
when Issue
noteable.description
when Note
noteable.note
when Issue then noteable.description
when Note then noteable.note
else
raise 'Unexpected noteable while moving an issue'
end
raise 'Unexpected noteable while moving an issue!'
end
def trigger_hooks_and_events
event_service.close_issue(@issue_old, @current_user)
event_service.open_issue(@issue_new, @current_user)
@issue_new.create_cross_references!(@current_user)
execute_hooks(@issue_old, 'close')
execute_hooks(@issue_new, 'open')
end
def notify_participants
todo_service.close_issue(@issue_old, @current_user)
todo_service.open_issue(@issue_new, @current_user)
notification_service.issue_moved(@issue_old, @issue_new, @current_user)
end
end
end
......@@ -236,14 +236,6 @@ class NotificationService
end
end
def issue_moved(issue, old_project, new_project, current_user)
recipients = build_recipients(issue, old_project, current_user)
recipients.each do |recipient|
mailer.send('issue_moved', recipient.id, issue.id, current_user.id).deliver_later
end
end
protected
# Get project users with WATCH notification level
......
......@@ -76,7 +76,7 @@ describe Issues::MoveService, services: true do
it 'persists all changes' do
expect(old_issue.changed?).to be false
expect(new_issue.persisted?).to be true
expect(new_issue.changed?).to be false
end
it 'preserves author' 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