diff --git a/test/unterkunftIcal.test.js b/test/unterkunftIcal.test.js index b1f0eef..9cb9805 100644 --- a/test/unterkunftIcal.test.js +++ b/test/unterkunftIcal.test.js @@ -5,6 +5,7 @@ import { startAppwriteMock } from './support/appwriteMock.js' import { startFakeStripe } from './support/fakeStripe.js' import { useTestEnv } from './support/testEnv.js' import { schemaKeys } from './support/schema.js' +import { mailSink } from './support/mailSink.js' // Buchungskalender Task 9: iCal-Parser/-Export (ical.js), Abruf + Abgleich (icalAbgleich.js), Export-Route (unterkunftSeite.js) const NAMEN = ['portalFeatures', 'ukEinstellungen', 'ukUnterkuenfte', 'ukSperren', 'ukAnfragen', 'customers', 'websiteProjects'] @@ -20,17 +21,20 @@ const { config } = await import('../server/config.js') const { startTestApp, rawGet } = await import('./support/testApp.js') const { deleteDocument, updateDocument } = await import('../server/services/appwriteAdmin.js') const mails = await import('../server/services/unterkunft/mails.js') +const { setMailTransportForTests } = await import('../server/services/mailer.js') +const { warteAufVersand } = await import('../server/services/termine/outbox.js') const { parseIcs, baueIcs } = await import('../server/services/unterkunft/ical.js') const { holeIcs, gleicheAb, gleicheAlleAb, istPrivateAdresse } = await import('../server/services/unterkunft/icalAbgleich.js') const { viertelstundenJob } = await import('../server/services/unterkunft/jobs.js') const { unterkunftSeiteRouter } = await import('../server/routes/unterkunftSeite.js') const { ladeUnterkunft, listeSperren, ladeEinstellungen } = await import('../server/services/unterkunft/speicher.js') const app = await startTestApp({ '/': unterkunftSeiteRouter() }) -after(() => Promise.all([app.close(), aw.close(), st.close()])) +after(() => { setMailTransportForTests(null); return Promise.all([app.close(), aw.close(), st.close()]) }) const fx = (n) => readFileSync(new URL(`./fixtures/ical/${n}`, import.meta.url), 'utf8') const FEATURE = 'f_p1_unterkunft' const vorher = { ...config.unterkunft } +let sink const OPT = { heute: '2026-11-07', horizontTage: 540 } const antwort = (text, status = 200, headers = {}) => new Response(text, { status, headers }) const oeffentlich = async () => [{ address: '93.184.216.34', family: 4 }] @@ -39,6 +43,9 @@ beforeEach(async () => { for (const c of NAMEN) for (const id of [...aw.docs(c).keys()]) await deleteDocument(config.collections[c], id) Object.assign(config.unterkunft, vorher, { mode: 'on' }) mails._aufrufe.length = 0 + config.smtp.from = 'noreply@webklar.com' + sink = mailSink() + setMailTransportForTests(sink) aw.seed('portalFeatures', { $id: FEATURE, customerId: 'c1', projectId: 'p1', featureKey: 'unterkunft', siteKey: 'abcdefghijklmnop', state: 'active', enabled: true }) aw.seed('customers', { $id: 'c1', email: 'mimi@example.com' }) aw.seed('websiteProjects', { $id: 'p1', customerId: 'c1', projectName: 'Donau' }) @@ -220,10 +227,13 @@ test('K33: erst nach icalFehlerStunden ohne Erfolg, danach hoechstens 1x je 24 h assert.equal(K33().length, 0, 'nach 5 h noch keine Mail') await lauf(new Date(NOW.getTime() + 2 * 3600e3)) assert.equal(K33().length, 1, 'nach 7 h Mail') - assert.deepEqual(Object.keys(K33()[0].values).sort(), ['quelle', 'seit', 'unterkunft']) - assert.equal(K33()[0].values.quelle, 'Booking.com') - assert.equal(K33()[0].values.unterkunft, 'Erste') - assert.match(K33()[0].values.seit, /^07\.11\.2026, 06:00$/) + // das Testprotokoll haelt keine Werte mehr fest (nur {an, template, anfrageId}); die Platzhalter prueft unterkunftMails.test.js + assert.deepEqual(Object.keys(K33()[0]).sort(), ['an', 'anfrageId', 'template']) + await warteAufVersand() + const k33 = sink.sent.find((m) => /Erste/.test(m.text ?? '')) + assert.ok(k33, 'Mail nennt die Unterkunft (K33 kennt keine Platzhalter quelle/seit)') + assert.deepEqual(k33.to.map((x) => x.address), ['mimi@example.com']) + assert.ok(!JSON.stringify(k33).includes('geheim')) assert.ok(!JSON.stringify(K33()[0]).includes('geheim')) assert.ok((await ladeEinstellungen(FEATURE)).icalFehlerMailAt) await lauf(new Date(NOW.getTime() + 10 * 3600e3)) diff --git a/test/unterkunftSchalter.test.js b/test/unterkunftSchalter.test.js index 20303ac..1bc1820 100644 --- a/test/unterkunftSchalter.test.js +++ b/test/unterkunftSchalter.test.js @@ -61,6 +61,7 @@ test('Konfiguration: Vorgaben ohne Umgebungsvariablen', async () => { ipHashTage: 30, unverbindlichMonate: 6, neuVerfallTage: 60, + aufbewahrungDeckel: 500, anonymisierenJahre: 3, rechnungJahre: 8, loeschTageNachAbschalten: 90,