diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-11 21:06:15 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-11 21:06:15 +0300 |
commit | 0dfbcd8f8b1587a7e10eb79940a8dc13bd72c664 (patch) | |
tree | 769b7b5eaea4354498ca0b91945e4733895bba43 /spec/services/notes | |
parent | cd631619f465a0eee2fe714e720f6b6312dd3e56 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/notes')
-rw-r--r-- | spec/services/notes/update_service_spec.rb | 94 |
1 files changed, 82 insertions, 12 deletions
diff --git a/spec/services/notes/update_service_spec.rb b/spec/services/notes/update_service_spec.rb index 717eb97fa5a..73fcdd787aa 100644 --- a/spec/services/notes/update_service_spec.rb +++ b/spec/services/notes/update_service_spec.rb @@ -3,17 +3,25 @@ require 'spec_helper' describe Notes::UpdateService do - let(:project) { create(:project) } + let(:group) { create(:group, :public) } + let(:project) { create(:project, :public, group: group) } + let(:private_group) { create(:group, :private) } + let(:private_project) { create(:project, :private, group: private_group) } let(:user) { create(:user) } let(:user2) { create(:user) } let(:user3) { create(:user) } let(:issue) { create(:issue, project: project) } + let(:issue2) { create(:issue, project: private_project) } let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{user2.to_reference}") } before do project.add_maintainer(user) project.add_developer(user2) project.add_developer(user3) + group.add_developer(user3) + private_group.add_developer(user) + private_group.add_developer(user2) + private_project.add_developer(user3) end describe '#execute' do @@ -46,13 +54,17 @@ describe Notes::UpdateService do end context 'todos' do - let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) } + shared_examples 'does not update todos' do + it 'keep todos' do + expect(todo.reload).to be_pending + end - context 'when the note change' do - before do - update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" }) + it 'does not create any new todos' do + expect(Todo.count).to eq(1) end + end + shared_examples 'creates one todo' do it 'marks todos as done' do expect(todo.reload).to be_done end @@ -62,17 +74,75 @@ describe Notes::UpdateService do end end - context 'when the note does not change' do - before do - update_note({ note: "Old note #{user2.to_reference}" }) + context 'when note includes a user mention' do + let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) } + + context 'when the note does not change mentions' do + before do + update_note({ note: "Old note #{user2.to_reference}" }) + end + + it_behaves_like 'does not update todos' end - it 'keep todos' do - expect(todo.reload).to be_pending + context 'when the note changes to include one more user mention' do + before do + update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" }) + end + + it_behaves_like 'creates one todo' end - it 'does not create any new todos' do - expect(Todo.count).to eq(1) + context 'when the note changes to include a group mentions' do + before do + update_note({ note: "New note #{private_group.to_reference}" }) + end + + it_behaves_like 'creates one todo' + end + end + + context 'when note includes a group mention' do + context 'when the group is public' do + let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{group.to_reference}") } + let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) } + + context 'when the note does not change mentions' do + before do + update_note({ note: "Old note #{group.to_reference}" }) + end + + it_behaves_like 'does not update todos' + end + + context 'when the note changes mentions' do + before do + update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" }) + end + + it_behaves_like 'creates one todo' + end + end + + context 'when the group is private' do + let(:note) { create(:note, project: project, noteable: issue, author: user, note: "Old note #{private_group.to_reference}") } + let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) } + + context 'when the note does not change mentions' do + before do + update_note({ note: "Old note #{private_group.to_reference}" }) + end + + it_behaves_like 'does not update todos' + end + + context 'when the note changes mentions' do + before do + update_note({ note: "New note #{user2.to_reference} #{user3.to_reference}" }) + end + + it_behaves_like 'creates one todo' + end end end end |