mirror of
https://github.com/mastodon/mastodon.git
synced 2024-11-20 03:25:17 +01:00
Add coverage and use mailer callback to check functional user in notification mailer (#32055)
This commit is contained in:
parent
c2ef83ea4c
commit
83574f641a
@ -13,12 +13,14 @@ class NotificationMailer < ApplicationMailer
|
|||||||
before_action :set_account, only: [:follow, :favourite, :reblog, :follow_request]
|
before_action :set_account, only: [:follow, :favourite, :reblog, :follow_request]
|
||||||
after_action :set_list_headers!
|
after_action :set_list_headers!
|
||||||
|
|
||||||
|
before_deliver :verify_functional_user
|
||||||
|
|
||||||
default to: -> { email_address_with_name(@user.email, @me.username) }
|
default to: -> { email_address_with_name(@user.email, @me.username) }
|
||||||
|
|
||||||
layout 'mailer'
|
layout 'mailer'
|
||||||
|
|
||||||
def mention
|
def mention
|
||||||
return unless @user.functional? && @status.present?
|
return if @status.blank?
|
||||||
|
|
||||||
locale_for_account(@me) do
|
locale_for_account(@me) do
|
||||||
mail subject: default_i18n_subject(name: @status.account.acct)
|
mail subject: default_i18n_subject(name: @status.account.acct)
|
||||||
@ -26,15 +28,13 @@ class NotificationMailer < ApplicationMailer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def follow
|
def follow
|
||||||
return unless @user.functional?
|
|
||||||
|
|
||||||
locale_for_account(@me) do
|
locale_for_account(@me) do
|
||||||
mail subject: default_i18n_subject(name: @account.acct)
|
mail subject: default_i18n_subject(name: @account.acct)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def favourite
|
def favourite
|
||||||
return unless @user.functional? && @status.present?
|
return if @status.blank?
|
||||||
|
|
||||||
locale_for_account(@me) do
|
locale_for_account(@me) do
|
||||||
mail subject: default_i18n_subject(name: @account.acct)
|
mail subject: default_i18n_subject(name: @account.acct)
|
||||||
@ -42,7 +42,7 @@ class NotificationMailer < ApplicationMailer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def reblog
|
def reblog
|
||||||
return unless @user.functional? && @status.present?
|
return if @status.blank?
|
||||||
|
|
||||||
locale_for_account(@me) do
|
locale_for_account(@me) do
|
||||||
mail subject: default_i18n_subject(name: @account.acct)
|
mail subject: default_i18n_subject(name: @account.acct)
|
||||||
@ -50,8 +50,6 @@ class NotificationMailer < ApplicationMailer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def follow_request
|
def follow_request
|
||||||
return unless @user.functional?
|
|
||||||
|
|
||||||
locale_for_account(@me) do
|
locale_for_account(@me) do
|
||||||
mail subject: default_i18n_subject(name: @account.acct)
|
mail subject: default_i18n_subject(name: @account.acct)
|
||||||
end
|
end
|
||||||
@ -75,6 +73,10 @@ class NotificationMailer < ApplicationMailer
|
|||||||
@account = @notification.from_account
|
@account = @notification.from_account
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def verify_functional_user
|
||||||
|
throw(:abort) unless @user.functional?
|
||||||
|
end
|
||||||
|
|
||||||
def set_list_headers!
|
def set_list_headers!
|
||||||
headers(
|
headers(
|
||||||
'List-ID' => "<#{@type}.#{@me.username}.#{Rails.configuration.x.local_domain}>",
|
'List-ID' => "<#{@type}.#{@me.username}.#{Rails.configuration.x.local_domain}>",
|
||||||
|
@ -3,6 +3,17 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe NotificationMailer do
|
RSpec.describe NotificationMailer do
|
||||||
|
shared_examples 'delivery to non functional user' do
|
||||||
|
context 'when user is not functional' do
|
||||||
|
before { receiver.update(confirmed_at: nil) }
|
||||||
|
|
||||||
|
it 'does not deliver mail' do
|
||||||
|
emails = capture_emails { mail.deliver_now }
|
||||||
|
expect(emails).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) }
|
let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) }
|
||||||
let(:sender) { Fabricate(:account, username: 'bob') }
|
let(:sender) { Fabricate(:account, username: 'bob') }
|
||||||
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') }
|
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') }
|
||||||
@ -24,6 +35,8 @@ RSpec.describe NotificationMailer do
|
|||||||
.and have_thread_headers
|
.and have_thread_headers
|
||||||
.and have_standard_headers('mention').for(receiver)
|
.and have_standard_headers('mention').for(receiver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples 'delivery to non functional user'
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'follow' do
|
describe 'follow' do
|
||||||
@ -40,6 +53,8 @@ RSpec.describe NotificationMailer do
|
|||||||
.and(have_body_text('bob is now following you'))
|
.and(have_body_text('bob is now following you'))
|
||||||
.and have_standard_headers('follow').for(receiver)
|
.and have_standard_headers('follow').for(receiver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples 'delivery to non functional user'
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'favourite' do
|
describe 'favourite' do
|
||||||
@ -58,6 +73,8 @@ RSpec.describe NotificationMailer do
|
|||||||
.and have_thread_headers
|
.and have_thread_headers
|
||||||
.and have_standard_headers('favourite').for(receiver)
|
.and have_standard_headers('favourite').for(receiver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples 'delivery to non functional user'
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'reblog' do
|
describe 'reblog' do
|
||||||
@ -76,6 +93,8 @@ RSpec.describe NotificationMailer do
|
|||||||
.and have_thread_headers
|
.and have_thread_headers
|
||||||
.and have_standard_headers('reblog').for(receiver)
|
.and have_standard_headers('reblog').for(receiver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples 'delivery to non functional user'
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'follow_request' do
|
describe 'follow_request' do
|
||||||
@ -92,6 +111,8 @@ RSpec.describe NotificationMailer do
|
|||||||
.and(have_body_text('bob has requested to follow you'))
|
.and(have_body_text('bob has requested to follow you'))
|
||||||
.and have_standard_headers('follow_request').for(receiver)
|
.and have_standard_headers('follow_request').for(receiver)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
include_examples 'delivery to non functional user'
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
Loading…
Reference in New Issue
Block a user