diff options
Diffstat (limited to 'spec/services/issues/after_create_service_spec.rb')
-rw-r--r-- | spec/services/issues/after_create_service_spec.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/spec/services/issues/after_create_service_spec.rb b/spec/services/issues/after_create_service_spec.rb new file mode 100644 index 00000000000..bc9be3211d3 --- /dev/null +++ b/spec/services/issues/after_create_service_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Issues::AfterCreateService do + include AfterNextHelpers + + let_it_be(:project) { create(:project) } + let_it_be(:current_user) { create(:user) } + let_it_be(:assignee) { create(:user) } + let_it_be(:milestone) { create(:milestone, project: project) } + let_it_be(:issue) { create(:issue, project: project, author: current_user, milestone: milestone, assignee_ids: [assignee.id]) } + + subject(:after_create_service) { described_class.new(project, current_user) } + + describe '#execute' do + it 'creates a pending todo for new assignee' do + attributes = { + project: project, + author: current_user, + user: assignee, + target_id: issue.id, + target_type: issue.class.name, + action: Todo::ASSIGNED, + state: :pending + } + + expect { after_create_service.execute(issue) }.to change { Todo.where(attributes).count }.by(1) + end + + it 'deletes milestone issues count cache' do + expect_next(Milestones::IssuesCountService, milestone) + .to receive(:delete_cache).and_call_original + + after_create_service.execute(issue) + end + + context 'with a regular issue' do + it_behaves_like 'does not track incident management event', :incident_management_incident_created do + subject { after_create_service.execute(issue) } + end + end + + context 'with an incident issue' do + let(:issue) { create(:issue, :incident, project: project, author: current_user) } + + it_behaves_like 'an incident management tracked event', :incident_management_incident_created do + subject { after_create_service.execute(issue) } + end + end + end +end |