import { describe, expect, it } from 'vitest'; import { parseServerName, T5_MAP_ALIASES } from '../../src/lib/server/fleet/map-aliases.js'; describe('parseServerName', () => { it('extracts game, map alias, canonical map, and lobby from a T5 server name', () => { expect(parseServerName('t5_ascension_1')).toEqual({ game: 't5', mapAlias: 'ascension', mapCanonical: 'zombie_cosmodrome', lobby: 1 }); expect(parseServerName('t5_kino_1')).toEqual({ game: 't5', mapAlias: 'kino', mapCanonical: 'zombie_theater', lobby: 1 }); expect(parseServerName('t5_cotd_1')).toEqual({ game: 't5', mapAlias: 'cotd', mapCanonical: 'zombie_coast', lobby: 1 }); }); it('joins multi-segment map aliases and matches the alias table', () => { expect(parseServerName('t5_shi_no_numa_1')).toEqual({ game: 't5', mapAlias: 'shinonuma', mapCanonical: 'zombie_cod5_sumpf', lobby: 1 }); expect(parseServerName('t5_der_riese_2')).toEqual({ game: 't5', mapAlias: 'derriese', mapCanonical: 'zombie_cod5_factory', lobby: 2 }); }); it('treats a name with no trailing lobby number as an alias-only tail', () => { expect(parseServerName('t5_moon')).toEqual({ game: 't5', mapAlias: 'moon', mapCanonical: 'zombie_moon', lobby: null }); }); it('returns mapCanonical=null for unknown aliases so operators can spot the gap', () => { expect(parseServerName('t5_newmap_1')).toEqual({ game: 't5', mapAlias: 'newmap', mapCanonical: null, lobby: 1 }); }); it('rejects names with fewer than two segments', () => { expect(parseServerName('t5')).toBeNull(); expect(parseServerName('')).toBeNull(); }); it('every alias in T5_MAP_ALIASES resolves to a zombie_* canonical mapname', () => { for (const canonical of Object.values(T5_MAP_ALIASES)) { expect(canonical.startsWith('zombie')).toBe(true); } }); });