feat(handelsware-datev): API, Kontenliste mit Zeilenschutz und DATEV-Export
- Prisma-Modelle HandelswareDatevConfig und HandelswareKonto mit Zeilenschutz (Migration 20261002130000) - XLSX lesen (B1 Kopf, A/B ab Zeile 2, Zahl oder deutscher Text), Konten zuordnen, TXT erzeugen - neue Konten werden nur beim Export in einer mandantengebundenen Transaktion gespeichert (409 bei geaenderter Liste) - Konten-CSV Import (alles ersetzen) und Export mit Schutz vor Formeleinschleusung - Einstellungen nur fuer Administratoren, statische Routen vor accounts/:id Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { decodeUploadFilename } from './decode-upload-filename';
|
||||
|
||||
describe('decodeUploadFilename', () => {
|
||||
it('laesst ASCII-Namen unveraendert', () => {
|
||||
expect(decodeUploadFilename('HWA 0326 Test.xlsx')).toBe('HWA 0326 Test.xlsx');
|
||||
});
|
||||
|
||||
it('kehrt latin1-gelesenes UTF-8 um', () => {
|
||||
const mojibake = Buffer.from('Käse 0326.xlsx', 'utf8').toString('latin1');
|
||||
expect(decodeUploadFilename(mojibake)).toBe('Käse 0326.xlsx');
|
||||
});
|
||||
|
||||
it('laesst einen schon richtigen Namen mit Umlaut stehen', () => {
|
||||
expect(decodeUploadFilename('Käse.xlsx')).toBe('Käse.xlsx');
|
||||
});
|
||||
|
||||
it('laesst Namen mit Zeichen ueber 255 stehen', () => {
|
||||
expect(decodeUploadFilename('Preis €.xlsx')).toBe('Preis €.xlsx');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user