Files
Webklar-Kundenbereich/test/support/fragebogenStand.js
T
ClaudeandClaude Sonnet 5.5 008ad4fb1e 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>
2026-10-04 19:00:12 +00:00

60 lines
2.4 KiB
JavaScript

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
}