104 lines
4.9 KiB
JavaScript
104 lines
4.9 KiB
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { loadModule } from './load.mjs'
|
|
|
|
const { analyseStatus, textformLabel, canSubmitTextform, channelLabel, analyseSetBody, legalLinks, chatTemplate, privacyHint } = await loadModule('src/lib/analyseView.js')
|
|
|
|
test('analyseStatus: Schalter aus => noch nicht freigeschaltet, kein Button', () => {
|
|
const s = analyseStatus({ enabled: false })
|
|
assert.equal(s.text, 'Noch nicht freigeschaltet')
|
|
assert.equal(s.canEnable, false)
|
|
assert.equal(s.canDisable, false)
|
|
})
|
|
|
|
test('analyseStatus: an seit Datum (Europe/Berlin)', () => {
|
|
const s = analyseStatus({ enabled: true, state: 'active', eligible: true, activatedAt: '2026-10-01T22:30:00Z' })
|
|
assert.equal(s.text, 'An seit 02.10.2026')
|
|
assert.equal(s.canDisable, true)
|
|
assert.equal(s.canEnable, false)
|
|
})
|
|
|
|
test('analyseStatus: an ohne Datum bleibt lesbar', () => {
|
|
assert.equal(analyseStatus({ enabled: true, state: 'active', eligible: true }).text, 'An')
|
|
})
|
|
|
|
test('analyseStatus: aus und berechtigt => Einschalten moeglich', () => {
|
|
const s = analyseStatus({ enabled: true, state: 'off', eligible: true })
|
|
assert.equal(s.text, 'Aus')
|
|
assert.equal(s.canEnable, true)
|
|
assert.equal(analyseStatus({ enabled: true, state: null, eligible: true }).text, 'Aus')
|
|
})
|
|
|
|
test('analyseStatus: gesperrt', () => {
|
|
const s = analyseStatus({ enabled: true, state: 'disabled', eligible: true })
|
|
assert.equal(s.text, 'Gesperrt')
|
|
assert.equal(s.canEnable, true)
|
|
assert.equal(s.enableLabel, 'Trotz Sperre einschalten')
|
|
assert.equal(s.hint, 'Vom Team gesperrt')
|
|
assert.equal(analyseStatus({ enabled: true, state: 'disabled', eligible: false }).canEnable, false)
|
|
})
|
|
|
|
test('analyseStatus: nicht berechtigt => Grund, kein Button', () => {
|
|
const s = analyseStatus({ enabled: true, state: null, eligible: false, reasonText: 'Die Website-Analyse gibt es nur mit einem laufenden Wartungs-Abo.' })
|
|
assert.equal(s.text, 'Nicht verfügbar: Die Website-Analyse gibt es nur mit einem laufenden Wartungs-Abo.')
|
|
assert.equal(s.canEnable, false)
|
|
})
|
|
|
|
test('analyseStatus: robust bei leerer Antwort', () => {
|
|
assert.equal(analyseStatus(null).text, '')
|
|
})
|
|
|
|
test('textformLabel nennt die Fassung und die Zielgruppen-Bestaetigung', () => {
|
|
const t = textformLabel('2026-10-02')
|
|
assert.match(t.after, /\(Fassung 2026-10-02\) in Textform zugestimmt und bestätigt, dass seine Website sich nicht gezielt an Kinder unter 16 Jahren richtet\.$/)
|
|
assert.equal(t.avv, 'AVV Website-Analyse')
|
|
assert.equal(t.lb, 'Leistungsbeschreibung Website-Analyse')
|
|
})
|
|
|
|
const ok = { confirmed: true, date: '2026-10-02', channel: 'email', today: '2026-10-03', minDate: '2026-10-02' }
|
|
test('canSubmitTextform: alles gueltig => true (Grenzen eingeschlossen)', () => {
|
|
assert.equal(canSubmitTextform(ok), true)
|
|
assert.equal(canSubmitTextform({ ...ok, channel: 'chat', date: '2026-10-03' }), true)
|
|
})
|
|
test('canSubmitTextform: fehlende oder ungueltige Angaben => false', () => {
|
|
assert.equal(canSubmitTextform({ ...ok, confirmed: false }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, date: '' }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, channel: '' }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, channel: 'telefon' }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, date: '2026-10-01' }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, date: '2026-10-04' }), false)
|
|
assert.equal(canSubmitTextform({ ...ok, date: 'morgen' }), false)
|
|
})
|
|
|
|
test('channelLabel', () => {
|
|
assert.equal(channelLabel('chat'), 'Chat im Kundenportal')
|
|
assert.equal(channelLabel('email'), 'E-Mail')
|
|
assert.equal(channelLabel('x'), '')
|
|
})
|
|
|
|
test('analyseStatus: aktiv zeigt Zustimmung in Textform', () => {
|
|
const t = analyseStatus({ enabled: true, state: 'active', eligible: true, activatedAt: '2026-10-03T08:00:00Z', avvConsentDate: '2026-10-02', avvConsentChannel: 'email' }).text
|
|
assert.ok(t.includes('An seit 03.10.2026'))
|
|
assert.ok(t.includes('Zustimmung in Textform am 02.10.2026 per E-Mail'))
|
|
})
|
|
|
|
test('analyseSetBody sendet Textform-Felder und kein avvConfirmedVerbally', () => {
|
|
const b = analyseSetBody({ on: true, textformDate: '2026-10-02', textformChannel: 'chat', audienceConfirmed: true })
|
|
assert.deepEqual(b, { on: true, textformDate: '2026-10-02', textformChannel: 'chat', audienceConfirmed: true })
|
|
assert.deepEqual(analyseSetBody({ on: false }), { on: false })
|
|
})
|
|
|
|
test('legalLinks und chatTemplate fuellen echte Links', () => {
|
|
const l = legalLinks('2026-10-02')
|
|
assert.equal(l.avv, 'https://project.webklar.com/rechtliches/avv-website-analyse-2026-10-02.html')
|
|
assert.equal(l.lb, 'https://project.webklar.com/rechtliches/leistungsbeschreibung-website-analyse-2026-10-02.html')
|
|
const t = chatTemplate('2026-10-02')
|
|
assert.ok(t.includes(l.avv) && t.includes(l.lb))
|
|
assert.ok(!t.includes('{Link'))
|
|
})
|
|
|
|
test('privacyHint nennt fehlende Felder', () => {
|
|
assert.equal(privacyHint({ ok: true, missing: [] }), '')
|
|
assert.match(privacyHint({ ok: false, missing: ['firma', 'email'] }), /Firma.*E-Mail/)
|
|
})
|