diff options
Diffstat (limited to 'spec/services/issues/move_service_spec.rb')
-rw-r--r-- | spec/services/issues/move_service_spec.rb | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 8929907a179..5f944d1213b 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -3,15 +3,15 @@ require 'spec_helper' RSpec.describe Issues::MoveService do - let(:user) { create(:user) } - let(:author) { create(:user) } - let(:title) { 'Some issue' } - let(:description) { "Some issue description with mention to #{user.to_reference}" } - let(:group) { create(:group, :private) } - let(:sub_group_1) { create(:group, :private, parent: group) } - let(:sub_group_2) { create(:group, :private, parent: group) } - let(:old_project) { create(:project, namespace: sub_group_1) } - let(:new_project) { create(:project, namespace: sub_group_2) } + let_it_be(:user) { create(:user) } + let_it_be(:author) { create(:user) } + let_it_be(:title) { 'Some issue' } + let_it_be(:description) { "Some issue description with mention to #{user.to_reference}" } + let_it_be(:group) { create(:group, :private) } + let_it_be(:sub_group_1) { create(:group, :private, parent: group) } + let_it_be(:sub_group_2) { create(:group, :private, parent: group) } + let_it_be(:old_project) { create(:project, namespace: sub_group_1) } + let_it_be(:new_project) { create(:project, namespace: sub_group_2) } let(:old_issue) do create(:issue, title: title, description: description, project: old_project, author: author) @@ -30,15 +30,10 @@ RSpec.describe Issues::MoveService do describe '#execute' do shared_context 'issue move executed' do - let!(:award_emoji) { create(:award_emoji, awardable: old_issue) } - let!(:new_issue) { move_service.execute(old_issue, new_project) } end context 'issue movable' do - let!(:note_with_mention) { create(:note, noteable: old_issue, author: author, project: old_project, note: "note with mention #{user.to_reference}") } - let!(:note_with_no_mention) { create(:note, noteable: old_issue, author: author, project: old_project, note: "note without mention") } - include_context 'user can move issue' context 'generic issue' do @@ -48,11 +43,11 @@ RSpec.describe Issues::MoveService do expect(new_issue.project).to eq new_project end - it 'rewrites issue title' do + it 'copies issue title' do expect(new_issue.title).to eq title end - it 'rewrites issue description' do + it 'copies issue description' do expect(new_issue.description).to eq description end @@ -93,23 +88,21 @@ RSpec.describe Issues::MoveService do it 'preserves create time' do expect(old_issue.created_at).to eq new_issue.created_at end + end - it 'moves the award emoji' do - expect(old_issue.award_emoji.first.name).to eq new_issue.reload.award_emoji.first.name - end + context 'issue with award emoji' do + let!(:award_emoji) { create(:award_emoji, awardable: old_issue) } - context 'when issue has notes with mentions' do - it 'saves user mentions with actual mentions for new issue' do - expect(new_issue.user_mentions.find_by(note_id: nil).mentioned_users_ids).to match_array([user.id]) - expect(new_issue.user_mentions.where.not(note_id: nil).first.mentioned_users_ids).to match_array([user.id]) - expect(new_issue.user_mentions.where.not(note_id: nil).count).to eq 1 - expect(new_issue.user_mentions.count).to eq 2 - end + it 'copies the award emoji' do + old_issue.reload + new_issue = move_service.execute(old_issue, new_project) + + expect(old_issue.award_emoji.first.name).to eq new_issue.reload.award_emoji.first.name end end context 'issue with assignee' do - let(:assignee) { create(:user) } + let_it_be(:assignee) { create(:user) } before do old_issue.assignees = [assignee] @@ -154,6 +147,25 @@ RSpec.describe Issues::MoveService do .not_to raise_error # Sidekiq::Worker::EnqueueFromTransactionError end end + + # These tests verify that notes are copied. More thorough tests are in + # the unit test for Notes::CopyService. + context 'issue with notes' do + let!(:notes) do + [ + create(:note, noteable: old_issue, project: old_project, created_at: 2.weeks.ago, updated_at: 1.week.ago), + create(:note, noteable: old_issue, project: old_project) + ] + end + + let(:copied_notes) { new_issue.notes.limit(notes.size) } # Remove the system note added by the copy itself + + include_context 'issue move executed' + + it 'copies existing notes in order' do + expect(copied_notes.order('id ASC').pluck(:note)).to eq(notes.map(&:note)) + end + end end describe 'move permissions' do |