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) })