ce7e674159
Comme on intercepte chaque `StandardError` pour le monitoring des mails en erreur, l'erreur n'était plus visible par le job, et les emails étaient perdus. A la place on re-raise une autre erreur pour que le job échoue afin de retry plus tard. Pour ne pas être "avalée" par le rescue_from, cette erreur doit héritée d'`Exception` plutôt que `StandardError`. NB: il faudrait parvenir à écrire un test pour vérifier ce comportement. Pour être vérifié en dev, il faut activer `raise_delivery_errors` comme en production.
63 lines
1.8 KiB
Ruby
63 lines
1.8 KiB
Ruby
RSpec.describe InviteMailer, type: :mailer do
|
|
let(:deliver) { mailer.deliver_now }
|
|
|
|
describe '.invite_user' do
|
|
let(:mailer) { InviteMailer.invite_user(invite) }
|
|
|
|
let(:invite) { create(:invite, user: create(:user)) }
|
|
it 'creates a target_user_link' do
|
|
expect { deliver }
|
|
.to change { TargetedUserLink.where(target_model: invite, user: invite.user).count }
|
|
.from(0).to(1)
|
|
end
|
|
|
|
context 'when it fails' do
|
|
it 'creates only one target_user_link' do
|
|
send_mail_values = [:raise, true]
|
|
allow_any_instance_of(InviteMailer).to receive(:send_mail) do
|
|
v = send_mail_values.shift
|
|
v == :raise ? raise("boom") : v
|
|
end
|
|
|
|
begin
|
|
mailer.body
|
|
rescue MailDeliveryError
|
|
nil
|
|
end
|
|
|
|
mailer.body
|
|
expect(TargetedUserLink.where(target_model: invite, user: invite.user).count).to eq(1)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.invite_guest' do
|
|
let(:mailer) { InviteMailer.invite_guest(invite) }
|
|
let(:invite) { create(:invite, user: nil, email: 'kikoo@lol.fr') }
|
|
|
|
it 'creates a target_user_link' do
|
|
expect { deliver }
|
|
.to change { TargetedUserLink.where(target_model: invite, user: nil).count }
|
|
.from(0).to(1)
|
|
end
|
|
|
|
context 'when it fails' do
|
|
it 'creates only one target_user_link' do
|
|
send_mail_values = [:raise, true]
|
|
allow_any_instance_of(InviteMailer).to receive(:send_mail) do
|
|
v = send_mail_values.shift
|
|
v == :raise ? raise("boom") : v
|
|
end
|
|
|
|
begin
|
|
mailer.body
|
|
rescue MailDeliveryError
|
|
nil
|
|
end
|
|
|
|
mailer.body
|
|
expect(TargetedUserLink.where(target_model: invite, user: invite.user).count).to eq(1)
|
|
end
|
|
end
|
|
end
|
|
end
|