feat(260929-if2): Erinnerung zusaetzlich per E-Mail, Doku und Aenderungsliste

- E-Mail-Planer: Anspruch vor dem Senden (genau eine Mail je Faelligkeit, hoechstens 3 Versuche), Systemlesen nur fuer die Kandidatenabfrage
- MailService.sendReminderEmail (Berliner Zeit, nur Text), GET /reminders/email-status, Haken im Formular mit Erklaerung
- Zugriffsklassifikation und Erlaubnisliste fuer forSystem nachgezogen, Aenderungsliste und Anwenderanleitung

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-29 14:10:06 +02:00
parent 709b41a007
commit 6879c756f2
21 changed files with 1038 additions and 21 deletions
+9
View File
@@ -3,6 +3,7 @@ import {
ReminderRequestError,
createReminder,
deleteReminder,
getReminderEmailStatus,
listReminders,
snoozeReminder,
updateReminder,
@@ -68,6 +69,14 @@ describe('reminders-api', () => {
expect(init.credentials).toBe('include');
});
it('getReminderEmailStatus ruft GET /reminders/email-status', async () => {
fetchMock.mockResolvedValue(ok({ smtpConfigured: true, hasEmail: false }));
await expect(getReminderEmailStatus()).resolves.toEqual({ smtpConfigured: true, hasEmail: false });
const [url, init] = fetchMock.mock.calls[0];
expect(url).toMatch(/\/reminders\/email-status$/);
expect(init.credentials).toBe('include');
});
it('bei 404 und 409 tragen die Fehler den Status', async () => {
fetchMock.mockResolvedValue({ ok: false, status: 404, json: async () => ({}) });
await expect(deleteReminder('x')).rejects.toMatchObject({ status: 404 });