50 lines
3.4 KiB
JavaScript
50 lines
3.4 KiB
JavaScript
import { test } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { installFakeDom } from './support/fakeDom.js'
|
|
import { h } from '../public/neu/dom.js'
|
|
import { ladeFristen, streifenText, fruehesteFrist, baueStreifen } from '../public/neu/fristen-streifen.js'
|
|
import { lies, handyTeil } from './support/knHuelle.js'
|
|
|
|
const FRIST = { fristen: [{ quelle: 'abschluss', bezeichnung: 'Abo', bis: '2026-10-21T21:59:59.999Z' }], fruehestesEnde: '2026-10-21T21:59:59.999Z', anzeigen: true }
|
|
|
|
test('ladeFristen: 404, 500, Netzfehler und anzeigen:false ergeben null; sonst die Daten (Review Focus 5)', async () => {
|
|
for (const status of [404, 500, 0]) assert.equal(await ladeFristen(async () => { throw Object.assign(new Error('x'), { status }) }), null)
|
|
assert.equal(await ladeFristen(async () => ({ fristen: [], fruehestesEnde: null, anzeigen: false })), null)
|
|
assert.deepEqual(await ladeFristen(async (p) => { assert.equal(p, '/api/fristen'); return FRIST }), FRIST)
|
|
})
|
|
|
|
test('streifenText: Berliner Datum, nicht UTC; fruehesteFrist fällt auf das kleinste bis zurück', () => {
|
|
assert.equal(streifenText('2026-10-21T21:59:59.999Z'), 'Widerrufsfrist bis 21.10.'); assert.equal(streifenText('2026-10-21T22:30:00.000Z'), 'Widerrufsfrist bis 22.10.')
|
|
assert.equal(fruehesteFrist({ fruehestesEnde: null, fristen: [{ bis: '2026-11-03T10:00:00Z' }, { bis: '2026-10-30T10:00:00Z' }] }), '2026-10-30T10:00:00Z')
|
|
})
|
|
|
|
test('baueStreifen: Text mit Link, nicht wegtippbar, null versteckt', () => {
|
|
const fx = installFakeDom()
|
|
try {
|
|
const w = h('div', { hidden: true }); const s = baueStreifen(w); s.setze(FRIST)
|
|
assert.deepEqual([w.hidden, fx.text(w)], [false, 'Widerrufsfrist bis 21.10. · Widerrufen'])
|
|
assert.deepEqual([fx.finde(w, 'a').getAttribute('href'), fx.alle(w, 'button').length, fx.document.body.classList.contains('kn-hat-streifen')], ['/widerrufen.html', 0, true])
|
|
s.setze(null); assert.deepEqual([w.hidden, fx.document.body.classList.contains('kn-hat-streifen')], [true, false])
|
|
} finally { fx.restore() }
|
|
})
|
|
|
|
test('huelle.css (Streifen): 44 px, getönt, am Handy über der Leiste, bei Tastatur weg', () => {
|
|
const css = lies('huelle.css')
|
|
assert.match(css, /\.kn-streifen\s*\{(?=[^}]*min-height:\s*44px)(?=[^}]*background:\s*var\(--kn-orange-bg\))(?=[^}]*color:\s*var\(--kn-orange-fg\))/s)
|
|
assert.match(handyTeil(css), /\.kn-streifen\s*\{[^}]*position:\s*fixed/s)
|
|
assert.match(css, /\.kn-tastatur \.kn-streifen[^{]*\{[^}]*display:\s*none/s)
|
|
})
|
|
|
|
test('Streifen: ohne gültiges Datum steht ein allgemeiner Text, mehrere Fristen zeigen die früheste, ein neuer Stand ersetzt den alten', () => {
|
|
const fx = installFakeDom()
|
|
try {
|
|
assert.equal(streifenText(''), 'Widerrufsfrist läuft'); assert.equal(streifenText('kein Datum'), 'Widerrufsfrist läuft')
|
|
assert.equal(fruehesteFrist({ fristen: [] }), '')
|
|
const w = h('div', { hidden: true }); const s = baueStreifen(w)
|
|
s.setze({ ...FRIST, fruehestesEnde: null, fristen: [{ bis: '2026-11-03T10:00:00Z' }, { bis: '2026-10-30T10:00:00Z' }] })
|
|
assert.equal(fx.text(w), 'Widerrufsfrist bis 30.10. · Widerrufen')
|
|
s.setze(FRIST); assert.deepEqual([fx.text(w), fx.alle(w, 'a').length], ['Widerrufsfrist bis 21.10. · Widerrufen', 1])
|
|
assert.deepEqual([w.getAttribute('role'), w.getAttribute('aria-label'), w.classList.contains('kn-streifen')], ['region', 'Widerrufsfrist', true])
|
|
} finally { fx.restore() }
|
|
})
|