diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..85c0d6192e4ef3e8a50bf7e3abbde539c22bf82d --- /dev/null +++ b/app/services/issues/move_service.rb @@ -0,0 +1,41 @@ +module Issues + class MoveService < Issues::BaseService + def execute(issue_old, project_new) + @issue_old = issue_old + @issue_new = issue_old.dup + @project_new = project_new + + open_new_issue + rewrite_notes + close_old_issue + notify_participants + + @issue_new + end + + private + + def open_new_issue + @issue_new.project = @project_new + @issue_new.save! + + add_note_moved_from + end + + def rewrite_notes + end + + def close_old_issue + add_note_moved_to + end + + def notify_participants + end + + def add_note_moved_from + end + + def add_note_moved_to + end + end +end diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..27081e76d48b6eb0e1d95a89428ae3835ec21e7a --- /dev/null +++ b/spec/services/issues/move_service_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe Issues::MoveService, services: true do + let(:user) { create(:user) } + let(:issue) { create(:issue, title: 'Some issue', description: 'Some issue description') } + let(:current_project) { issue.project } + let(:new_project) { create(:project) } + + before do + current_project.team << [user, :master] + end + + describe '#execute' do + let!(:new_issue) do + described_class.new(current_project, user).execute(issue, new_project) + end + + it 'should create a new issue in a new project' do + expect(new_issue.project).to eq new_project + end + end +end