79 lines
3.7 KiB
JavaScript
79 lines
3.7 KiB
JavaScript
import { test, after } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import { fileURLToPath } from 'node:url'
|
|
import express, { Router } from 'express'
|
|
import { useTestEnv } from './support/testEnv.js'
|
|
|
|
useTestEnv({ appwriteUrl: 'http://127.0.0.1:1', stripeUrl: 'http://127.0.0.1:1' })
|
|
const { config } = await import('../server/config.js')
|
|
const { startTestApp } = await import('./support/testApp.js')
|
|
const { analyseLegalRouter, legalPaths, legalPdfFiles, legalPdfAttachments } = await import('../server/services/analyseLegal.js')
|
|
const core = await import('../analytics/client/core.js')
|
|
|
|
const root = (rel) => new URL(`../${rel}`, import.meta.url)
|
|
const V = '2026-10-02'
|
|
// wie in server/index.js: erst die Router für Adressen ohne Fassung, dann express.static
|
|
const rechtliches = Router()
|
|
rechtliches.use(analyseLegalRouter())
|
|
rechtliches.use(express.static(fileURLToPath(new URL('../public/rechtliches/', import.meta.url))))
|
|
const app = await startTestApp({ '/rechtliches': rechtliches })
|
|
after(() => app.close())
|
|
|
|
const fetchBytes = async (path) => {
|
|
const r = await fetch(app.url + path)
|
|
return { status: r.status, body: Buffer.from(await r.arrayBuffer()) }
|
|
}
|
|
|
|
test('legalPaths und legalPdfFiles nennen feste Adressen und Dateinamen', () => {
|
|
assert.deepEqual(legalPaths(V), {
|
|
avv: `/rechtliches/avv-website-analyse-${V}.html`,
|
|
lb: `/rechtliches/leistungsbeschreibung-website-analyse-${V}.html`,
|
|
})
|
|
const f = legalPdfFiles(V)
|
|
assert.equal(f.avv.filename, `AVV-Website-Analyse-${V}.pdf`)
|
|
assert.equal(f.lb.filename, `Leistungsbeschreibung-Website-Analyse-${V}.pdf`)
|
|
assert.throws(() => legalPaths('../x'))
|
|
})
|
|
|
|
test('Adressen ohne Fassung liefern die Bytes der Fassung aus config.analyse.avvVersion', async () => {
|
|
assert.equal(config.analyse.avvVersion, V)
|
|
const a = await fetchBytes('/rechtliches/avv-website-analyse.html')
|
|
assert.equal(a.status, 200)
|
|
assert.deepEqual(a.body, readFileSync(root(`public/rechtliches/avv-website-analyse-${V}.html`)))
|
|
const l = await fetchBytes('/rechtliches/leistungsbeschreibung-website-analyse.html')
|
|
assert.equal(l.status, 200)
|
|
assert.deepEqual(l.body, readFileSync(root(`public/rechtliches/leistungsbeschreibung-website-analyse-${V}.html`)))
|
|
})
|
|
|
|
test('versionierte Adresse 200, unbekannte Fassung 404', async () => {
|
|
assert.equal((await fetchBytes(`/rechtliches/avv-website-analyse-${V}.html`)).status, 200)
|
|
assert.equal((await fetchBytes(`/rechtliches/leistungsbeschreibung-website-analyse-${V}.html`)).status, 200)
|
|
assert.equal((await fetchBytes('/rechtliches/avv-website-analyse-2026-01-01.html')).status, 404)
|
|
})
|
|
|
|
test('PDFs: beginnen mit %PDF, > 20 KB, Anhänge mit richtigen Dateinamen', async () => {
|
|
const att = await legalPdfAttachments(V)
|
|
assert.equal(att.length, 2)
|
|
assert.deepEqual(att.map((a) => a.filename), [`AVV-Website-Analyse-${V}.pdf`, `Leistungsbeschreibung-Website-Analyse-${V}.pdf`])
|
|
for (const a of att) {
|
|
assert.equal(a.contentType, 'application/pdf')
|
|
assert.equal(a.content.subarray(0, 4).toString(), '%PDF')
|
|
assert.ok(a.content.length > 20 * 1024)
|
|
}
|
|
await assert.rejects(legalPdfAttachments('2026-01-01'))
|
|
})
|
|
|
|
test('Banner-Archiv: Text und aria-label wortgleich zu core.js, README nennt BANNER_VERSION', () => {
|
|
const md = readFileSync(root(`docs/rechtliches/archiv/banner-${V}.md`), 'utf8')
|
|
assert.ok(md.includes(core.BANNER_TEXT))
|
|
assert.ok(md.includes(core.BANNER_ARIA))
|
|
assert.equal(core.BANNER_VERSION, V)
|
|
assert.ok(md.includes('BANNER_VERSION'))
|
|
assert.ok(readFileSync(root('docs/rechtliches/archiv/README.md'), 'utf8').includes('BANNER_VERSION'))
|
|
assert.deepEqual(
|
|
readFileSync(root(`docs/rechtliches/archiv/datenschutz-analyse-${V}.html`)),
|
|
readFileSync(root('runner/src/templates/datenschutz-analyse.html'))
|
|
)
|
|
})
|