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.
This commit is contained in:
1 parent
363bc27c26
commit
781a2b82dc
1165 files changed
+74986
-1028
No files matched your search
@@ -0,0 +1,27 @@
|
||||
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,{}),'');
|
||||
});
|
||||
Reference in new issue
Block a user