import { test, after } from 'node:test' import assert from 'node:assert/strict' import { startAppwriteMock } from './support/appwriteMock.js' import { startFakeStripe } from './support/fakeStripe.js' import { useTestEnv } from './support/testEnv.js' // Vertrag der Testdaten von P3 (test/support/knFunktionenDaten.js) mit dem echten Katalog des Servers (server/services/aboKatalog.js, V5/N17): // gleiche Schlüssel je Eintrag, gleiche Reihenfolge, gleiche Items der Erklärung. Werte (Namen, Texte, Fassung) sind Testwerte und nicht Teil des Vertrags. const aw = await startAppwriteMock() const st = await startFakeStripe() after(() => Promise.all([aw.close(), st.close()])) useTestEnv({ appwriteUrl: aw.url, stripeUrl: st.url }) const { config } = await import('../server/config.js') const { katalogFuerKunde } = await import('../server/services/aboKatalog.js') const { daten, katalogEintrag } = await import('./support/knFunktionenDaten.js') const analyseVorher = config.analyse.enabled after(() => { config.analyse.enabled = analyseVorher }) test('Katalog der Testdaten: Schlüssel, Reihenfolge und Erklärungs-Items wie beim Server', async () => { config.analyse.enabled = true const echt = await katalogFuerKunde({ email: 'kunde@example.org' }) const fix = daten().katalog assert.deepEqual(fix.map((e) => e.key), echt.map((e) => e.key)) for (const [i, e] of echt.entries()) { const f = fix[i] assert.deepEqual(Object.keys(f).sort(), Object.keys(e).sort(), `${e.key}: Felder`) assert.deepEqual([f.enthaltenIn, f.ablauf, f.nurBetrieb, f.bild], [e.enthaltenIn, e.ablauf, e.nurBetrieb, e.bild], `${e.key}: Ablauf und Abo`) assert.equal(f.consent === null, e.consent === null, `${e.key}: Register`) assert.equal(f.hinweis === null, e.hinweis === null, `${e.key}: Hinweis`) if (e.consent) { assert.deepEqual(Object.keys(f.consent).sort(), Object.keys(e.consent).sort(), `${e.key}: consent`) assert.equal(f.consent.knopf, e.consent.knopf) assert.deepEqual(f.consent.items.map((x) => [x.id, x.haken, x.nurPrivatInFrist ?? false]), e.consent.items.map((x) => [x.id, x.haken, x.nurPrivatInFrist ?? false]), `${e.key}: Items`) } assert.deepEqual(Object.keys(f.unterlagen).sort(), Object.keys(e.unterlagen).sort(), `${e.key}: unterlagen`) // eine Unterlage ist { version, url } oder null (News und Öffnungszeiten haben keine AVV); ob sie fehlt, ist ein Testwert for (const art of ['leistungsbeschreibung', 'avv']) if (f.unterlagen[art] && e.unterlagen[art]) assert.deepEqual(Object.keys(f.unterlagen[art]).sort(), Object.keys(e.unterlagen[art]).sort(), `${e.key}: ${art}`) } assert.deepEqual(Object.keys(katalogEintrag('news')).sort(), Object.keys(echt[0]).sort()) })