99 lines
6.2 KiB
JavaScript
99 lines
6.2 KiB
JavaScript
import test from 'node:test'
|
||
import assert from 'node:assert/strict'
|
||
import { loadModule } from './load.mjs'
|
||
|
||
const {
|
||
KUNDENARTEN, KUNDENART_OPTIONEN, KUNDENART_HINWEIS, kundenartLabel, kundenartAenderung,
|
||
KUNDENART_AUSWAHL, KUNDENART_FEHLT_FEHLER, KUNDENART_AUSWAHL_HINWEIS, KUNDENART_HOCHSTUFEN_HINWEIS,
|
||
kundenartGesetzt, kundenartPruefen,
|
||
STEUERNUMMER_MAX, STEUERNUMMER_HINWEIS, steuernummerAenderung, STEUERNUMMER_FEHLT_HINWEIS, steuernummerFehlt,
|
||
} = await loadModule('src/lib/kundenFelder.js')
|
||
|
||
test('Kundenart: Werte (Vertrag V2), Auswahl und Beschriftung', () => {
|
||
assert.deepEqual(KUNDENARTEN, ['unternehmen', 'privat'])
|
||
assert.deepEqual(KUNDENART_OPTIONEN, [
|
||
{ value: '', label: 'Nicht festgelegt' },
|
||
{ value: 'unternehmen', label: 'Unternehmen' },
|
||
{ value: 'privat', label: 'Privatperson' },
|
||
])
|
||
assert.equal(KUNDENART_HINWEIS, 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.')
|
||
assert.equal(kundenartLabel('unternehmen'), 'Unternehmen')
|
||
assert.equal(kundenartLabel('privat'), 'Privatperson')
|
||
for (const v of ['', undefined, null, 'firma']) assert.equal(kundenartLabel(v), 'Nicht festgelegt')
|
||
})
|
||
|
||
test('kundenartAenderung: nur eine geänderte, bekannte Kundenart wird geschrieben', () => {
|
||
assert.deepEqual(kundenartAenderung('', ''), {})
|
||
assert.deepEqual(kundenartAenderung('', undefined), {})
|
||
assert.deepEqual(kundenartAenderung('privat', 'privat'), {})
|
||
assert.deepEqual(kundenartAenderung('privat', ''), { kundenart: 'privat' })
|
||
assert.deepEqual(kundenartAenderung('privat', undefined), { kundenart: 'privat' })
|
||
assert.deepEqual(kundenartAenderung('unternehmen', 'privat'), { kundenart: 'unternehmen' })
|
||
assert.deepEqual(kundenartAenderung('', 'privat'), { kundenart: '' })
|
||
// unbekannte Werte werden nie geschrieben
|
||
assert.deepEqual(kundenartAenderung('firma', ''), {})
|
||
assert.deepEqual(kundenartAenderung('firma', 'privat'), {})
|
||
})
|
||
|
||
test('Steuernummer: Hinweis und Grenze', () => {
|
||
assert.equal(STEUERNUMMER_HINWEIS, 'Steht auf jeder Auftragsbestätigung. Für Rechnungen bitte zusätzlich im Stripe-Dashboard hinterlegen.')
|
||
assert.equal(STEUERNUMMER_MAX, 40)
|
||
})
|
||
|
||
test('steuernummerAenderung: unverändert sendet nichts, geändert den getrimmten Wert, leer löscht', () => {
|
||
assert.deepEqual(steuernummerAenderung('12/345/67890', '12/345/67890'), { ok: true, payload: {} })
|
||
assert.deepEqual(steuernummerAenderung('', ''), { ok: true, payload: {} })
|
||
assert.deepEqual(steuernummerAenderung('', null), { ok: true, payload: {} })
|
||
assert.deepEqual(steuernummerAenderung(' 12/345/67890 ', '12/345/67890'), { ok: true, payload: {} })
|
||
assert.deepEqual(steuernummerAenderung(' 12/345/67890 ', ''), { ok: true, payload: { steuernummer: '12/345/67890' } })
|
||
assert.deepEqual(steuernummerAenderung('', '12/345/67890'), { ok: true, payload: { steuernummer: '' } })
|
||
assert.equal(steuernummerAenderung('123 456 789-0', '').ok, true)
|
||
assert.equal(steuernummerAenderung('1'.repeat(40), '').ok, true)
|
||
})
|
||
|
||
test('steuernummerAenderung: Buchstaben, Ziffern, Leerzeichen, „/“, „-“ und „.“ sind erlaubt wie auf dem Server (V4)', () => {
|
||
for (const gut of ['12/345/67890', '12.345.67890', 'DE123456789', 'de 123 456 789', 'DE-123.456/789', 'a', 'USt-IdNr 12/345']) {
|
||
assert.deepEqual(steuernummerAenderung(gut, ''), { ok: true, payload: { steuernummer: gut } }, gut)
|
||
}
|
||
assert.deepEqual(steuernummerAenderung(' DE123456789 ', ''), { ok: true, payload: { steuernummer: 'DE123456789' } })
|
||
assert.deepEqual(steuernummerAenderung('A'.repeat(40), ''), { ok: true, payload: { steuernummer: 'A'.repeat(40) } })
|
||
})
|
||
|
||
test('steuernummerAenderung: andere Zeichen und zu lang', () => {
|
||
const zeichen = 'Die Steuernummer darf nur Buchstaben (ohne Umlaute), Ziffern, Leerzeichen, „/“, „-“ und „.“ enthalten.'
|
||
for (const schlecht of ['12_345', '12,345', '12#34', 'Müller 12', 'ß12', '12\t34', '12\n34', '12+34', '123']) {
|
||
assert.deepEqual(steuernummerAenderung(schlecht, ''), { ok: false, fehler: zeichen }, JSON.stringify(schlecht))
|
||
}
|
||
const LANG = 'Die Steuernummer darf höchstens 40 Zeichen lang sein.'
|
||
assert.deepEqual(steuernummerAenderung('1'.repeat(41), ''), { ok: false, fehler: LANG })
|
||
assert.deepEqual(steuernummerAenderung('A'.repeat(41), ''), { ok: false, fehler: LANG })
|
||
assert.equal(steuernummerAenderung('_'.repeat(41), '').fehler, LANG) // die Länge wird zuerst geprüft
|
||
})
|
||
|
||
test('steuernummerFehlt: Hinweis nur, wenn die Einstellungen da sind und die Steuernummer leer ist', () => {
|
||
assert.equal(STEUERNUMMER_FEHLT_HINWEIS, 'Die Steuernummer fehlt noch – sie steht dann nicht auf der Auftragsbestätigung. Eintragen unter Finanzen → Einstellungen.')
|
||
for (const leer of [{ steuernummer: '' }, { steuernummer: ' ' }, { steuernummer: null }, { steuernummer: 12 }, {}, { bankDetailsText: 'IBAN' }]) {
|
||
assert.equal(steuernummerFehlt(leer), true, JSON.stringify(leer))
|
||
}
|
||
for (const da of [{ steuernummer: '12/345/67890' }, { steuernummer: ' DE123456789 ' }]) assert.equal(steuernummerFehlt(da), false)
|
||
// noch nicht geladen oder nicht ladbar: es wird nichts behauptet
|
||
for (const unbekannt of [undefined, null, 'x', 5, []]) assert.equal(steuernummerFehlt(unbekannt), false, String(unbekannt))
|
||
})
|
||
|
||
test('KUNDENART_AUSWAHL: zwei Einträge ohne den Leer-Eintrag', () => {
|
||
assert.deepEqual(KUNDENART_AUSWAHL, [{ value: 'unternehmen', label: 'Unternehmen' }, { value: 'privat', label: 'Privatperson' }])
|
||
})
|
||
|
||
test('kundenartGesetzt und kundenartPruefen: nur exakt unternehmen oder privat', () => {
|
||
for (const ok of ['unternehmen', 'privat']) { assert.equal(kundenartGesetzt(ok), true); assert.equal(kundenartPruefen(ok), null) }
|
||
for (const bad of ['', ' ', 'Unternehmen', 'unternehmen ', ' privat', 'firma', null, undefined, 5, {}]) {
|
||
assert.equal(kundenartGesetzt(bad), false, String(bad))
|
||
assert.equal(kundenartPruefen(bad), 'Bitte die Kundenart wählen.', String(bad))
|
||
}
|
||
})
|
||
|
||
test('Texte der Kundenart sind festgelegt', () => {
|
||
assert.equal(KUNDENART_AUSWAHL_HINWEIS, 'Unternehmen bestellt als Betrieb, Privatperson als Verbraucher mit Widerrufsrecht. Das Portal fragt den Kunden nicht danach.')
|
||
assert.equal(KUNDENART_HOCHSTUFEN_HINWEIS, 'Bitte zuerst die Kundenart festlegen (unter „Rechnungsdaten“), dann „Zum festen Kunden machen“.')
|
||
})
|