84 lines
2.6 KiB
TypeScript
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);
|
|
});
|