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

This commit is contained in:
Douglas Barbosa Alexandre 2016-02-16 19:29:11 -02:00
parent 917081fe9d
commit 49cd19652a
4 changed files with 53 additions and 6 deletions

View File

@ -1,6 +1,5 @@
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
@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
@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

View File

@ -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)

View File

@ -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

View File

@ -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
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