fix(mail): remove dead return before sendMail, add firstName personalization
- Remove I18n dependency injection from MailService constructor - Hardcode German email subject/body strings directly in the service - Add optional firstName field to userSignUp and forgotPassword methods - Wire firstName from user object through auth.service.ts call sites - Add comprehensive unit tests for MailService Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
61
myteamwallet_backend/src/mail/mail.service.spec.ts
Normal file
61
myteamwallet_backend/src/mail/mail.service.spec.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { MailerService } from '@nestjs-modules/mailer';
|
||||
import { MailService } from './mail.service';
|
||||
|
||||
describe('MailService', () => {
|
||||
let service: MailService;
|
||||
let sendMail: jest.Mock;
|
||||
let configGet: jest.Mock;
|
||||
|
||||
beforeEach(() => {
|
||||
sendMail = jest.fn().mockResolvedValue(undefined);
|
||||
configGet = jest.fn().mockReturnValue('https://app.example.com');
|
||||
|
||||
service = new MailService(
|
||||
{ sendMail } as unknown as MailerService,
|
||||
{ get: configGet } as unknown as ConfigService,
|
||||
);
|
||||
});
|
||||
|
||||
it('sends the activation mail with the confirm-email link', async () => {
|
||||
await service.userSignUp({
|
||||
to: 'user@example.com',
|
||||
data: { hash: 'abc123', firstName: 'Max' },
|
||||
});
|
||||
|
||||
expect(sendMail).toHaveBeenCalledTimes(1);
|
||||
const call = sendMail.mock.calls[0][0];
|
||||
expect(call.to).toBe('user@example.com');
|
||||
expect(call.template).toBe('activation');
|
||||
expect(call.context.url).toBe(
|
||||
'https://app.example.com/confirm-email/abc123',
|
||||
);
|
||||
expect(call.context.firstName).toBe('Max');
|
||||
});
|
||||
|
||||
it('sends the reset-password mail with the password-change link', async () => {
|
||||
await service.forgotPassword({
|
||||
to: 'user@example.com',
|
||||
data: { hash: 'xyz789', firstName: 'Erika' },
|
||||
});
|
||||
|
||||
expect(sendMail).toHaveBeenCalledTimes(1);
|
||||
const call = sendMail.mock.calls[0][0];
|
||||
expect(call.to).toBe('user@example.com');
|
||||
expect(call.template).toBe('reset-password');
|
||||
expect(call.context.url).toBe(
|
||||
'https://app.example.com/password-change/xyz789',
|
||||
);
|
||||
expect(call.context.firstName).toBe('Erika');
|
||||
});
|
||||
|
||||
it('works without a firstName (optional personalization)', async () => {
|
||||
await service.userSignUp({
|
||||
to: 'user@example.com',
|
||||
data: { hash: 'abc123' },
|
||||
});
|
||||
|
||||
const call = sendMail.mock.calls[0][0];
|
||||
expect(call.context.firstName).toBeUndefined();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user