Session 7e: Grade adapter, normalize consolidation, ARCH-2 banners
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
const { normalizeName } = require('../../src/utils/normalize');
|
||||
|
||||
describe('normalizeName (DUP-1)', () => {
|
||||
test('basic lowercase + trim', () => {
|
||||
expect(normalizeName(' Jalen Brunson ')).toBe('jalen brunson');
|
||||
});
|
||||
|
||||
test('strips accents via NFD', () => {
|
||||
expect(normalizeName('Luka Dončić')).toBe('luka doncic');
|
||||
});
|
||||
|
||||
test('drops suffixes jr/sr/ii/iii/iv/v', () => {
|
||||
expect(normalizeName('Tim Hardaway Jr.')).toBe('tim hardaway');
|
||||
expect(normalizeName('Wade Phillips Sr.')).toBe('wade phillips');
|
||||
expect(normalizeName('Sammy Davis III')).toBe('sammy davis');
|
||||
// VIII isn't in the suffix list (i, ii, iii, iv, v only) — it's
|
||||
// realistically not a player-name suffix, so the regex leaves it.
|
||||
expect(normalizeName('Henry VIII')).toBe('henry viii');
|
||||
});
|
||||
|
||||
test('strips punctuation (default: keepDigits=false drops digits too)', () => {
|
||||
expect(normalizeName('A.J. Brown')).toBe('a j brown');
|
||||
expect(normalizeName("Shaq O'Neal #34")).toBe('shaq o neal');
|
||||
});
|
||||
|
||||
test('keepDigits true preserves jersey numbers', () => {
|
||||
expect(normalizeName("Shaq O'Neal #34", { keepDigits: true })).toBe('shaq o neal 34');
|
||||
expect(normalizeName('Player 23', { keepDigits: true })).toBe('player 23');
|
||||
expect(normalizeName('Player 23', { keepDigits: false })).toBe('player');
|
||||
});
|
||||
|
||||
test('collapses runs of whitespace', () => {
|
||||
expect(normalizeName('Spaced Out\tName')).toBe('spaced out name');
|
||||
});
|
||||
|
||||
test('null / undefined / empty input returns empty string', () => {
|
||||
expect(normalizeName(null)).toBe('');
|
||||
expect(normalizeName(undefined)).toBe('');
|
||||
expect(normalizeName('')).toBe('');
|
||||
});
|
||||
|
||||
test('numeric input gets toStringed', () => {
|
||||
expect(normalizeName(42, { keepDigits: true })).toBe('42');
|
||||
});
|
||||
|
||||
test('idempotent — normalize(normalize(x)) === normalize(x)', () => {
|
||||
const samples = ['Luka Dončić', 'Tim Hardaway Jr.', "A.J. Brown #11"];
|
||||
for (const s of samples) {
|
||||
const once = normalizeName(s);
|
||||
expect(normalizeName(once)).toBe(once);
|
||||
}
|
||||
for (const s of samples) {
|
||||
const once = normalizeName(s, { keepDigits: true });
|
||||
expect(normalizeName(once, { keepDigits: true })).toBe(once);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user