diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 13:37:47 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 13:37:47 +0000 |
commit | aee0a117a889461ce8ced6fcf73207fe017f1d99 (patch) | |
tree | 891d9ef189227a8445d83f35c1b0fc99573f4380 /spec/services/issues | |
parent | 8d46af3258650d305f53b819eabf7ab18d22f59e (diff) | |
download | gitlab-ce-aee0a117a889461ce8ced6fcf73207fe017f1d99.tar.gz |
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'spec/services/issues')
-rw-r--r-- | spec/services/issues/create_service_spec.rb | 24 | ||||
-rw-r--r-- | spec/services/issues/set_crm_contacts_service_spec.rb | 88 | ||||
-rw-r--r-- | spec/services/issues/update_service_spec.rb | 14 |
3 files changed, 97 insertions, 29 deletions
diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb index 18e03db11dc..8496bd31e00 100644 --- a/spec/services/issues/create_service_spec.rb +++ b/spec/services/issues/create_service_spec.rb @@ -5,7 +5,8 @@ require 'spec_helper' RSpec.describe Issues::CreateService do include AfterNextHelpers - let_it_be_with_reload(:project) { create(:project) } + let_it_be(:group) { create(:group) } + let_it_be_with_reload(:project) { create(:project, group: group) } let_it_be(:user) { create(:user) } let(:spam_params) { double } @@ -107,6 +108,13 @@ RSpec.describe Issues::CreateService do .to change { Label.where(incident_label_attributes).count }.by(1) end + it 'calls IncidentManagement::Incidents::CreateEscalationStatusService' do + expect_next(::IncidentManagement::IssuableEscalationStatuses::CreateService, a_kind_of(Issue)) + .to receive(:execute) + + issue + end + context 'when invalid' do before do opts.merge!(title: '') @@ -154,7 +162,7 @@ RSpec.describe Issues::CreateService do end it 'moves the issue to the end, in an asynchronous worker' do - expect(IssuePlacementWorker).to receive(:perform_async).with(be_nil, Integer) + expect(Issues::PlacementWorker).to receive(:perform_async).with(be_nil, Integer) described_class.new(project: project, current_user: user, params: opts, spam_params: spam_params).execute end @@ -430,25 +438,29 @@ RSpec.describe Issues::CreateService do end context 'Quick actions' do - context 'with assignee and milestone in params and command' do + context 'with assignee, milestone, and contact in params and command' do + let_it_be(:contact) { create(:contact, group: group) } + let(:opts) do { assignee_ids: [create(:user).id], milestone_id: 1, title: 'Title', - description: %(/assign @#{assignee.username}\n/milestone %"#{milestone.name}") + description: %(/assign @#{assignee.username}\n/milestone %"#{milestone.name}"), + add_contacts: [contact.email] } end before_all do - project.add_maintainer(user) + group.add_maintainer(user) project.add_maintainer(assignee) end - it 'assigns and sets milestone to issuable from command' do + it 'assigns, sets milestone, and sets contact to issuable from command' do expect(issue).to be_persisted expect(issue.assignees).to eq([assignee]) expect(issue.milestone).to eq(milestone) + expect(issue.issue_customer_relations_contacts.last.contact).to eq(contact) end end end diff --git a/spec/services/issues/set_crm_contacts_service_spec.rb b/spec/services/issues/set_crm_contacts_service_spec.rb index 65b22fe3b35..628f70efad6 100644 --- a/spec/services/issues/set_crm_contacts_service_spec.rb +++ b/spec/services/issues/set_crm_contacts_service_spec.rb @@ -22,13 +22,13 @@ RSpec.describe Issues::SetCrmContactsService do describe '#execute' do context 'when the user has no permission' do - let(:params) { { crm_contact_ids: [contacts[1].id, contacts[2].id] } } + let(:params) { { replace_ids: [contacts[1].id, contacts[2].id] } } it 'returns expected error response' do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array(['You have insufficient permissions to set customer relations contacts for this issue']) + expect(response.message).to eq('You have insufficient permissions to set customer relations contacts for this issue') end end @@ -38,20 +38,20 @@ RSpec.describe Issues::SetCrmContactsService do end context 'when the contact does not exist' do - let(:params) { { crm_contact_ids: [non_existing_record_id] } } + let(:params) { { replace_ids: [non_existing_record_id] } } it 'returns expected error response' do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array(["Issue customer relations contacts #{non_existing_record_id}: #{does_not_exist_or_no_permission}"]) + expect(response.message).to eq("Issue customer relations contacts #{non_existing_record_id}: #{does_not_exist_or_no_permission}") end end context 'when the contact belongs to a different group' do let(:group2) { create(:group) } let(:contact) { create(:contact, group: group2) } - let(:params) { { crm_contact_ids: [contact.id] } } + let(:params) { { replace_ids: [contact.id] } } before do group2.add_reporter(user) @@ -61,12 +61,12 @@ RSpec.describe Issues::SetCrmContactsService do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array(["Issue customer relations contacts #{contact.id}: #{does_not_exist_or_no_permission}"]) + expect(response.message).to eq("Issue customer relations contacts #{contact.id}: #{does_not_exist_or_no_permission}") end end context 'replace' do - let(:params) { { crm_contact_ids: [contacts[1].id, contacts[2].id] } } + let(:params) { { replace_ids: [contacts[1].id, contacts[2].id] } } it 'updates the issue with correct contacts' do response = set_crm_contacts @@ -77,7 +77,18 @@ RSpec.describe Issues::SetCrmContactsService do end context 'add' do - let(:params) { { add_crm_contact_ids: [contacts[3].id] } } + let(:params) { { add_ids: [contacts[3].id] } } + + it 'updates the issue with correct contacts' do + response = set_crm_contacts + + expect(response).to be_success + expect(issue.customer_relations_contacts).to match_array([contacts[0], contacts[1], contacts[3]]) + end + end + + context 'add by email' do + let(:params) { { add_emails: [contacts[3].email] } } it 'updates the issue with correct contacts' do response = set_crm_contacts @@ -88,7 +99,18 @@ RSpec.describe Issues::SetCrmContactsService do end context 'remove' do - let(:params) { { remove_crm_contact_ids: [contacts[0].id] } } + let(:params) { { remove_ids: [contacts[0].id] } } + + it 'updates the issue with correct contacts' do + response = set_crm_contacts + + expect(response).to be_success + expect(issue.customer_relations_contacts).to match_array([contacts[1]]) + end + end + + context 'remove by email' do + let(:params) { { remove_emails: [contacts[0].email] } } it 'updates the issue with correct contacts' do response = set_crm_contacts @@ -100,18 +122,18 @@ RSpec.describe Issues::SetCrmContactsService do context 'when attempting to add more than 6' do let(:id) { contacts[0].id } - let(:params) { { add_crm_contact_ids: [id, id, id, id, id, id, id] } } + let(:params) { { add_ids: [id, id, id, id, id, id, id] } } it 'returns expected error message' do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array(['You can only add up to 6 contacts at one time']) + expect(response.message).to eq('You can only add up to 6 contacts at one time') end end context 'when trying to remove non-existent contact' do - let(:params) { { remove_crm_contact_ids: [non_existing_record_id] } } + let(:params) { { remove_ids: [non_existing_record_id] } } it 'returns expected error message' do response = set_crm_contacts @@ -122,10 +144,10 @@ RSpec.describe Issues::SetCrmContactsService do end context 'when combining params' do - let(:error_invalid_params) { 'You cannot combine crm_contact_ids with add_crm_contact_ids or remove_crm_contact_ids' } + let(:error_invalid_params) { 'You cannot combine replace_ids with add_ids or remove_ids' } context 'add and remove' do - let(:params) { { remove_crm_contact_ids: [contacts[1].id], add_crm_contact_ids: [contacts[3].id] } } + let(:params) { { remove_ids: [contacts[1].id], add_ids: [contacts[3].id] } } it 'updates the issue with correct contacts' do response = set_crm_contacts @@ -136,27 +158,57 @@ RSpec.describe Issues::SetCrmContactsService do end context 'replace and remove' do - let(:params) { { crm_contact_ids: [contacts[3].id], remove_crm_contact_ids: [contacts[0].id] } } + let(:params) { { replace_ids: [contacts[3].id], remove_ids: [contacts[0].id] } } it 'returns expected error response' do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array([error_invalid_params]) + expect(response.message).to eq(error_invalid_params) end end context 'replace and add' do - let(:params) { { crm_contact_ids: [contacts[3].id], add_crm_contact_ids: [contacts[1].id] } } + let(:params) { { replace_ids: [contacts[3].id], add_ids: [contacts[1].id] } } it 'returns expected error response' do response = set_crm_contacts expect(response).to be_error - expect(response.message).to match_array([error_invalid_params]) + expect(response.message).to eq(error_invalid_params) end end end + + context 'when trying to add an existing issue contact' do + let(:params) { { add_ids: [contacts[0].id] } } + + it 'does not return an error' do + response = set_crm_contacts + + expect(response).to be_success + end + end + + context 'when trying to add the same contact twice' do + let(:params) { { add_ids: [contacts[3].id, contacts[3].id] } } + + it 'does not return an error' do + response = set_crm_contacts + + expect(response).to be_success + end + end + + context 'when trying to remove a contact not attached to the issue' do + let(:params) { { remove_ids: [contacts[3].id] } } + + it 'does not return an error' do + response = set_crm_contacts + + expect(response).to be_success + end + end end end end diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb index 85b8fef685e..4739b7e0f28 100644 --- a/spec/services/issues/update_service_spec.rb +++ b/spec/services/issues/update_service_spec.rb @@ -29,6 +29,8 @@ RSpec.describe Issues::UpdateService, :mailer do end describe 'execute' do + let_it_be(:contact) { create(:contact, group: group) } + def find_note(starting_with) issue.notes.find do |note| note && note.note.start_with?(starting_with) @@ -57,7 +59,8 @@ RSpec.describe Issues::UpdateService, :mailer do due_date: Date.tomorrow, discussion_locked: true, severity: 'low', - milestone_id: milestone.id + milestone_id: milestone.id, + add_contacts: [contact.email] } end @@ -76,6 +79,7 @@ RSpec.describe Issues::UpdateService, :mailer do expect(issue.discussion_locked).to be_truthy expect(issue.confidential).to be_falsey expect(issue.milestone).to eq milestone + expect(issue.issue_customer_relations_contacts.last.contact).to eq contact end it 'updates issue milestone when passing `milestone` param' do @@ -319,7 +323,7 @@ RSpec.describe Issues::UpdateService, :mailer do opts[:move_between_ids] = [issue1.id, issue2.id] - expect(IssueRebalancingWorker).not_to receive(:perform_async) + expect(Issues::RebalancingWorker).not_to receive(:perform_async) update_issue(opts) expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position) @@ -335,7 +339,7 @@ RSpec.describe Issues::UpdateService, :mailer do opts[:move_between_ids] = [issue1.id, issue2.id] - expect(IssueRebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) + expect(Issues::RebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) update_issue(opts) expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position) @@ -349,7 +353,7 @@ RSpec.describe Issues::UpdateService, :mailer do opts[:move_between_ids] = [issue1.id, issue2.id] - expect(IssueRebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) + expect(Issues::RebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) update_issue(opts) expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position) @@ -363,7 +367,7 @@ RSpec.describe Issues::UpdateService, :mailer do opts[:move_between_ids] = [issue1.id, issue2.id] - expect(IssueRebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) + expect(Issues::RebalancingWorker).to receive(:perform_async).with(nil, nil, project.root_namespace.id) update_issue(opts) expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position) |