23 lines
1.7 KiB
JavaScript
23 lines
1.7 KiB
JavaScript
import { test } from 'node:test'
|
||
import assert from 'node:assert/strict'
|
||
import { offeneRechnungen, ladeOffeneRechnungen, rechnungOffenZeile } from '../public/neu/rechnung-offen.js'
|
||
import { mit, mitDom, rechnung } from './support/knDaten.js'
|
||
|
||
const NB = ' '
|
||
test('eine offene Rechnung: Text und Link auf die Rechnung', () => mitDom((fx) => {
|
||
const p = rechnungOffenZeile([rechnung({ number: 'RE-2026-0042', balance: 50, portalUrl: 'https://invoice.stripe.com/i/x' })])
|
||
assert.equal(p.textContent, `Rechnung offen · RE-2026-0042 · 50,00${NB}€ · Zahlen`)
|
||
const a = fx.finde(p, 'a'); assert.equal(a.getAttribute('href'), 'https://invoice.stripe.com/i/x'); assert.equal(a.getAttribute('rel'), 'noopener noreferrer')
|
||
}))
|
||
test('mehrere offene: Summe, Link über die Brücke zu #rechnungen; unsicherer Link fällt darauf zurück', () => mitDom((fx) => {
|
||
const zwei = [rechnung({ balance: 100 }), rechnung({ balance: 50 })]
|
||
assert.equal(rechnungOffenZeile(zwei).textContent, `2 Rechnungen offen · 150,00${NB}€ · Zahlen`)
|
||
const a = fx.finde(rechnungOffenZeile(zwei), 'a'); assert.deepEqual([a.getAttribute('href'), a.getAttribute('data-view')], ['#rechnungen', 'invoices'])
|
||
assert.equal(fx.finde(rechnungOffenZeile([rechnung({ balance: 5, portalUrl: 'javascript:alert(1)' })]), 'a').getAttribute('href'), '#rechnungen')
|
||
assert.equal(rechnungOffenZeile([]), null)
|
||
}))
|
||
test('offeneRechnungen filtert nach Betrag, ladeOffeneRechnungen schluckt Fehler', mit({ 'GET /api/invoices': () => ({ status: 500, body: { error: 'x' } }) }, async () => {
|
||
assert.deepEqual(offeneRechnungen({ invoices: [rechnung({ balance: 0 }), rechnung({ id: 'b', balance: 1 })] }).map((r) => r.id), ['b'])
|
||
assert.deepEqual(await ladeOffeneRechnungen(), [])
|
||
}))
|