diff options
-rw-r--r-- | app/services/merge_requests/close_service.rb | 1 | ||||
-rw-r--r-- | app/services/task_service.rb | 10 | ||||
-rw-r--r-- | spec/services/merge_requests/close_service_spec.rb | 7 | ||||
-rw-r--r-- | spec/services/task_service_spec.rb | 17 |
4 files changed, 34 insertions, 1 deletions
diff --git a/app/services/merge_requests/close_service.rb b/app/services/merge_requests/close_service.rb index 47454f9f0c2..1f70c95ab4a 100644 --- a/app/services/merge_requests/close_service.rb +++ b/app/services/merge_requests/close_service.rb @@ -9,6 +9,7 @@ module MergeRequests event_service.close_mr(merge_request, current_user) create_note(merge_request) notification_service.close_mr(merge_request, current_user) + task_service.close_merge_request(merge_request, current_user) execute_hooks(merge_request, 'close') end diff --git a/app/services/task_service.rb b/app/services/task_service.rb index 329a041061a..8254f16581e 100644 --- a/app/services/task_service.rb +++ b/app/services/task_service.rb @@ -38,7 +38,15 @@ class TaskService new_issuable(merge_request, current_user) end - # When we reassign an merge request we should: + # When close a merge request we should: + # + # * mark all pending tasks related to the target for the current user as done + # + def close_merge_request(merge_request, current_user) + mark_as_done(merge_request, current_user) + end + + # When we reassign a merge request we should: # # * creates a pending task for new assignee if merge request is assigned # diff --git a/spec/services/merge_requests/close_service_spec.rb b/spec/services/merge_requests/close_service_spec.rb index 50d0c288790..3e72be2dc25 100644 --- a/spec/services/merge_requests/close_service_spec.rb +++ b/spec/services/merge_requests/close_service_spec.rb @@ -5,6 +5,9 @@ describe MergeRequests::CloseService, services: true do let(:user2) { create(:user) } let(:merge_request) { create(:merge_request, assignee: user2) } let(:project) { merge_request.project } + let!(:pending_task) do + create(:pending_assigned_task, user: user, project: project, target: merge_request, author: user2) + end before do project.team << [user, :master] @@ -41,6 +44,10 @@ describe MergeRequests::CloseService, services: true do note = @merge_request.notes.last expect(note.note).to include 'Status changed to closed' end + + it 'marks pending tasks as done' do + expect(pending_task.reload).to be_done + end end end end diff --git a/spec/services/task_service_spec.rb b/spec/services/task_service_spec.rb index 0a072dda94b..124f1c659d0 100644 --- a/spec/services/task_service_spec.rb +++ b/spec/services/task_service_spec.rb @@ -136,6 +136,23 @@ describe TaskService, services: true do end end + describe '#close_merge_request' do + let!(:first_pending_task) do + create(:pending_assigned_task, user: john_doe, project: project, target: mr_assigned, author: author) + end + + let!(:second_pending_task) do + create(:pending_assigned_task, user: john_doe, project: project, target: mr_assigned, author: author) + end + + it 'marks related pending tasks to the target for the user as done' do + service.close_merge_request(mr_assigned, john_doe) + + expect(first_pending_task.reload).to be_done + expect(second_pending_task.reload).to be_done + end + end + describe '#reassigned_merge_request' do it 'creates a pending task for new assignee' do mr_unassigned.update_attribute(:assignee, john_doe) |