import { expect, test } from '@playwright/test'; import { DEFAULT_EXHIBIT_PREFIX, MAX_EXHIBIT_PREFIX_LENGTH, MAX_EXHIBIT_START_NUMBER, MIN_EXHIBIT_START_NUMBER, buildExhibitFileName, buildExhibitLabel, buildExhibitPrefixSlug, getExhibitNumberWidth, normalizeExhibitPrefix, normalizeExhibitStartNumber } from '../../src/lib/exhibit-naming'; test('the prefix is trimmed and capped', () => { expect(normalizeExhibitPrefix(' Anlage K ')).toBe('Anlage K'); expect(normalizeExhibitPrefix('')).toBe(''); expect(normalizeExhibitPrefix('A'.repeat(MAX_EXHIBIT_PREFIX_LENGTH + 10))).toHaveLength( MAX_EXHIBIT_PREFIX_LENGTH ); }); test('labels use one space and never pad the number', () => { expect(buildExhibitLabel('Anlage K', 6)).toBe('Anlage K 6'); expect(buildExhibitLabel(' Anlage ', 1)).toBe('Anlage 1'); expect(buildExhibitLabel('Anlage', 98)).toBe('Anlage 98'); }); test('the padding width follows the highest assigned number', () => { expect(getExhibitNumberWidth(9)).toBe(2); expect(getExhibitNumberWidth(99)).toBe(2); expect(getExhibitNumberWidth(100)).toBe(3); expect(getExhibitNumberWidth(1000)).toBe(4); }); test('file names prefix the number and keep the original base name', () => { expect( buildExhibitFileName({ prefix: 'Anlage K', number: 6, highestNumber: 8, originalName: 'Klageschrift.pdf' }) ).toBe('Anlage_K_06_Klageschrift.pdf'); expect( buildExhibitFileName({ prefix: 'Anlage K', number: 98, highestNumber: 100, originalName: 'Anlage.PDF' }) ).toBe('Anlage_K_098_Anlage.pdf'); }); test('unsafe characters never reach the file name', () => { expect( buildExhibitFileName({ prefix: 'Anlage K/1', number: 1, highestNumber: 1, originalName: 'a:b*c?.pdf' }) ).toBe('Anlage_K1_01_abc.pdf'); }); test('an empty prefix falls back to the default slug', () => { expect(buildExhibitPrefixSlug(' ')).toBe(DEFAULT_EXHIBIT_PREFIX); expect( buildExhibitFileName({ prefix: '', number: 3, highestNumber: 3, originalName: 'x.pdf' }) ).toBe('Anlage_03_x.pdf'); }); test('the start number is clamped and survives an empty field', () => { expect(normalizeExhibitStartNumber(1)).toBe(1); expect(normalizeExhibitStartNumber(0)).toBe(MIN_EXHIBIT_START_NUMBER); expect(normalizeExhibitStartNumber(-5)).toBe(MIN_EXHIBIT_START_NUMBER); expect(normalizeExhibitStartNumber(6.6)).toBe(7); expect(normalizeExhibitStartNumber(undefined)).toBe(1); expect(normalizeExhibitStartNumber(null)).toBe(1); expect(normalizeExhibitStartNumber('')).toBe(1); expect(normalizeExhibitStartNumber(1_000_000)).toBe(MAX_EXHIBIT_START_NUMBER); });