From 6e6f34bffb641ae698177055b8f3528ec41fb7c8 Mon Sep 17 00:00:00 2001
From: Dimitris Karakasilis <jimmykarily@gmail.com>
Date: Mon, 26 Sep 2016 18:34:56 +0300
Subject: [PATCH] Notify current_user about automatic merge after successful
 build

Fixes: https://gitlab.com/gitlab-org/gitlab-ce/issues/14409
---
 CHANGELOG                                  |  1 +
 app/services/notification_service.rb       | 14 +++++++++-----
 spec/services/notification_service_spec.rb | 14 ++++++++++++++
 3 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index da436431c7f..f9ac51beb2f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -15,6 +15,7 @@ v 8.13.0 (unreleased)
   - Add organization field to user profile
   - Optimize GitHub importing for speed and memory
   - API: expose pipeline data in builds API (!6502, Guilherme Salazar)
+  - Notify the Merger about merge after successful build (Dimitris Karakasilis)
 
 v 8.12.2 (unreleased)
   - Added University content to doc/university
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 6139ed56e25..2cc0c31d77d 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -134,7 +134,8 @@ class NotificationService
       merge_request,
       merge_request.target_project,
       current_user,
-      :merged_merge_request_email
+      :merged_merge_request_email,
+      skip_current_user: !merge_request.merge_when_build_succeeds?
     )
   end
 
@@ -514,9 +515,11 @@ class NotificationService
     end
   end
 
-  def close_resource_email(target, project, current_user, method)
+  def close_resource_email(target, project, current_user, method, skip_current_user: true)
     action = method == :merged_merge_request_email ? "merge" : "close"
-    recipients = build_recipients(target, project, current_user, action: action)
+
+    recipients = build_recipients(target, project, current_user, action: action,
+                                  skip_current_user: skip_current_user)
 
     recipients.each do |recipient|
       mailer.send(method, recipient.id, target.id, current_user.id).deliver_later
@@ -557,7 +560,7 @@ class NotificationService
     end
   end
 
-  def build_recipients(target, project, current_user, action: nil, previous_assignee: nil)
+  def build_recipients(target, project, current_user, action: nil, previous_assignee: nil, skip_current_user: true)
     custom_action = build_custom_key(action, target)
 
     recipients = target.participants(current_user)
@@ -586,7 +589,8 @@ class NotificationService
     recipients = reject_unsubscribed_users(recipients, target)
     recipients = reject_users_without_access(recipients, target)
 
-    recipients.delete(current_user)
+    recipients.delete(current_user) if skip_current_user
+
     recipients.uniq
   end
 
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index 0d152534c38..d820646ebdf 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -962,6 +962,20 @@ describe NotificationService, services: true do
         should_not_email(@u_lazy_participant)
       end
 
+      it "notifies the merger when merge_when_build_succeeds is true" do
+        merge_request.merge_when_build_succeeds = true
+        notification.merge_mr(merge_request, @u_watcher)
+
+        should_email(@u_watcher)
+      end
+
+      it "does not notify the merger when merge_when_build_succeeds is false" do
+        merge_request.merge_when_build_succeeds = false
+        notification.merge_mr(merge_request, @u_watcher)
+
+        should_not_email(@u_watcher)
+      end
+
       context 'participating' do
         context 'by assignee' do
           before do
-- 
GitLab