From 247ae960552acc8cd3be299dbb10ed61d8dafe75 Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Tue, 26 Apr 2016 23:20:19 +0700 Subject: Allow to assign labels and milestone to target project when moving issue --- app/services/issues/move_service.rb | 11 ++++++++++- spec/services/issues/move_service_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 82e7090f1ea..8d41ea5df55 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -41,7 +41,8 @@ module Issues private def create_new_issue - new_params = { id: nil, iid: nil, label_ids: [], milestone: nil, + new_params = { id: nil, iid: nil, label_ids: cloneable_label_ids, + milestone: cloneable_milestone_id, project: @new_project, author: @old_issue.author, description: rewrite_content(@old_issue.description) } @@ -49,6 +50,14 @@ module Issues CreateService.new(@new_project, @current_user, new_params).execute end + def cloneable_label_ids + @new_project.labels.where(title: @old_issue.labels.pluck(:title)).pluck(:id) + end + + def cloneable_milestone_id + @new_project.milestones.find_by(title: @old_issue.milestone.try(:title)) + end + def rewrite_notes @old_issue.notes.find_each do |note| new_note = note.dup diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 2a5e4ac3ec4..c98e60d76b3 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -21,6 +21,15 @@ describe Issues::MoveService, services: true do before do old_project.team << [user, :reporter] new_project.team << [user, :reporter] + + create(:milestone, project_id: old_project.id, title: 'v1.0') + create(:milestone, project_id: new_project.id, title: 'v1.0') + + old_issue.labels << create(:label, project_id: old_project.id, title: 'label1') + old_issue.labels << create(:label, project_id: old_project.id, title: 'label2') + + new_project.labels << create(:label, title: 'label1') + new_project.labels << create(:label, title: 'label2') end end @@ -39,6 +48,17 @@ describe Issues::MoveService, services: true do expect(new_issue.project).to eq new_project end + it 'assigns milestone to new issue' do + expect(new_issue.reload.milestone.title).to eq 'v1.0' + end + + it 'assign labels to new issue' do + expected_label_titles = new_issue.reload.labels.map(&:title) + expect(expected_label_titles).to include 'label1' + expect(expected_label_titles).to include 'label2' + expect(expected_label_titles.size).to eq 2 + end + it 'rewrites issue title' do expect(new_issue.title).to eq title end -- cgit v1.2.1 From d6d1daf430bbadef953b40975a503e0bb64044fc Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Wed, 27 Apr 2016 00:03:09 +0700 Subject: Update specs --- spec/services/issues/move_service_spec.rb | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index c98e60d76b3..7654b255697 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -7,10 +7,11 @@ describe Issues::MoveService, services: true do let(:description) { 'Some issue description' } let(:old_project) { create(:project) } let(:new_project) { create(:project) } + let!(:milestone1) { create(:milestone, project_id: old_project.id, title: 'v9.0') } let(:old_issue) do create(:issue, title: title, description: description, - project: old_project, author: author) + project: old_project, author: author, milestone: milestone1) end let(:move_service) do @@ -22,8 +23,7 @@ describe Issues::MoveService, services: true do old_project.team << [user, :reporter] new_project.team << [user, :reporter] - create(:milestone, project_id: old_project.id, title: 'v1.0') - create(:milestone, project_id: new_project.id, title: 'v1.0') + create(:milestone, project_id: new_project.id, title: 'v9.0') old_issue.labels << create(:label, project_id: old_project.id, title: 'label1') old_issue.labels << create(:label, project_id: old_project.id, title: 'label2') @@ -49,7 +49,7 @@ describe Issues::MoveService, services: true do end it 'assigns milestone to new issue' do - expect(new_issue.reload.milestone.title).to eq 'v1.0' + expect(new_issue.reload.milestone.title).to eq 'v9.0' end it 'assign labels to new issue' do @@ -92,11 +92,6 @@ describe Issues::MoveService, services: true do expect(new_issue.author).to eq author end - it 'removes data that is invalid in new context' do - expect(new_issue.milestone).to be_nil - expect(new_issue.labels).to be_empty - end - it 'creates a new internal id for issue' do expect(new_issue.iid).to be 1 end -- cgit v1.2.1 From f7844a11be6a5f6aa7011bd96f59bf218c4788ea Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Thu, 28 Apr 2016 15:52:23 +0700 Subject: Code refactor and fix broken spec --- app/services/issues/move_service.rb | 8 +++++--- spec/services/issues/move_service_spec.rb | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 8d41ea5df55..fe5df8f18cb 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -42,7 +42,7 @@ module Issues def create_new_issue new_params = { id: nil, iid: nil, label_ids: cloneable_label_ids, - milestone: cloneable_milestone_id, + milestone_id: cloneable_milestone_id, project: @new_project, author: @old_issue.author, description: rewrite_content(@old_issue.description) } @@ -51,11 +51,13 @@ module Issues end def cloneable_label_ids - @new_project.labels.where(title: @old_issue.labels.pluck(:title)).pluck(:id) + @new_project.labels + .where(title: @old_issue.labels.pluck(:title)).pluck(:id) end def cloneable_milestone_id - @new_project.milestones.find_by(title: @old_issue.milestone.try(:title)) + @new_project.milestones + .find_by(title: @old_issue.milestone.try(:title)).try(:id) end def rewrite_notes diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 7654b255697..62a5e93037e 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -7,7 +7,9 @@ describe Issues::MoveService, services: true do let(:description) { 'Some issue description' } let(:old_project) { create(:project) } let(:new_project) { create(:project) } - let!(:milestone1) { create(:milestone, project_id: old_project.id, title: 'v9.0') } + let!(:milestone1) do + create(:milestone, project_id: old_project.id, title: 'v9.0') + end let(:old_issue) do create(:issue, title: title, description: description, @@ -23,10 +25,12 @@ describe Issues::MoveService, services: true do old_project.team << [user, :reporter] new_project.team << [user, :reporter] - create(:milestone, project_id: new_project.id, title: 'v9.0') - - old_issue.labels << create(:label, project_id: old_project.id, title: 'label1') - old_issue.labels << create(:label, project_id: old_project.id, title: 'label2') + ['label1', 'label2'].each do |label| + old_issue.labels << create(:label, + project_id: old_project.id, + title: label + ) + end new_project.labels << create(:label, title: 'label1') new_project.labels << create(:label, title: 'label2') @@ -35,6 +39,10 @@ describe Issues::MoveService, services: true do describe '#execute' do shared_context 'issue move executed' do + let!(:milestone2) do + create(:milestone, project_id: new_project.id, title: 'v9.0') + end + let!(:new_issue) { move_service.execute(old_issue, new_project) } end -- cgit v1.2.1 From 81467d2e04562d63249063113bdd61d4ad16da7d Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Thu, 28 Apr 2016 16:21:41 +0700 Subject: Fix rubocop --- spec/services/issues/move_service_spec.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 62a5e93037e..7399003bd75 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -28,8 +28,7 @@ describe Issues::MoveService, services: true do ['label1', 'label2'].each do |label| old_issue.labels << create(:label, project_id: old_project.id, - title: label - ) + title: label) end new_project.labels << create(:label, title: 'label1') -- cgit v1.2.1 From ced6563121851d95cd156ee486476469acdd6469 Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Thu, 28 Apr 2016 16:41:35 +0700 Subject: Add changelog --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 558897ad892..c6c96c096c8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.8.0 (unreleased) + - Assign labels and milestone to target project when moving issue - Remove future dates from contribution calendar graph. - Fix error when visiting commit builds page before build was updated - Add 'l' shortcut to open Label dropdown on issuables and 'i' to create new issue on a project -- cgit v1.2.1 From f43044cc8abb23f391f635e145b52cf5a54a0058 Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Thu, 28 Apr 2016 16:43:21 +0700 Subject: Update changelog --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index c6c96c096c8..2d3a9e051e5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.8.0 (unreleased) - - Assign labels and milestone to target project when moving issue + - Assign labels and milestone to target project when moving issue. !3934 - Remove future dates from contribution calendar graph. - Fix error when visiting commit builds page before build was updated - Add 'l' shortcut to open Label dropdown on issuables and 'i' to create new issue on a project -- cgit v1.2.1 From 91f693c0c4f1ebb62d78e6c82b833f8a19c4dc62 Mon Sep 17 00:00:00 2001 From: Long Nguyen Date: Thu, 5 May 2016 13:59:09 +0700 Subject: Update changelog, improve specs --- CHANGELOG | 2 +- app/services/issues/move_service.rb | 2 +- spec/services/issues/move_service_spec.rb | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2d3a9e051e5..27c89a7c1ec 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.8.0 (unreleased) - - Assign labels and milestone to target project when moving issue. !3934 + - Assign labels and milestone to target project when moving issue. !3934 (Long Nguyen) - Remove future dates from contribution calendar graph. - Fix error when visiting commit builds page before build was updated - Add 'l' shortcut to open Label dropdown on issuables and 'i' to create new issue on a project diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index fe5df8f18cb..e61628086f0 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -46,7 +46,7 @@ module Issues project: @new_project, author: @old_issue.author, description: rewrite_content(@old_issue.description) } - new_params = @old_issue.serializable_hash.merge(new_params) + new_params = @old_issue.serializable_hash.symbolize_keys.merge(new_params) CreateService.new(@new_project, @current_user, new_params).execute end diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 7399003bd75..c15e26189a5 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -7,9 +7,7 @@ describe Issues::MoveService, services: true do let(:description) { 'Some issue description' } let(:old_project) { create(:project) } let(:new_project) { create(:project) } - let!(:milestone1) do - create(:milestone, project_id: old_project.id, title: 'v9.0') - end + let(:milestone1) { create(:milestone, project_id: old_project.id, title: 'v9.0') } let(:old_issue) do create(:issue, title: title, description: description, @@ -57,6 +55,7 @@ describe Issues::MoveService, services: true do it 'assigns milestone to new issue' do expect(new_issue.reload.milestone.title).to eq 'v9.0' + expect(new_issue.reload.milestone).to eq(milestone2) end it 'assign labels to new issue' do @@ -64,6 +63,11 @@ describe Issues::MoveService, services: true do expect(expected_label_titles).to include 'label1' expect(expected_label_titles).to include 'label2' expect(expected_label_titles.size).to eq 2 + + new_issue.labels.each do |label| + expect(new_project.labels).to include(label) + expect(old_project.labels).not_to include(label) + end end it 'rewrites issue title' do -- cgit v1.2.1