Files
bea-edit/tests/unit/exhibit-naming.spec.ts
2026-10-28 16:09:53 +01:00

84 lines
2.6 KiB
TypeScript

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);
});