Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/issues/move_service_spec.rb')
-rw-r--r--spec/services/issues/move_service_spec.rb66
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