Commit a550942d authored by Sean McGivern's avatar Sean McGivern

Merge branch 'jk-assignees-todos-fix' into 'master'

CE Backport of "Don't create todos for old issue assignees"

See merge request gitlab-org/gitlab-ce!14765
parents 9fe93e3c d6612fbc
...@@ -34,7 +34,7 @@ module Issues ...@@ -34,7 +34,7 @@ module Issues
if issue.assignees != old_assignees if issue.assignees != old_assignees
create_assignee_note(issue, old_assignees) create_assignee_note(issue, old_assignees)
notification_service.reassigned_issue(issue, current_user, old_assignees) notification_service.reassigned_issue(issue, current_user, old_assignees)
todo_service.reassigned_issue(issue, current_user) todo_service.reassigned_issue(issue, current_user, old_assignees)
end end
if issue.previous_changes.include?('confidential') if issue.previous_changes.include?('confidential')
......
...@@ -43,8 +43,8 @@ class TodoService ...@@ -43,8 +43,8 @@ class TodoService
# #
# * create a pending todo for new assignee if issue is assigned # * create a pending todo for new assignee if issue is assigned
# #
def reassigned_issue(issue, current_user) def reassigned_issue(issue, current_user, old_assignees = [])
create_assignment_todo(issue, current_user) create_assignment_todo(issue, current_user, old_assignees)
end end
# When create a merge request we should: # When create a merge request we should:
...@@ -254,10 +254,11 @@ class TodoService ...@@ -254,10 +254,11 @@ class TodoService
create_mention_todos(project, target, author, note, skip_users) create_mention_todos(project, target, author, note, skip_users)
end end
def create_assignment_todo(issuable, author) def create_assignment_todo(issuable, author, old_assignees = [])
if issuable.assignees.any? if issuable.assignees.any?
assignees = issuable.assignees - old_assignees
attributes = attributes_for_todo(issuable.project, issuable, author, Todo::ASSIGNED) attributes = attributes_for_todo(issuable.project, issuable, author, Todo::ASSIGNED)
create_todos(issuable.assignees, attributes) create_todos(assignees, attributes)
end end
end end
......
...@@ -267,6 +267,30 @@ describe Issues::UpdateService, :mailer do ...@@ -267,6 +267,30 @@ describe Issues::UpdateService, :mailer do
end end
end end
context 'when a new assignee added' do
subject { update_issue(assignees: issue.assignees + [user2]) }
it 'creates only 1 new todo' do
expect { subject }.to change { Todo.count }.by(1)
end
it 'creates a todo for new assignee' do
subject
attributes = {
project: project,
author: user,
user: user2,
target_id: issue.id,
target_type: issue.class.name,
action: Todo::ASSIGNED,
state: :pending
}
expect(Todo.where(attributes).count).to eq(1)
end
end
context 'when the milestone change' do context 'when the milestone change' do
it 'marks todos as done' do it 'marks todos as done' do
update_issue(milestone: create(:milestone)) update_issue(milestone: create(:milestone))
......
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