Files

45 lines
2.6 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { loadModule } from './load.mjs'
// P6: Zeilen der Abo-Angebote (Filter, Aktionen, Mail-Zeile) als reine Helfer
const { offerStatus, filterOffers, offerRowActions, offerMailLine } = await loadModule('src/lib/offerFormat.js')
test('offerStatus: Tonnamen und Beschriftungen sind festgelegt', () => {
assert.deepEqual(offerStatus('offen'), { tone: 'warn', label: 'offen' })
assert.deepEqual(offerStatus('aktiv'), { tone: 'ok', label: 'aktiv' })
assert.deepEqual(offerStatus('abgelaufen'), { tone: 'muted', label: 'abgelaufen' })
assert.deepEqual(offerStatus('zurueckgezogen'), { tone: 'muted', label: 'zurückgezogen' })
})
test('filterOffers: "open" zeigt offen und aktiv, "all" alles, ohne Liste leer, Eingabe bleibt unveraendert', () => {
const offers = [
{ id: '1', status: 'offen' },
{ id: '2', status: 'aktiv' },
{ id: '3', status: 'abgelaufen' },
{ id: '4', status: 'zurueckgezogen' },
]
const copy = structuredClone(offers)
assert.deepEqual(filterOffers(offers, 'open').map((o) => o.id), ['1', '2'])
assert.deepEqual(filterOffers(offers, 'all').map((o) => o.id), ['1', '2', '3', '4'])
assert.deepEqual(filterOffers(null, 'open'), [])
assert.deepEqual(filterOffers(null, 'all'), [])
assert.deepEqual(offers, copy)
})
test('offerRowActions: E-Mail-Knopf und Zurueckziehen je nach Status', () => {
assert.deepEqual(offerRowActions({ status: 'offen', mailSendable: true }), { sendLabel: 'E-Mail senden', canWithdraw: true })
assert.deepEqual(offerRowActions({ status: 'offen', mailSendable: true, notifiedAt: '2026-09-30T10:05:00.000Z' }), { sendLabel: 'Erneut senden', canWithdraw: true })
assert.deepEqual(offerRowActions({ status: 'aktiv', mailSendable: true }), { sendLabel: 'E-Mail senden', canWithdraw: false })
assert.deepEqual(offerRowActions({ status: 'abgelaufen', mailSendable: false }), { sendLabel: '', canWithdraw: true })
assert.deepEqual(offerRowActions({ status: 'zurueckgezogen' }), { sendLabel: '', canWithdraw: false })
})
test('offerMailLine: gesendet, nicht verschickt, ohne Adresse, sonst keine Zeile', () => {
assert.deepEqual(offerMailLine({ notifiedAt: '2026-09-30T10:05:00.000Z' }), { tone: 'muted', text: 'E-Mail gesendet 30.09.26, 12:05' })
assert.deepEqual(offerMailLine({ mailSendable: true }), { tone: 'warn', text: 'E-Mail nicht verschickt' })
assert.deepEqual(offerMailLine({ status: 'offen', customerEmail: '' }), { tone: 'warn', text: 'Keine E-Mail-Adresse hinterlegt' })
assert.equal(offerMailLine({ status: 'abgelaufen', customerEmail: '' }), null)
assert.equal(offerMailLine({ status: 'offen', customerEmail: 'a@b.de' }), null)
})