Terminplaner TP2: Bestell-Gate und Gesundheits-Stichwortpruefung
fragebogen.js ersetzt den Stub aus Block B: bestellpruefung (Kriterien (a) bis (h), je Punkt ein Eintrag, nach Schrittfolge sortiert, Abo-Punkt nur bei mitAbo !== false), SCHRITT_TITEL, gesundheitsWarnungen (Stichworte nur am Wortanfang, hoechstens 10 Meldungen) und bestellungAnsicht fuer die Bestellseite. einstellungen.js exportiert sichtbareLeistungen und MELDUNG_PFLICHT. Testhelfer bestellbarerStand und entwurfDoc; der Stub-Test entfaellt, die zwei B-Tests mit dem Stub laufen gegen das echte Gate. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ab47fabcb2
commit
008ad4fb1e
7 files changed
+869
-47
No files matched your search
@@ -0,0 +1,59 @@
|
||||
import { ausVorlage } from '../../server/services/termine/vorlagen.js'
|
||||
import { SCHRITTE, leerFragebogen } from '../../server/services/termine/fragebogen.js'
|
||||
|
||||
/**
|
||||
* Testhelfer fuer die Bestellpruefung des Terminplaners (TP2, Task C2): ein Entwurf, der alle Punkte des Gates erfuellt,
|
||||
* und das termineConfig-Dokument dazu. Erst nach useTestEnv() dynamisch importieren, wenn der Test config.js mit
|
||||
* Testwerten braucht (die Vorlagen ziehen config.js mit).
|
||||
*/
|
||||
|
||||
const BETRIEB = {
|
||||
name: 'Salon Muster',
|
||||
email: 'salon@example.invalid',
|
||||
telefon: '06301 12345',
|
||||
adresse: 'Hauptstraße 1, 67655 Kaiserslautern',
|
||||
impressumUrl: 'https://salon.example.invalid/impressum',
|
||||
datenschutzUrl: 'https://salon.example.invalid/datenschutz',
|
||||
bundesland: 'RP',
|
||||
}
|
||||
|
||||
/**
|
||||
* Ein bestellbarer Entwurf: Vorlage `salon` mit Telefon, Anschrift, Impressum und Datenschutz, alle Schritte bestaetigt,
|
||||
* Bundesland gewaehlt, Preise geprueft, Einbau `inline`, Branche `salon`. Bei jedem Aufruf neue Objekte (neue IDs).
|
||||
* Mit `abo: { ok: true }` ergibt bestellpruefung() []; Tests aendern einzelne Felder, um genau einen Punkt zu oeffnen.
|
||||
* @param {{ now?: Date }} [optionen]
|
||||
* @returns {{ einstellung: object, fragebogen: object }}
|
||||
*/
|
||||
export function bestellbarerStand({ now = new Date() } = {}) {
|
||||
const einstellung = ausVorlage('salon', BETRIEB, now)
|
||||
const leer = leerFragebogen()
|
||||
const fragebogen = {
|
||||
...leer,
|
||||
branche: 'salon',
|
||||
bestaetigt: [...SCHRITTE],
|
||||
bundeslandGewaehlt: true,
|
||||
preiseGeprueft: true,
|
||||
einbau: { ...leer.einbau, modus: 'inline' },
|
||||
}
|
||||
return { einstellung, fragebogen }
|
||||
}
|
||||
|
||||
/**
|
||||
* termineConfig-Dokument (Dokument-ID = ID des portalFeatures-Dokuments) fuer aw.seed('termineConfig', …): Einstellung und
|
||||
* Fragebogen als JSON-Text wie in Produktion. Ohne `stand` der bestellbare Stand; ein Feld, das null/undefined ist, fehlt im Dokument.
|
||||
* @param {string} featureId
|
||||
* @param {{ customerId: string, projectId: string, stand?: { einstellung?: object|null, fragebogen?: object|null } }} optionen
|
||||
*/
|
||||
export function entwurfDoc(featureId, { customerId, projectId, stand = bestellbarerStand() }) {
|
||||
const doc = {
|
||||
$id: featureId,
|
||||
customerId,
|
||||
projectId,
|
||||
einstellung: JSON.stringify(stand.einstellung ?? {}),
|
||||
version: 1,
|
||||
updatedAt: '2026-10-04T10:00:00.000Z',
|
||||
updatedBy: 'test',
|
||||
}
|
||||
if (stand.fragebogen !== null && stand.fragebogen !== undefined) doc.fragebogen = JSON.stringify(stand.fragebogen)
|
||||
return doc
|
||||
}
|
||||
Reference in new issue
Block a user