Files
votianng/frontend/test/master-bank.test.mjs
Sven 781a2b82dc Erweitere VoTiAn NG um Fachfunktionen und verbessere die Listenoberfläche
Ergänze Auftragsbearbeitung, Disposition, Stammdaten, Kunden- und
Transporteurportale, Lagerverwaltung, Abrechnung, Exporte und Statistik.
Füge Kontoeinstellungen, Mitteilungen, Automatikdienste und Betriebsstatus
sowie die zugehörigen Tests und PHP-Abgleichsdokumentation hinzu.

Vergrößere die persönlichen Auftragslisten auf einheitliche Höhen und
richte Statusanzeigen sowie die Ranking-Vorschau-Steuerelemente bündig aus.

Validierung: 44 Frontendtests und Produktionsbuild erfolgreich.
Backend funktional unverändert gegenüber dem vollständigen Lauf mit 1.624
erfolgreichen und drei übersprungenen Tests. Layout im Browser und lokale
Bereitstellung geprüft.
2026-10-20 11:19:43 +02:00

28 lines
2.6 KiB
JavaScript

import test from 'node:test';import assert from 'node:assert/strict';import {readFile} from 'node:fs/promises';
import {createIban,ibanError,bicError,compactIban,formatIban,changedBankError} from '../src/masterBank.mjs';
const examples=JSON.parse(await readFile(new URL('./fixtures/master-bank-php.json',import.meta.url),'utf8'));
test('IBAN calculation matches 52 independently executed current PHP-script cases across all 48 country formats',()=>{
assert.equal(examples.length,52);assert.equal(new Set(examples.map(e=>e.country)).size,48);
for(const e of examples){assert.equal(createIban(e.country,e.bank,e.account),e.iban,e.country);assert.equal(ibanError(e.iban),'',e.country);}
});
test('known IBAN keeps leading zeroes and grouping without numeric precision loss',()=>{
assert.equal(createIban('DE','37040044','532013000'),'DE89370400440532013000');assert.equal(formatIban('DE89370400440532013000'),'DE89 3704 0044 0532 0130 00');
assert.equal(ibanError('IBAN DE89 3704 0044 0532 0130 00'),'');assert.equal(ibanError('de89\t37040044 0532013000'),'');assert.equal(compactIban(null),'');
});
test('invalid bank/account lengths, alphabetic positions and unsupported countries never produce proposals',()=>{
for(const args of [['DE','123','1'],['DE','3704004A','1'],['DE','37040044',''],['DE','37040044','12345678901'],['DE','37040044','a'],['GB','1234123456','12345678'],['XX','12345678','1']])assert.throws(()=>createIban(...args));
});
test('checksum and structural faults are distinguished from blank optional bank fields',()=>{
assert.equal(ibanError(''),'');assert.equal(ibanError(null),'');
for(const invalid of ['DE88370400440532013000','DE8937040044053201300','DEAB370400440532013000','DE8937040_440532013000','XX89370400440532013000'])assert.notEqual(ibanError(invalid),'',invalid);
});
test('BIC supports eight or eleven letters/digits with alphabetic bank/country codes',()=>{
for(const ok of ['',null,'COBADEFF','cobadeffxxx','DABAIE2DXXX'])assert.equal(bicError(ok),'');
for(const bad of ['COBADE','COB1DEFF','COBA1EFF','COBADEFFXX','COBA DEFF','COBADEFF!XX'])assert.notEqual(bicError(bad),'');
});
test('legacy bank fields remain editable without forcing unrelated corrections; changed invalid values block saving',()=>{
const old={cmp_iban:'LEGACY',cmp_swift:'OLD',cmp_comp:'Vorher'};assert.equal(changedBankError({...old,cmp_comp:'Nachher'},old),'');
assert.notEqual(changedBankError({...old,cmp_iban:'BAD'},old),'');assert.notEqual(changedBankError({...old,cmp_swift:'BAD'},old),'');
assert.equal(changedBankError({...old,cmp_iban:'',cmp_swift:''},old),'');assert.notEqual(changedBankError(old,{}),'');
});