class NotifyPreview < ActionMailer::Preview def note_merge_request_email_for_individual_note note_email(:note_merge_request_email) do note = <<-MD.strip_heredoc This is an individual note on a merge request :smiley: In this notification email, we expect to see: - The note contents (that's what you're looking at) - A link to view this note on Gitlab - An explanation for why the user is receiving this notification MD create_note(noteable_type: 'merge_request', noteable_id: merge_request.id, note: note) end end def note_merge_request_email_for_discussion note_email(:note_merge_request_email) do note = <<-MD.strip_heredoc This is a new discussion on a merge request :smiley: In this notification email, we expect to see: - A line saying who started this discussion - The note contents (that's what you're looking at) - A link to view this discussion on Gitlab - An explanation for why the user is receiving this notification MD create_note(noteable_type: 'merge_request', noteable_id: merge_request.id, type: 'DiscussionNote', note: note) end end def note_merge_request_email_for_diff_discussion note_email(:note_merge_request_email) do note = <<-MD.strip_heredoc This is a new discussion on a merge request :smiley: In this notification email, we expect to see: - A line saying who started this discussion and on what file - The diff - The note contents (that's what you're looking at) - A link to view this discussion on Gitlab - An explanation for why the user is receiving this notification MD position = Gitlab::Diff::Position.new( old_path: "files/ruby/popen.rb", new_path: "files/ruby/popen.rb", old_line: nil, new_line: 14, diff_refs: merge_request.diff_refs ) create_note(noteable_type: 'merge_request', noteable_id: merge_request.id, type: 'DiffNote', position: position, note: note) end end private def project @project ||= Project.find_by_full_path('gitlab-org/gitlab-test') end def merge_request @merge_request ||= project.merge_requests.find_by(source_branch: 'master', target_branch: 'feature') end def user @user ||= User.last end def create_note(params) Notes::CreateService.new(project, user, params).execute end def note_email(method) cleanup do note = yield Notify.public_send(method, user.id, note) end end def cleanup email = nil ActiveRecord::Base.transaction do email = yield raise ActiveRecord::Rollback end email end def pipeline_success_email pipeline = Ci::Pipeline.last Notify.pipeline_success_email(pipeline, pipeline.user.try(:email)) end def pipeline_failed_email pipeline = Ci::Pipeline.last Notify.pipeline_failed_email(pipeline, pipeline.user.try(:email)) end end