Commit ae9edbbe authored by Sean McGivern's avatar Sean McGivern

Add todo for approvers on MR create

parent 66d31698
......@@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.10.0 (unreleased)
- Rename Git Hooks to Push Rules
- Fix EE keys fingerprint add index migration if came from CE
- Add todos for MR approvers !547
- Isolate EE LDAP library code in EE module (Part 1) !511
v 8.9.5
......
......@@ -167,6 +167,7 @@ class TodoService
def new_issuable(issuable, author)
create_assignment_todo(issuable, author)
create_approval_required_todos(issuable, author) if issuable.is_a?(MergeRequest)
create_mention_todos(issuable.project, issuable, author)
end
......@@ -206,6 +207,12 @@ class TodoService
create_todos(mentioned_users, attributes)
end
def create_approval_required_todos(merge_request, author)
approvers = merge_request.overall_approvers.map(&:user)
attributes = attributes_for_todo(merge_request.project, merge_request, author, Todo::APPROVAL_REQUIRED)
create_todos(approvers, attributes)
end
def create_build_failed_todo(merge_request)
author = merge_request.author
attributes = attributes_for_todo(merge_request.project, merge_request, author, Todo::BUILD_FAILED)
......
......@@ -9,6 +9,9 @@ describe TodoService, services: true do
let(:admin) { create(:admin) }
let(:john_doe) { create(:user) }
let(:project) { create(:project) }
let(:approver_1) { create(:user) }
let(:approver_2) { create(:user) }
let(:approver_3) { create(:user) }
let(:mentions) { [author, assignee, john_doe, member, guest, non_member, admin].map(&:to_reference).join(' ') }
let(:service) { described_class.new }
......@@ -17,6 +20,9 @@ describe TodoService, services: true do
project.team << [author, :developer]
project.team << [member, :developer]
project.team << [john_doe, :developer]
project.team << [approver_1, :developer]
project.team << [approver_2, :developer]
project.team << [approver_3, :developer]
end
describe 'Issues' do
......@@ -316,6 +322,29 @@ describe TodoService, services: true do
should_not_create_todo(user: john_doe, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: mr_assigned, action: Todo::MENTIONED)
end
context 'when the merge request has approvers' do
let(:approver_mentions) { [john_doe, approver_1].map(&:to_reference).join(' ') }
let(:mr_approvers) { create(:merge_request, source_project: project, author: author, description: approver_mentions) }
before do
create(:approver, user: approver_1, target: mr_approvers)
create(:approver, user: approver_2, target: mr_approvers)
service.new_merge_request(mr_approvers, author)
end
it 'creates a todo for each approver' do
should_create_todo(user: approver_1, target: mr_approvers, action: Todo::APPROVAL_REQUIRED)
should_create_todo(user: approver_2, target: mr_approvers, action: Todo::APPROVAL_REQUIRED)
should_not_create_todo(user: approver_3, target: mr_approvers, action: Todo::APPROVAL_REQUIRED)
end
it 'creates a todo for each valid mentioned user' do
should_create_todo(user: john_doe, target: mr_approvers, action: Todo::MENTIONED)
should_not_create_todo(user: approver_1, target: mr_approvers, action: Todo::MENTIONED)
end
end
end
describe '#update_merge_request' do
......
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