Files
Webklar-Kundenbereich/test/unterkunftKalenderLogik.test.js

89 lines
4.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import vm from 'node:vm'
// Reine Kalenderlogik des Widgets public/embed/unterkunft.js (Task 16): Datei per node:vm laden, data-test="1" macht WKU_LOGIK als __wkuLogik sichtbar.
const QUELLE = readFileSync(new URL('../public/embed/unterkunft.js', import.meta.url), 'utf8')
function lade() {
const doc = { readyState: 'complete', currentScript: { dataset: { test: '1' } }, querySelectorAll: () => [], addEventListener() {} }
const ctx = vm.createContext({ document: doc, console })
vm.runInContext(QUELLE, ctx, { filename: 'unterkunft.js' })
return ctx.__wkuLogik
}
const L = lade()
test('ohne data-test bleibt die Logik verborgen', () => {
const doc = { readyState: 'complete', currentScript: { dataset: {} }, querySelectorAll: () => [], addEventListener() {} }
const ctx = vm.createContext({ document: doc })
vm.runInContext(QUELLE, ctx)
assert.equal(ctx.__wkuLogik, undefined)
})
test('monatsRaster: Montag zuerst, 1.11.2026 (Sonntag) hat 6 Leerfelder, 30 Tage', () => {
const r = L.monatsRaster(2026, 11)
assert.equal(r.length % 7, 0)
assert.ok(r.slice(0, 6).every((z) => z.tag === null))
assert.equal(r[6].tag, '2026-11-01')
assert.equal(r.filter((z) => z.tag).length, 30)
assert.equal(L.monatsRaster(2026, 2).filter((z) => z.tag).length, 28)
assert.equal(L.monatsRaster(2028, 2).filter((z) => z.tag).length, 29)
assert.equal(L.monatsRaster(2026, 12)[1].tag, '2026-12-01') // 1.12.2026 ist Dienstag
})
test('nachtBelegt: Nacht von von (inklusive) bis bis (exklusive)', () => {
const b = [{ von: '2026-11-10', bis: '2026-11-12' }]
assert.equal(L.nachtBelegt('2026-11-09', b), false)
assert.equal(L.nachtBelegt('2026-11-10', b), true)
assert.equal(L.nachtBelegt('2026-11-11', b), true)
assert.equal(L.nachtBelegt('2026-11-12', b), false)
})
test('waehle: Anreise, Abreise, Neustart', () => {
const b = [{ von: '2026-11-20', bis: '2026-11-25' }]
let z = L.waehle({}, '2026-11-12', b, 1)
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-12', bis: null })
z = L.waehle(z, '2026-11-15', b, 1)
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-12', bis: '2026-11-15' })
z = L.waehle(z, '2026-11-14', b, 1) // dritter Klick = neue Anreise
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-14', bis: null })
z = L.waehle(z, '2026-11-10', b, 1) // Klick vor Anreise
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-10', bis: null })
})
test('waehle: belegte Nacht dazwischen -> neue Anreise; Abreise am Anreisetag eines Fremdbuchers erlaubt', () => {
const b = [{ von: '2026-11-20', bis: '2026-11-25' }]
let z = L.waehle({ von: '2026-11-18', bis: null }, '2026-11-27', b, 1)
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-27', bis: null })
z = L.waehle({ von: '2026-11-18', bis: null }, '2026-11-20', b, 1) // Nacht 18., 19. frei, Abreise am 20.
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-18', bis: '2026-11-20' })
z = L.waehle({ von: '2026-11-18', bis: null }, '2026-11-21', b, 1)
assert.deepEqual({ von: z.von, bis: z.bis }, { von: '2026-11-18', bis: null }) // Nacht 20. belegt, 21. selbst belegt: weder Abreise noch Anreise, Zustand bleibt
})
test('waehle: Anreise auf belegter Nacht nicht moeglich; Anreise am Abreisetag eines Fremdbuchers moeglich', () => {
const b = [{ von: '2026-11-20', bis: '2026-11-25' }]
const z1 = L.waehle({}, '2026-11-22', b, 1)
assert.equal(z1.von, null)
const z2 = L.waehle({}, '2026-11-25', b, 1)
assert.equal(z2.von, '2026-11-25')
})
test('waehle: unter den Mindestnaechten -> Hinweis-Zustand, Anreise bleibt', () => {
const z = L.waehle({ von: '2026-11-12', bis: null }, '2026-11-13', [], 3)
assert.equal(z.fehler, 'mindestnaechte')
assert.equal(z.von, '2026-11-12')
assert.equal(z.bis, null)
const ok = L.waehle({ von: '2026-11-12', bis: null }, '2026-11-15', [], 3)
assert.equal(ok.bis, '2026-11-15')
assert.equal(ok.fehler, undefined)
})
test('zusammenfassung', () => {
assert.equal(L.zusammenfassung('2026-11-12', '2026-11-30'), '12.–30. Nov. · 18 Nächte')
assert.equal(L.zusammenfassung('2026-11-28', '2026-12-03'), '28. Nov. – 3. Dez. · 5 Nächte')
assert.equal(L.zusammenfassung('2026-11-12', '2026-11-13'), '12.–13. Nov. · 1 Nacht')
assert.equal(L.zusammenfassung('2026-12-30', '2027-01-02'), '30. Dez. 2026 – 2. Jan. 2027 · 3 Nächte')
assert.equal(L.zusammenfassung('2026-03-01', '2026-03-05').slice(0, 18), '1.–5. März · 4 Näc')
})