Skip to content
Snippets Groups Projects
Commit 97f2b5f6 authored by Toon Claes's avatar Toon Claes
Browse files

Make mail notifications of discussion notes In-Reply-To of each other

When a note is part of a discussion, the email sent out should be
`In-Reply-To` the previous note in that discussion.

Closes gitlab-org/gitlab-ce#36054
parent 823a9d35
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -5,7 +5,7 @@ module Emails
 
@commit = @note.noteable
@target_url = project_commit_url(*note_target_url_options)
mail_answer_thread(@commit, note_thread_options(recipient_id))
mail_answer_note_thread(@commit, @note, note_thread_options(recipient_id))
end
 
def note_issue_email(recipient_id, note_id)
Loading
Loading
@@ -13,7 +13,7 @@ module Emails
 
@issue = @note.noteable
@target_url = project_issue_url(*note_target_url_options)
mail_answer_thread(@issue, note_thread_options(recipient_id))
mail_answer_note_thread(@issue, @note, note_thread_options(recipient_id))
end
 
def note_merge_request_email(recipient_id, note_id)
Loading
Loading
@@ -21,7 +21,7 @@ module Emails
 
@merge_request = @note.noteable
@target_url = project_merge_request_url(*note_target_url_options)
mail_answer_thread(@merge_request, note_thread_options(recipient_id))
mail_answer_note_thread(@merge_request, @note, note_thread_options(recipient_id))
end
 
def note_snippet_email(recipient_id, note_id)
Loading
Loading
@@ -29,7 +29,7 @@ module Emails
 
@snippet = @note.noteable
@target_url = project_snippet_url(*note_target_url_options)
mail_answer_thread(@snippet, note_thread_options(recipient_id))
mail_answer_note_thread(@snippet, @note, note_thread_options(recipient_id))
end
 
def note_personal_snippet_email(recipient_id, note_id)
Loading
Loading
@@ -37,7 +37,7 @@ module Emails
 
@snippet = @note.noteable
@target_url = snippet_url(@note.noteable)
mail_answer_thread(@snippet, note_thread_options(recipient_id))
mail_answer_note_thread(@snippet, @note, note_thread_options(recipient_id))
end
 
private
Loading
Loading
Loading
Loading
@@ -156,6 +156,18 @@ class Notify < BaseMailer
mail_thread(model, headers)
end
 
def mail_answer_note_thread(model, note, headers = {})
headers['Message-ID'] = message_id(note)
headers['In-Reply-To'] = message_id(note.replies_to)
headers['References'] = message_id(model)
headers['X-GitLab-Discussion-ID'] = note.discussion.id if note.part_of_discussion?
headers[:subject]&.prepend('Re: ')
mail_thread(model, headers)
end
def reply_key
@reply_key ||= SentNotification.reply_key
end
Loading
Loading
Loading
Loading
@@ -344,6 +344,15 @@ class Note < ActiveRecord::Base
end
end
 
def replies_to
if part_of_discussion?
previous_note = to_discussion.notes.where('id < ?', id).last
return previous_note if previous_note
end
noteable
end
def expire_etag_cache
return unless noteable&.discussions_rendered_on_frontend?
 
Loading
Loading
---
title: Make mail notifications of discussion notes In-Reply-To of each other
merge_request: 14289
author:
type: changed
Loading
Loading
@@ -725,6 +725,18 @@ describe Note do
end
end
 
describe '#replies_to' do
context 'when part of a discussion' do
subject { create(:discussion_note_on_issue) }
let(:note) { create(:discussion_note_on_issue, in_reply_to: subject) }
end
context 'when not part of a discussion' do
subject { create(:note) }
let(:note) { create(:note, in_reply_to: subject) }
end
end
describe 'expiring ETag cache' do
let(:note) { build(:note_on_issue) }
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment