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>
60 lines
2.4 KiB
JavaScript
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
|
|
}
|