From b53d9f8a0ec6c044548fa21a04ba227a0c46d43a Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Mon, 15 Feb 2016 14:41:40 +0100
Subject: [PATCH] Add scaffold of service that moves issue to another project

---
 app/services/issues/move_service.rb       | 41 +++++++++++++++++++++++
 spec/services/issues/move_service_spec.rb | 22 ++++++++++++
 2 files changed, 63 insertions(+)
 create mode 100644 app/services/issues/move_service.rb
 create mode 100644 spec/services/issues/move_service_spec.rb

diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb
new file mode 100644
index 00000000000..85c0d6192e4
--- /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 00000000000..27081e76d48
--- /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
-- 
GitLab