Merge branch 'notify-participants' into 'master'
Notify participants on close or reopen of issue/mr Fixes #1891 cc @sytse See merge request !1436
This commit is contained in:
commit
b926b02332
12 changed files with 36 additions and 36 deletions
|
@ -3,7 +3,7 @@ Note: The upcoming release contains empty lines to reduce the number of merge co
|
|||
v 7.8.0
|
||||
- Replace highlight.js with rouge-fork rugments (Stefan Tatschner)
|
||||
- Make project search case insensitive (Hannes Rosenögger)
|
||||
-
|
||||
- Include issue/mr participants in list of recipients for reassign/close/reopen emails
|
||||
- Expose description in groups API
|
||||
-
|
||||
-
|
||||
|
|
|
@ -2,9 +2,9 @@ module Issues
|
|||
class CloseService < Issues::BaseService
|
||||
def execute(issue, commit = nil)
|
||||
if issue.close
|
||||
notification_service.close_issue(issue, current_user)
|
||||
event_service.close_issue(issue, current_user)
|
||||
create_note(issue, commit)
|
||||
notification_service.close_issue(issue, current_user)
|
||||
execute_hooks(issue, 'close')
|
||||
end
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ module Issues
|
|||
end
|
||||
|
||||
if issue.previous_changes.include?('assignee_id')
|
||||
notification_service.reassigned_issue(issue, current_user)
|
||||
create_assignee_note(issue)
|
||||
notification_service.reassigned_issue(issue, current_user)
|
||||
end
|
||||
|
||||
issue.notice_added_references(issue.project, current_user)
|
||||
|
|
|
@ -11,9 +11,9 @@ module MergeRequests
|
|||
if Gitlab::Satellite::MergeAction.new(current_user, merge_request).merge!(commit_message)
|
||||
merge_request.merge
|
||||
|
||||
notification_service.merge_mr(merge_request, current_user)
|
||||
create_merge_event(merge_request, current_user)
|
||||
create_note(merge_request)
|
||||
notification_service.merge_mr(merge_request, current_user)
|
||||
execute_hooks(merge_request)
|
||||
|
||||
true
|
||||
|
|
|
@ -7,8 +7,8 @@ module MergeRequests
|
|||
|
||||
if merge_request.close
|
||||
event_service.close_mr(merge_request, current_user)
|
||||
notification_service.close_mr(merge_request, current_user)
|
||||
create_note(merge_request)
|
||||
notification_service.close_mr(merge_request, current_user)
|
||||
execute_hooks(merge_request, 'close')
|
||||
end
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ module MergeRequests
|
|||
def execute(merge_request, commit_message)
|
||||
merge_request.merge
|
||||
|
||||
notification_service.merge_mr(merge_request, current_user)
|
||||
create_merge_event(merge_request, current_user)
|
||||
create_note(merge_request)
|
||||
notification_service.merge_mr(merge_request, current_user)
|
||||
execute_hooks(merge_request, 'merge')
|
||||
|
||||
true
|
||||
|
|
|
@ -3,8 +3,8 @@ module MergeRequests
|
|||
def execute(merge_request)
|
||||
if merge_request.reopen
|
||||
event_service.reopen_mr(merge_request, current_user)
|
||||
notification_service.reopen_mr(merge_request, current_user)
|
||||
create_note(merge_request)
|
||||
notification_service.reopen_mr(merge_request, current_user)
|
||||
execute_hooks(merge_request, 'reopen')
|
||||
merge_request.reload_code
|
||||
merge_request.mark_as_unchecked
|
||||
|
|
|
@ -33,8 +33,8 @@ module MergeRequests
|
|||
end
|
||||
|
||||
if merge_request.previous_changes.include?('assignee_id')
|
||||
notification_service.reassigned_merge_request(merge_request, current_user)
|
||||
create_assignee_note(merge_request)
|
||||
notification_service.reassigned_merge_request(merge_request, current_user)
|
||||
end
|
||||
|
||||
merge_request.notice_added_references(merge_request.project, current_user)
|
||||
|
|
|
@ -314,15 +314,7 @@ class NotificationService
|
|||
end
|
||||
|
||||
def new_resource_email(target, project, method)
|
||||
if target.respond_to?(:participants)
|
||||
recipients = target.participants
|
||||
else
|
||||
recipients = []
|
||||
end
|
||||
|
||||
recipients = reject_muted_users(recipients, project)
|
||||
recipients = reject_mention_users(recipients, project)
|
||||
recipients = recipients.concat(project_watchers(project)).uniq
|
||||
recipients = build_recipients(target, project)
|
||||
recipients.delete(target.author)
|
||||
|
||||
recipients.each do |recipient|
|
||||
|
@ -331,9 +323,7 @@ class NotificationService
|
|||
end
|
||||
|
||||
def close_resource_email(target, project, current_user, method)
|
||||
recipients = reject_muted_users([target.author, target.assignee], project)
|
||||
recipients = reject_mention_users(recipients, project)
|
||||
recipients = recipients.concat(project_watchers(project)).uniq
|
||||
recipients = build_recipients(target, project)
|
||||
recipients.delete(current_user)
|
||||
|
||||
recipients.each do |recipient|
|
||||
|
@ -343,17 +333,7 @@ class NotificationService
|
|||
|
||||
def reassign_resource_email(target, project, current_user, method)
|
||||
assignee_id_was = previous_record(target, "assignee_id")
|
||||
|
||||
recipients = User.where(id: [target.assignee_id, assignee_id_was])
|
||||
|
||||
# Add watchers to email list
|
||||
recipients = recipients.concat(project_watchers(project))
|
||||
|
||||
# reject users with disabled notifications
|
||||
recipients = reject_muted_users(recipients, project)
|
||||
recipients = reject_mention_users(recipients, project)
|
||||
|
||||
# Reject me from recipients if I reassign an item
|
||||
recipients = build_recipients(target, project)
|
||||
recipients.delete(current_user)
|
||||
|
||||
recipients.each do |recipient|
|
||||
|
@ -362,9 +342,7 @@ class NotificationService
|
|||
end
|
||||
|
||||
def reopen_resource_email(target, project, current_user, method, status)
|
||||
recipients = reject_muted_users([target.author, target.assignee], project)
|
||||
recipients = reject_mention_users(recipients, project)
|
||||
recipients = recipients.concat(project_watchers(project)).uniq
|
||||
recipients = build_recipients(target, project)
|
||||
recipients.delete(current_user)
|
||||
|
||||
recipients.each do |recipient|
|
||||
|
@ -372,6 +350,20 @@ class NotificationService
|
|||
end
|
||||
end
|
||||
|
||||
def build_recipients(target, project)
|
||||
recipients =
|
||||
if target.respond_to?(:participants)
|
||||
target.participants
|
||||
else
|
||||
[target.author, target.assignee]
|
||||
end
|
||||
|
||||
recipients = reject_muted_users(recipients, project)
|
||||
recipients = reject_mention_users(recipients, project)
|
||||
recipients = recipients.concat(project_watchers(project)).uniq
|
||||
recipients
|
||||
end
|
||||
|
||||
def mailer
|
||||
Notify.delay
|
||||
end
|
||||
|
|
|
@ -22,6 +22,7 @@ describe Issues::UpdateService do
|
|||
}
|
||||
|
||||
@issue = Issues::UpdateService.new(project, user, opts).execute(issue)
|
||||
@issue.reload
|
||||
end
|
||||
|
||||
it { @issue.should be_valid }
|
||||
|
|
|
@ -21,12 +21,14 @@ describe MergeRequests::UpdateService do
|
|||
state_event: 'close'
|
||||
}
|
||||
end
|
||||
|
||||
let(:service) { MergeRequests::UpdateService.new(project, user, opts) }
|
||||
|
||||
before do
|
||||
service.stub(:execute_hooks)
|
||||
|
||||
@merge_request = service.execute(merge_request)
|
||||
@merge_request.reload
|
||||
end
|
||||
|
||||
it { @merge_request.should be_valid }
|
||||
|
@ -46,7 +48,7 @@ describe MergeRequests::UpdateService do
|
|||
end
|
||||
|
||||
it 'should create system note about merge_request reassign' do
|
||||
note = @merge_request.notes.last
|
||||
note = @merge_request.notes.reload.last
|
||||
note.note.should include "Reassigned to \@#{user2.username}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -187,7 +187,7 @@ describe NotificationService do
|
|||
end
|
||||
|
||||
describe 'Issues' do
|
||||
let(:issue) { create :issue, assignee: create(:user) }
|
||||
let(:issue) { create :issue, assignee: create(:user), description: 'cc @participant' }
|
||||
|
||||
before do
|
||||
build_team(issue.project)
|
||||
|
@ -197,6 +197,7 @@ describe NotificationService do
|
|||
it do
|
||||
should_email(issue.assignee_id)
|
||||
should_email(@u_watcher.id)
|
||||
should_email(@u_participant_mentioned.id)
|
||||
should_not_email(@u_mentioned.id)
|
||||
should_not_email(@u_participating.id)
|
||||
should_not_email(@u_disabled.id)
|
||||
|
@ -222,6 +223,7 @@ describe NotificationService do
|
|||
it 'should email new assignee' do
|
||||
should_email(issue.assignee_id)
|
||||
should_email(@u_watcher.id)
|
||||
should_email(@u_participant_mentioned.id)
|
||||
should_not_email(@u_participating.id)
|
||||
should_not_email(@u_disabled.id)
|
||||
|
||||
|
@ -242,6 +244,7 @@ describe NotificationService do
|
|||
should_email(issue.assignee_id)
|
||||
should_email(issue.author_id)
|
||||
should_email(@u_watcher.id)
|
||||
should_email(@u_participant_mentioned.id)
|
||||
should_not_email(@u_participating.id)
|
||||
should_not_email(@u_disabled.id)
|
||||
|
||||
|
@ -262,6 +265,7 @@ describe NotificationService do
|
|||
should_email(issue.assignee_id)
|
||||
should_email(issue.author_id)
|
||||
should_email(@u_watcher.id)
|
||||
should_email(@u_participant_mentioned.id)
|
||||
should_not_email(@u_participating.id)
|
||||
should_not_email(@u_disabled.id)
|
||||
|
||||
|
@ -404,6 +408,7 @@ describe NotificationService do
|
|||
def build_team(project)
|
||||
@u_watcher = create(:user, notification_level: Notification::N_WATCH)
|
||||
@u_participating = create(:user, notification_level: Notification::N_PARTICIPATING)
|
||||
@u_participant_mentioned = create(:user, username: 'participant', notification_level: Notification::N_PARTICIPATING)
|
||||
@u_disabled = create(:user, notification_level: Notification::N_DISABLED)
|
||||
@u_mentioned = create(:user, username: 'mention', notification_level: Notification::N_MENTION)
|
||||
@u_committer = create(:user, username: 'committer')
|
||||
|
|
Loading…
Reference in a new issue