diff options
Diffstat (limited to 'spec/services/merge_requests/close_service_spec.rb')
-rw-r--r-- | spec/services/merge_requests/close_service_spec.rb | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/spec/services/merge_requests/close_service_spec.rb b/spec/services/merge_requests/close_service_spec.rb index 8f448184b45..b3c4ed4c544 100644 --- a/spec/services/merge_requests/close_service_spec.rb +++ b/spec/services/merge_requests/close_service_spec.rb @@ -9,6 +9,7 @@ RSpec.describe MergeRequests::CloseService do let(:merge_request) { create(:merge_request, assignees: [user2], author: create(:user)) } let(:project) { merge_request.project } let!(:todo) { create(:todo, :assigned, user: user, project: project, target: merge_request, author: user2) } + let(:service) { described_class.new(project: project, current_user: user) } before do project.add_maintainer(user) @@ -16,18 +17,20 @@ RSpec.describe MergeRequests::CloseService do project.add_guest(guest) end + def execute + service.execute(merge_request) + end + describe '#execute' do it_behaves_like 'cache counters invalidator' it_behaves_like 'merge request reviewers cache counters invalidator' context 'valid params' do - let(:service) { described_class.new(project: project, current_user: user) } - before do allow(service).to receive(:execute_hooks) perform_enqueued_jobs do - @merge_request = service.execute(merge_request) + @merge_request = execute end end @@ -73,7 +76,7 @@ RSpec.describe MergeRequests::CloseService do expect(metrics_service).to receive(:close) - described_class.new(project: project, current_user: user).execute(merge_request) + execute end it 'calls the merge request activity counter' do @@ -81,13 +84,11 @@ RSpec.describe MergeRequests::CloseService do .to receive(:track_close_mr_action) .with(user: user) - described_class.new(project: project, current_user: user).execute(merge_request) + execute end it 'refreshes the number of open merge requests for a valid MR', :use_clean_rails_memory_store_caching do - service = described_class.new(project: project, current_user: user) - - expect { service.execute(merge_request) } + expect { execute } .to change { project.open_merge_requests_count }.from(1).to(0) end @@ -96,25 +97,39 @@ RSpec.describe MergeRequests::CloseService do expect(service).to receive(:execute_for_merge_request_pipeline).with(merge_request) end - described_class.new(project: project, current_user: user).execute(merge_request) + execute end it 'schedules CleanupRefsService' do expect(MergeRequests::CleanupRefsService).to receive(:schedule).with(merge_request) - described_class.new(project: project, current_user: user).execute(merge_request) + execute + end + + it 'triggers GraphQL subscription mergeRequestMergeStatusUpdated' do + expect(GraphqlTriggers).to receive(:merge_request_merge_status_updated).with(merge_request) + + execute end context 'current user is not authorized to close merge request' do + let(:user) { guest } + before do perform_enqueued_jobs do - @merge_request = described_class.new(project: project, current_user: guest).execute(merge_request) + @merge_request = execute end end it 'does not close the merge request' do expect(@merge_request).to be_open end + + it 'does not trigger GraphQL subscription mergeRequestMergeStatusUpdated' do + expect(GraphqlTriggers).not_to receive(:merge_request_merge_status_updated) + + execute + end end end end |