Kundenart in der Kunden-Uebersicht und Steuernummer in den Finanz-Einstellungen (Helfer mit Tests)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99ab4bd47b
commit
674cce26f0
4 files changed
+185
-6
No files matched your search
@@ -0,0 +1,79 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { loadModule } from './load.mjs'
|
||||
|
||||
const {
|
||||
KUNDENARTEN, KUNDENART_OPTIONEN, KUNDENART_HINWEIS, kundenartLabel, kundenartAenderung,
|
||||
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))
|
||||
})
|
||||
Reference in new issue
Block a user