summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/mailers/emails/merge_requests.rb12
-rw-r--r--app/services/issues/reopen_service.rb1
-rw-r--r--app/services/merge_requests/reopen_service.rb1
-rw-r--r--app/services/notification_service.rb18
-rw-r--r--app/views/notify/merge_request_status_email.html.haml2
-rw-r--r--app/views/notify/merge_request_status_email.text.haml8
-rw-r--r--spec/services/notification_service_spec.rb38
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