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
|
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
|
||||||
|
|
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue