summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-02-16 18:31:40 -0200
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-02-20 12:10:26 -0200
commita56ada0a1e92b9ce919fd75edb6508514d00148a (patch)
tree2f79da2a19248b833470177ad3b7baae27a0de3e
parente81061a211fedf9adaca8b053b6633988fdd5644 (diff)
downloadgitlab-ce-a56ada0a1e92b9ce919fd75edb6508514d00148a.tar.gz
Marks pending tasks for an user as done when he close the issue
-rw-r--r--app/services/issues/close_service.rb2
-rw-r--r--app/services/task_service.rb8
-rw-r--r--spec/services/issues/close_service_spec.rb8
-rw-r--r--spec/services/task_service_spec.rb17
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)