Terminplaner: Staff-Aktivierung nur mit Zustimmung in Textform (Modus on), Portal

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-05 04:44:44 +00:00
1 parent 5b5b4b90eb
commit bade4edb74
5 files changed
+381 -7

No files matched your search

+31 -1
View File
@@ -1,7 +1,11 @@
import { test, beforeEach, afterEach } from 'node:test'
import assert from 'node:assert/strict'
import { config } from '../server/config.js'
import { termineAus, termineFuerKunde, termineModus } from '../server/services/termine/schalter.js'
import * as schalter from '../server/services/termine/schalter.js'
const { termineAus, termineFuerKunde, termineModus } = schalter
// Namensraum für termineTextformNoetig: fehlt der Export, scheitert nur sein Test
const termineTextformNoetig = (email) => schalter.termineTextformNoetig(email)
const TERMINE_ENV = [
'TERMINE_ENABLED',
@@ -162,3 +166,29 @@ test('termineFuerKunde: on gilt fuer alle ohne E-Mail-Filter', () => {
assert.equal(termineFuerKunde('jemand@example.com'), true)
assert.equal(termineFuerKunde(undefined), true)
})
test('termineTextformNoetig: nur im Modus on und nur außerhalb der Pilotliste; „*“ und fehlende Adresse befreien nicht', () => {
for (const mode of ['off', 'pilot', undefined, '', 'banane']) {
config.termine.mode = mode
config.termine.pilotEmails = []
assert.equal(termineTextformNoetig('jemand@example.com'), false, `mode=${JSON.stringify(mode)}`)
config.termine.pilotEmails = ['*']
assert.equal(termineTextformNoetig('jemand@example.com'), false, `mode=${JSON.stringify(mode)} mit Stern`)
}
config.termine.mode = 'on'
config.termine.pilotEmails = []
assert.equal(termineTextformNoetig('jemand@example.com'), true)
config.termine.pilotEmails = ['kenso.gri@gmail.com']
assert.equal(termineTextformNoetig('jemand@example.com'), true)
assert.equal(termineTextformNoetig('KENSO.gri@gmail.com '), false, 'Pilotadresse, Schreibweise egal')
assert.equal(termineTextformNoetig('kenso.gri@gmail.com.evil.de'), true)
config.termine.pilotEmails = ['*']
assert.equal(termineTextformNoetig('jemand@example.com'), true, 'der Stern zählt in on nicht als Pilotadresse')
assert.equal(termineTextformNoetig('*'), true)
config.termine.pilotEmails = ['*', 'kenso.gri@gmail.com']
assert.equal(termineTextformNoetig('kenso.gri@gmail.com'), false)
for (const email of [undefined, null, '', ' ']) assert.equal(termineTextformNoetig(email), true, `ohne Adresse: ${JSON.stringify(email)}`)
// wirkt sofort wie die übrigen Schalter
config.termine.mode = 'pilot'
assert.equal(termineTextformNoetig('jemand@example.com'), false)
})