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:
@@ -41,6 +41,8 @@ const custom = {
|
||||
subject: 'Hallo {{vorname}}',
|
||||
heading: 'Willkommen, {{name}}!',
|
||||
intro: 'Eigene Einleitung',
|
||||
loginHintDirectory: 'Eigener Verzeichnis-Hinweis',
|
||||
loginHintLocal: 'Eigener Lokal-Hinweis',
|
||||
closing: 'Ihr IT-Team',
|
||||
};
|
||||
|
||||
@@ -147,7 +149,76 @@ describe('WelcomeMailTemplateEditor', () => {
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it('Speichern schickt die vier Texte und meldet Erfolg; Status zeigt die eigene Vorlage', async () => {
|
||||
it('Anmeldehinweise: beide Felder nach dem Einleitungstext, mit Standardtext bzw. eigener Vorlage vorbelegt', async () => {
|
||||
await renderLoaded();
|
||||
const dir = screen.getByLabelText(
|
||||
'Anmeldehinweis für Verzeichniskonten',
|
||||
) as HTMLTextAreaElement;
|
||||
const local = screen.getByLabelText('Anmeldehinweis für lokale Konten') as HTMLTextAreaElement;
|
||||
expect(dir.value).toBe(
|
||||
'Melden Sie sich mit Ihrem Benutzernamen und Ihrem gewohnten Windows-Passwort an.',
|
||||
);
|
||||
expect(local.value).toBe(
|
||||
'Bevor Sie sich zum ersten Mal anmelden, legen Sie bitte Ihr persönliches Passwort fest.',
|
||||
);
|
||||
// Reihenfolge: Einleitung → Verzeichnis → lokal → Abschluss
|
||||
const intro = screen.getByLabelText('Einleitungstext');
|
||||
const closing = screen.getByLabelText('Abschlusstext');
|
||||
const follows = (a: Element, b: Element) =>
|
||||
Boolean(a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING);
|
||||
expect(follows(intro, dir)).toBe(true);
|
||||
expect(follows(dir, local)).toBe(true);
|
||||
expect(follows(local, closing)).toBe(true);
|
||||
expect(screen.getByText(/direkt vor dem Knopf „Passwort festlegen“/)).toBeTruthy();
|
||||
|
||||
cleanup();
|
||||
api.fetchWelcomeMailTemplate.mockResolvedValue(state(true));
|
||||
await renderLoaded();
|
||||
expect(
|
||||
(screen.getByLabelText('Anmeldehinweis für Verzeichniskonten') as HTMLTextAreaElement).value,
|
||||
).toBe(custom.loginHintDirectory);
|
||||
expect(
|
||||
(screen.getByLabelText('Anmeldehinweis für lokale Konten') as HTMLTextAreaElement).value,
|
||||
).toBe(custom.loginHintLocal);
|
||||
});
|
||||
|
||||
it('Anmeldehinweis: Pflichtfeld, Platzhalter-Klick fuegt ein, Fokus schaltet die Vorschau auf die Kontoart', async () => {
|
||||
await renderLoaded();
|
||||
const local = screen.getByLabelText('Anmeldehinweis für lokale Konten') as HTMLTextAreaElement;
|
||||
fireEvent.change(local, { target: { value: 'Hallo ' } });
|
||||
local.focus();
|
||||
local.setSelectionRange(6, 6);
|
||||
fireEvent.click(screen.getByRole('button', { name: '{{vorname}} einfügen' }));
|
||||
expect(local.value).toBe('Hallo {{vorname}}');
|
||||
expect(screen.getByRole('button', { name: 'Lokales Konto' }).getAttribute('aria-pressed')).toBe(
|
||||
'true',
|
||||
);
|
||||
|
||||
fireEvent.change(local, { target: { value: ' ' } });
|
||||
expect(await screen.findByText('Bitte füllen Sie dieses Feld aus.')).toBeTruthy();
|
||||
expect((screen.getByRole('button', { name: 'Speichern' }) as HTMLButtonElement).disabled).toBe(
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
it('Speichern schickt alle sechs Texte inkl. Anmeldehinweise', async () => {
|
||||
const user = userEvent.setup();
|
||||
await renderLoaded();
|
||||
fireEvent.change(screen.getByLabelText('Anmeldehinweis für Verzeichniskonten'), {
|
||||
target: { value: 'Mit dem Firmenkennwort anmelden, {{vorname}}.' },
|
||||
});
|
||||
fireEvent.change(screen.getByLabelText('Anmeldehinweis für lokale Konten'), {
|
||||
target: { value: 'Erst Passwort setzen.' },
|
||||
});
|
||||
await user.click(screen.getByRole('button', { name: 'Speichern' }));
|
||||
expect(api.saveWelcomeMailTemplate).toHaveBeenCalledWith({
|
||||
...defaults,
|
||||
loginHintDirectory: 'Mit dem Firmenkennwort anmelden, {{vorname}}.',
|
||||
loginHintLocal: 'Erst Passwort setzen.',
|
||||
});
|
||||
});
|
||||
|
||||
it('Speichern schickt die Texte und meldet Erfolg; Status zeigt die eigene Vorlage', async () => {
|
||||
const user = userEvent.setup();
|
||||
const subject = await renderLoaded();
|
||||
fireEvent.change(subject, { target: { value: 'Neu für {{firma}}' } });
|
||||
|
||||
Reference in New Issue
Block a user