Commit 65f5496e0210be96b4803f655d1a4c94ef1e07fe

Authored by Pierre de La Morinerie
1 parent 36ea8645

Fix the merge notification email not being sent

The 'author_id_of_changes' attribute is not persisted in the database.
As we retrieve the merge request from the DB just before sending the
email, this attribute was always nil.

Also there was no tests for the merge notification code - tests have
been added.

Fix #6605
app/mailers/emails/merge_requests.rb
... ... @@ -29,11 +29,11 @@ module Emails
29 29 subject: subject("#{@merge_request.title} (!#{@merge_request.iid})"))
30 30 end
31 31  
32   - def merged_merge_request_email(recipient_id, merge_request_id)
  32 + def merged_merge_request_email(recipient_id, merge_request_id, updated_by_user_id)
33 33 @merge_request = MergeRequest.find(merge_request_id)
34 34 @project = @merge_request.project
35 35 @target_url = project_merge_request_url(@project, @merge_request)
36   - mail(from: sender(@merge_request.author_id_of_changes),
  36 + mail(from: sender(updated_by_user_id),
37 37 to: recipient(recipient_id),
38 38 subject: subject("#{@merge_request.title} (!#{@merge_request.iid})"))
39 39 end
... ...
app/services/notification_service.rb
... ... @@ -91,7 +91,7 @@ class NotificationService
91 91 recipients = recipients.concat(project_watchers(merge_request.target_project)).uniq
92 92  
93 93 recipients.each do |recipient|
94   - mailer.merged_merge_request_email(recipient.id, merge_request.id)
  94 + mailer.merged_merge_request_email(recipient.id, merge_request.id, merge_request.author_id_of_changes)
95 95 end
96 96 end
97 97  
... ...
spec/mailers/notify_spec.rb
... ... @@ -229,6 +229,7 @@ describe Notify do
229 229 end
230 230  
231 231 context 'for merge requests' do
  232 + let(:merge_author) { create(:user) }
232 233 let(:merge_request) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project) }
233 234 let(:merge_request_with_description) { create(:merge_request, author: current_user, assignee: assignee, source_project: project, target_project: project, description: Faker::Lorem.sentence) }
234 235  
... ... @@ -288,7 +289,30 @@ describe Notify do
288 289 it 'contains a link to the merge request' do
289 290 should have_body_text /#{project_merge_request_path project, merge_request}/
290 291 end
  292 + end
  293 +
  294 + describe 'that are merged' do
  295 + subject { Notify.merged_merge_request_email(recipient.id, merge_request.id, merge_author.id) }
  296 +
  297 + it_behaves_like 'a multiple recipients email'
  298 +
  299 + it 'is sent as the merge author' do
  300 + sender = subject.header[:from].addrs[0]
  301 + sender.display_name.should eq(merge_author.name)
  302 + sender.address.should eq(gitlab_sender)
  303 + end
  304 +
  305 + it 'has the correct subject' do
  306 + should have_subject /#{merge_request.title} \(!#{merge_request.iid}\)/
  307 + end
291 308  
  309 + it 'contains the new status' do
  310 + should have_body_text /merged/i
  311 + end
  312 +
  313 + it 'contains a link to the merge request' do
  314 + should have_body_text /#{project_merge_request_path project, merge_request}/
  315 + end
292 316 end
293 317 end
294 318 end
... ...
spec/services/notification_service_spec.rb
... ... @@ -233,15 +233,15 @@ describe NotificationService do
233 233 should_email(@u_watcher.id)
234 234 should_not_email(@u_participating.id)
235 235 should_not_email(@u_disabled.id)
236   - notification.merge_mr(merge_request)
  236 + notification.merge_mr(merge_request, @u_disabled)
237 237 end
238 238  
239 239 def should_email(user_id)
240   - Notify.should_receive(:merged_merge_request_email).with(user_id, merge_request.id)
  240 + Notify.should_receive(:merged_merge_request_email).with(user_id, merge_request.id, @u_disabled.id)
241 241 end
242 242  
243 243 def should_not_email(user_id)
244   - Notify.should_not_receive(:merged_merge_request_email).with(user_id, merge_request.id)
  244 + Notify.should_not_receive(:merged_merge_request_email).with(user_id, merge_request.id, @u_disabled.id)
245 245 end
246 246 end
247 247 end
... ...