diff options
-rw-r--r-- | app/services/issues/close_service.rb | 2 | ||||
-rw-r--r-- | app/services/task_service.rb | 8 | ||||
-rw-r--r-- | spec/services/issues/close_service_spec.rb | 8 | ||||
-rw-r--r-- | spec/services/task_service_spec.rb | 17 |
4 files changed, 35 insertions, 0 deletions
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index a1a20e47681..a652bba4761 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -3,6 +3,7 @@ module Issues def execute(issue, commit = nil) if project.jira_tracker? && project.jira_service.active project.jira_service.execute(commit, issue) + task_service.close_issue(issue, current_user) return issue end @@ -10,6 +11,7 @@ module Issues event_service.close_issue(issue, current_user) create_note(issue, commit) notification_service.close_issue(issue, current_user) + task_service.close_issue(issue, current_user) execute_hooks(issue, 'close') end diff --git a/app/services/task_service.rb b/app/services/task_service.rb index 2c312331ae9..0d66f89e997 100644 --- a/app/services/task_service.rb +++ b/app/services/task_service.rb @@ -16,6 +16,14 @@ class TaskService end end + # When close an issue we should: + # + # * mark all pending tasks related to the target for the current user as done + # + def close_issue(issue, current_user) + mark_as_done(issue, current_user) + end + # When we reassign an issue we should: # # * creates a pending task for new assignee if issue is assigned diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb index 3a8daf28f5e..7a587a96ddc 100644 --- a/spec/services/issues/close_service_spec.rb +++ b/spec/services/issues/close_service_spec.rb @@ -5,6 +5,9 @@ describe Issues::CloseService, services: true do let(:user2) { create(:user) } let(:issue) { create(:issue, assignee: user2) } let(:project) { issue.project } + let!(:pending_task) do + create(:pending_assigned_task, user: user, project: project, target: issue, author: user2) + end before do project.team << [user, :master] @@ -32,6 +35,10 @@ describe Issues::CloseService, services: true do note = @issue.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 context "external issue tracker" do @@ -42,6 +49,7 @@ describe Issues::CloseService, services: true do it { expect(@issue).to be_valid } it { expect(@issue).to be_opened } + it { expect(pending_task.reload).to be_pending } end end end diff --git a/spec/services/task_service_spec.rb b/spec/services/task_service_spec.rb index e8920c59fee..04735900e25 100644 --- a/spec/services/task_service_spec.rb +++ b/spec/services/task_service_spec.rb @@ -31,6 +31,23 @@ describe TaskService, services: true do end end + describe '#close_issue' do + let!(:first_pending_task) do + create(:pending_assigned_task, user: john_doe, project: project, target: assigned_issue, author: author) + end + + let!(:second_pending_task) do + create(:pending_assigned_task, user: john_doe, project: project, target: assigned_issue, author: author) + end + + it 'marks related pending tasks to the target for the user as done' do + service.close_issue(assigned_issue, john_doe) + + expect(first_pending_task.reload.done?).to eq true + expect(second_pending_task.reload.done?).to eq true + end + end + describe '#reassigned_issue' do it 'creates a pending task for new assignee' do unassigned_issue.update_attribute(:assignee, john_doe) |