diff options
| -rw-r--r-- | app/mailers/emails/merge_requests.rb | 12 | ||||
| -rw-r--r-- | app/services/issues/reopen_service.rb | 1 | ||||
| -rw-r--r-- | app/services/merge_requests/reopen_service.rb | 1 | ||||
| -rw-r--r-- | app/services/notification_service.rb | 18 | ||||
| -rw-r--r-- | app/views/notify/merge_request_status_email.html.haml | 2 | ||||
| -rw-r--r-- | app/views/notify/merge_request_status_email.text.haml | 8 | ||||
| -rw-r--r-- | spec/services/notification_service_spec.rb | 38 |
7 files changed, 80 insertions, 0 deletions
diff --git a/app/mailers/emails/merge_requests.rb b/app/mailers/emails/merge_requests.rb index ea5671c4502..2b5af09a576 100644 --- a/app/mailers/emails/merge_requests.rb +++ b/app/mailers/emails/merge_requests.rb @@ -41,6 +41,18 @@ module Emails to: recipient(recipient_id), subject: subject("#{@merge_request.title} (##{@merge_request.iid})")) end + + def merge_request_status_email(recipient_id, merge_request_id, status, updated_by_user_id) + @merge_request = MergeRequest.find(merge_request_id) + @mr_status = status + @project = @merge_request.project + @updated_by = User.find updated_by_user_id + @target_url = project_merge_request_url(@project, @merge_request) + set_reference("merge_request_#{merge_request_id}") + mail(from: sender(updated_by_user_id), + to: recipient(recipient_id), + subject: subject("#{@merge_request.title} (##{@merge_request.iid}) #{@mr_status}")) + end end # Over rides default behavour to show source/target diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb index b23d56258a8..1e5c398516d 100644 --- a/app/services/issues/reopen_service.rb +++ b/app/services/issues/reopen_service.rb @@ -4,6 +4,7 @@ module Issues if issue.reopen event_service.reopen_issue(issue, current_user) create_note(issue) + notification_service.reopen_issue(issue, current_user) execute_hooks(issue, 'reopen') end diff --git a/app/services/merge_requests/reopen_service.rb b/app/services/merge_requests/reopen_service.rb index 2eb13d3e0e1..bd68919a550 100644 --- a/app/services/merge_requests/reopen_service.rb +++ b/app/services/merge_requests/reopen_service.rb @@ -3,6 +3,7 @@ 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) execute_hooks(merge_request) merge_request.reload_code diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 423ca18c0b4..e934c486c75 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -80,6 +80,10 @@ class NotificationService close_resource_email(merge_request, merge_request.target_project, current_user, 'closed_merge_request_email') end + def reopen_issue(issue, current_user) + reopen_resource_email(issue, issue.project, current_user, 'issue_status_changed_email', 'reopened') + end + # When we merge a merge request we should send next emails: # # * merge_request author if their notification level is not Disabled @@ -96,6 +100,10 @@ class NotificationService end end + def reopen_mr(merge_request, current_user) + reopen_resource_email(merge_request, merge_request.target_project, current_user, 'merge_request_status_email', 'reopened') + end + # Notify new user with email after creation def new_user(user) # Don't email omniauth created users @@ -320,6 +328,16 @@ class NotificationService end end + def reopen_resource_email(target, project, current_user, method, status) + recipients = reject_muted_users([target.author, target.assignee], project) + recipients = recipients.concat(project_watchers(project)).uniq + recipients.delete(current_user) + + recipients.each do |recipient| + mailer.send(method, recipient.id, target.id, status, current_user.id) + end + end + def mailer Notify.delay end diff --git a/app/views/notify/merge_request_status_email.html.haml b/app/views/notify/merge_request_status_email.html.haml new file mode 100644 index 00000000000..c9bf04f514e --- /dev/null +++ b/app/views/notify/merge_request_status_email.html.haml @@ -0,0 +1,2 @@ +%p + = "Merge Request ##{@merge_request.iid} was #{@mr_status} by #{@updated_by.name}" diff --git a/app/views/notify/merge_request_status_email.text.haml b/app/views/notify/merge_request_status_email.text.haml new file mode 100644 index 00000000000..8750bf86e2c --- /dev/null +++ b/app/views/notify/merge_request_status_email.text.haml @@ -0,0 +1,8 @@ += "Merge Request ##{@merge_request.iid} was #{@mr_status} by #{@updated_by.name}" + +Merge Request url: #{project_merge_request_url(@merge_request.target_project, @merge_request)} + += merge_path_description(@merge_request, 'to') + +Author: #{@merge_request.author_name} +Assignee: #{@merge_request.assignee_name} diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index 644109848b4..df355f6f07a 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -242,6 +242,26 @@ describe NotificationService do Notify.should_not_receive(:closed_issue_email).with(user_id, issue.id, @u_disabled.id) end end + + describe :reopen_issue do + it 'should send email to issue assignee and issue author' do + should_email(issue.assignee_id) + should_email(issue.author_id) + should_email(@u_watcher.id) + should_not_email(@u_participating.id) + should_not_email(@u_disabled.id) + + notification.reopen_issue(issue, @u_disabled) + end + + def should_email(user_id) + Notify.should_receive(:issue_status_changed_email).with(user_id, issue.id, 'reopened', @u_disabled.id) + end + + def should_not_email(user_id) + Notify.should_not_receive(:issue_status_changed_email).with(user_id, issue.id, 'reopened', @u_disabled.id) + end + end end describe 'Merge Requests' do @@ -322,6 +342,24 @@ describe NotificationService do Notify.should_not_receive(:merged_merge_request_email).with(user_id, merge_request.id, @u_disabled.id) end end + + describe :reopen_merge_request do + it do + should_email(merge_request.assignee_id) + should_email(@u_watcher.id) + should_not_email(@u_participating.id) + should_not_email(@u_disabled.id) + notification.reopen_mr(merge_request, @u_disabled) + end + + def should_email(user_id) + Notify.should_receive(:merge_request_status_email).with(user_id, merge_request.id, 'reopened', @u_disabled.id) + end + + def should_not_email(user_id) + Notify.should_not_receive(:merge_request_status_email).with(user_id, merge_request.id, 'reopened', @u_disabled.id) + end + end end describe 'Projects' do |
