Mark pending tasks for the note author as done when he left a note
This commit is contained in:
parent
917081fe9d
commit
49cd19652a
4 changed files with 53 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue