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“.') })