feat(admin): Anmeldehinweise der Willkommensmail in der Vorlage bearbeitbar
Neue Felder loginHintDirectory/loginHintLocal (Platzhalter, Pflicht, max. 1000), Migration 20260930170000 (nullable, leer = Standard aus @tessera/shared). Knopf Passwort festlegen und Gueltigkeitshinweis bleiben fest; local-no-link wird nie erzeugt und bleibt fest. Vorschau springt beim Bearbeiten auf die passende Kontoart. Lokal im Browser nachgewiesen. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { BadGatewayException, BadRequestException, ConflictException } from '@nestjs/common';
|
||||
import type { WelcomeMailTexts } from '@tessera/shared';
|
||||
import { DEFAULT_WELCOME_MAIL_TEXTS, type WelcomeMailTexts } from '@tessera/shared';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import {
|
||||
normalizeOrigin,
|
||||
@@ -265,6 +265,8 @@ describe('WelcomeMailService.send — eigene Vorlage', () => {
|
||||
subject: 'Hallo {{vorname}} bei {{firma}}',
|
||||
heading: 'Schön, dass Sie da sind, {{name}}!',
|
||||
intro: 'Erste Zeile\nzweite Zeile\n\nIhr Konto: {{benutzername}} / {{email}} / {{adresse}}',
|
||||
loginHintDirectory: 'Bitte mit dem Kennwort von {{firma}} anmelden, {{vorname}}.',
|
||||
loginHintLocal: 'Zuerst ein eigenes Passwort vergeben, {{vorname}}.',
|
||||
closing: 'Grüße vom <b>IT-Team</b>',
|
||||
};
|
||||
|
||||
@@ -297,6 +299,19 @@ describe('WelcomeMailService.send — eigene Vorlage', () => {
|
||||
expect(rendered.html).toContain('Zu Tessera');
|
||||
expect(rendered.html).toContain('Benutzername');
|
||||
expect(rendered.text).toContain('Erste Zeile\nzweite Zeile');
|
||||
// Anmeldehinweis fuer lokale Konten aus der Vorlage
|
||||
expect(rendered.html).toContain('Zuerst ein eigenes Passwort vergeben, Max.');
|
||||
expect(rendered.html).not.toContain('persönliches Passwort fest');
|
||||
});
|
||||
|
||||
it('Verzeichniskonto mit eigener Vorlage: eigener Verzeichnis-Hinweis statt Windows-Standard', async () => {
|
||||
const { service, mail } = make(undefined, undefined, makeTemplates({ t1: custom }));
|
||||
await service.send(ldapUser);
|
||||
const rendered = (mail.sendWelcomeMail.mock.calls[0] as any[])[2];
|
||||
expect(rendered.html).toContain('Bitte mit dem Kennwort von Firma t1 anmelden');
|
||||
expect(rendered.html).not.toContain('gewohnten Windows-Passwort');
|
||||
expect(rendered.html).not.toContain('Zuerst ein eigenes Passwort vergeben');
|
||||
expect(rendered.text).toContain('Bitte mit dem Kennwort von Firma t1 anmelden');
|
||||
});
|
||||
|
||||
it('Vorlage eines ANDEREN Mandanten wirkt nicht', async () => {
|
||||
@@ -315,11 +330,15 @@ describe('WelcomeMailService.send — eigene Vorlage', () => {
|
||||
});
|
||||
});
|
||||
|
||||
const DEFAULT_TEXTS: WelcomeMailTexts = { ...DEFAULT_WELCOME_MAIL_TEXTS };
|
||||
|
||||
describe('WelcomeMailService.preview', () => {
|
||||
const texts: WelcomeMailTexts = {
|
||||
subject: 'Betreff {{name}}',
|
||||
heading: 'Hallo {{vorname}}',
|
||||
intro: 'Bei {{firma}}',
|
||||
loginHintDirectory: 'Verzeichnis-Hinweis {{benutzername}}',
|
||||
loginHintLocal: 'Lokal-Hinweis {{benutzername}}',
|
||||
closing: '',
|
||||
};
|
||||
|
||||
@@ -331,6 +350,8 @@ describe('WelcomeMailService.preview', () => {
|
||||
expect(rendered.html).toContain('Hallo Max');
|
||||
expect(rendered.html).toContain('Bei Firma t1');
|
||||
expect(rendered.html).toContain('/reset-password/beispiel');
|
||||
expect(rendered.html).toContain('Lokal-Hinweis max.mustermann');
|
||||
expect(rendered.html).not.toContain('Verzeichnis-Hinweis');
|
||||
expect(rendered.html).not.toContain('cid:');
|
||||
expect(prisma.__log).toHaveLength(0);
|
||||
expect(mail.sendWelcomeMail).not.toHaveBeenCalled();
|
||||
@@ -338,9 +359,12 @@ describe('WelcomeMailService.preview', () => {
|
||||
|
||||
it('Verzeichniskonto-Variante: Windows-Hinweis statt Passwort-Knopf', async () => {
|
||||
const { service } = make();
|
||||
const rendered = await service.preview('t1', texts, 'directory');
|
||||
const rendered = await service.preview('t1', DEFAULT_TEXTS, 'directory');
|
||||
expect(rendered.html).toContain('gewohnten Windows-Passwort');
|
||||
expect(rendered.html).not.toContain('Passwort festlegen');
|
||||
const custom = await service.preview('t1', texts, 'directory');
|
||||
expect(custom.html).toContain('Verzeichnis-Hinweis max.mustermann');
|
||||
expect(custom.html).not.toContain('Lokal-Hinweis');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -349,6 +373,8 @@ describe('WelcomeMailService.sendTest', () => {
|
||||
subject: 'Test {{name}}',
|
||||
heading: 'Hallo {{vorname}}',
|
||||
intro: 'Text',
|
||||
loginHintDirectory: DEFAULT_WELCOME_MAIL_TEXTS.loginHintDirectory,
|
||||
loginHintLocal: 'Eigener Lokal-Hinweis für {{vorname}}',
|
||||
closing: 'Gruß',
|
||||
};
|
||||
|
||||
@@ -371,6 +397,8 @@ describe('WelcomeMailService.sendTest', () => {
|
||||
expect(rendered.html).toContain('Passwort festlegen');
|
||||
expect(rendered.html).toContain('Beispiel-Link');
|
||||
expect(rendered.html).not.toContain('reset-password');
|
||||
// Anmeldehinweis fuer lokale Konten aus dem Formularinhalt
|
||||
expect(rendered.html).toContain('Eigener Lokal-Hinweis für Ada');
|
||||
expect(rendered.text).not.toContain('reset-password');
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user