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
class PostProcessService
attr_accessor :note
def initialize(note)
@ -14,6 +13,8 @@ module Notes
@note.create_cross_references!
execute_note_hooks
end
TaskService.new.new_note(note)
end
def hook_data
@ -25,6 +26,5 @@ module Notes
@note.project.execute_hooks(note_data, :note_hooks)
@note.project.execute_services(note_data, :note_hooks)
end
end
end

View file

@ -43,6 +43,17 @@ class TaskService
pending_tasks.update_all(state: :done)
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
def create_task(project, target, author, user, action)

View file

@ -20,6 +20,7 @@ describe Notes::PostProcessService, services: true do
it do
expect(project).to receive(:execute_hooks)
expect(project).to receive(:execute_services)
expect_any_instance_of(TaskService).to receive(:new_note).with(@note)
Notes::PostProcessService.new(@note).execute
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
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
expect(first_pending_task.reload).to be_done
expect(second_pending_task.reload).to be_done
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
service.mark_as_done(assigned_issue, john_doe)
expect(first_pending_task.reload.done?).to eq true
expect(second_pending_task.reload.done?).to eq true
expect(first_pending_task.reload).to be_done
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