Mark pending tasks for the note author as done when he left a note

parent 917081fe
module Notes module Notes
class PostProcessService class PostProcessService
attr_accessor :note attr_accessor :note
def initialize(note) def initialize(note)
...@@ -14,6 +13,8 @@ module Notes ...@@ -14,6 +13,8 @@ module Notes
@note.create_cross_references! @note.create_cross_references!
execute_note_hooks execute_note_hooks
end end
TaskService.new.new_note(note)
end end
def hook_data def hook_data
...@@ -25,6 +26,5 @@ module Notes ...@@ -25,6 +26,5 @@ module Notes
@note.project.execute_hooks(note_data, :note_hooks) @note.project.execute_hooks(note_data, :note_hooks)
@note.project.execute_services(note_data, :note_hooks) @note.project.execute_services(note_data, :note_hooks)
end end
end end
end end
...@@ -43,6 +43,17 @@ class TaskService ...@@ -43,6 +43,17 @@ class TaskService
pending_tasks.update_all(state: :done) pending_tasks.update_all(state: :done)
end end
# When create a note we should:
#
# * mark all pending tasks related to the noteable for the note author as done
#
def new_note(note)
# Skip system notes, like status changes and cross-references
unless note.system
mark_as_done(note.noteable, note.author)
end
end
private private
def create_task(project, target, author, user, action) def create_task(project, target, author, user, action)
......
...@@ -20,6 +20,7 @@ describe Notes::PostProcessService, services: true do ...@@ -20,6 +20,7 @@ describe Notes::PostProcessService, services: true do
it do it do
expect(project).to receive(:execute_hooks) expect(project).to receive(:execute_hooks)
expect(project).to receive(:execute_services) expect(project).to receive(:execute_services)
expect_any_instance_of(TaskService).to receive(:new_note).with(@note)
Notes::PostProcessService.new(@note).execute Notes::PostProcessService.new(@note).execute
end end
end end
......
...@@ -43,8 +43,8 @@ describe TaskService, services: true do ...@@ -43,8 +43,8 @@ describe TaskService, services: true do
it 'marks related pending tasks to the target for the user as done' do it 'marks related pending tasks to the target for the user as done' do
service.close_issue(assigned_issue, john_doe) service.close_issue(assigned_issue, john_doe)
expect(first_pending_task.reload.done?).to eq true expect(first_pending_task.reload).to be_done
expect(second_pending_task.reload.done?).to eq true expect(second_pending_task.reload).to be_done
end end
end end
...@@ -75,8 +75,43 @@ describe TaskService, services: true do ...@@ -75,8 +75,43 @@ describe TaskService, services: true do
it 'marks related pending tasks to the target for the user as done' do it 'marks related pending tasks to the target for the user as done' do
service.mark_as_done(assigned_issue, john_doe) service.mark_as_done(assigned_issue, john_doe)
expect(first_pending_task.reload.done?).to eq true expect(first_pending_task.reload).to be_done
expect(second_pending_task.reload.done?).to eq true expect(second_pending_task.reload).to be_done
end
end
describe '#new_note' 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
let(:note) { create(:note, project: project, noteable: assigned_issue, author: john_doe) }
let(:award_note) { create(:note, :award, project: project, noteable: assigned_issue, author: john_doe, note: 'thumbsup') }
let(:system_note) { create(:system_note, project: project, noteable: assigned_issue) }
it 'mark related pending tasks to the noteable for the note author as done' do
service.new_note(note)
expect(first_pending_task.reload).to be_done
expect(second_pending_task.reload).to be_done
end
it 'mark related pending tasks to the noteable for the award note author as done' do
service.new_note(award_note)
expect(first_pending_task.reload).to be_done
expect(second_pending_task.reload).to be_done
end
it 'does not mark related pending tasks it is a system note' do
service.new_note(system_note)
expect(first_pending_task.reload).to be_pending
expect(second_pending_task.reload).to be_pending
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment