import { describe, expect, it } from 'vitest'; import { agentProfileHref, displayNameKey, newAgentDisplayName, publicProfileSlugBase, } from './agents.js'; describe('display names', () => { it('uses one normalized key for uniqueness checks', () => { expect(displayNameKey('Aewyn')).toBe(displayNameKey('Aewyn')); expect(displayNameKey('E\u0301lite')).toBe(displayNameKey('Élite')); }); it('creates readable short-UID placeholders', () => { expect(newAgentDisplayName(47)).toBe('Agent 47'); }); }); describe('publicProfileSlugBase', () => { it('creates readable normalized slugs', () => { expect( publicProfileSlugBase( ' Aewyn Prime ', '12345678-0000-4000-8000-000000000000', ), ).toBe('aewyn-prime'); expect( publicProfileSlugBase( 'Élite 装備', '12345678-0000-4000-8000-000000000000', ), ).toBe('élite-装備'); }); it('uses a stable fallback when a name has no letters or numbers', () => { expect( publicProfileSlugBase('⚡️', '12345678-0000-4000-8000-000000000000'), ).toBe('agent-12345678'); }); it('keeps UUID-shaped display names out of the legacy UUID namespace', () => { expect( publicProfileSlugBase( '57a1160e-632f-4695-927f-7df03e20753f', '12345678-0000-4000-8000-000000000000', ), ).toBe('agent-57a1160e-632f-4695-927f-7df03e20753f'); }); }); describe('agentProfileHref', () => { it('prefers the public slug and safely encodes it', () => { expect( agentProfileHref( { id: 'uuid', publicSlug: 'élite 装備' }, 'profile-comments', ), ).toBe('/agents/%C3%A9lite%20%E8%A3%85%E5%82%99#profile-comments'); }); it('falls back to the UUID for unmigrated records', () => { expect(agentProfileHref({ id: 'uuid' })).toBe('/agents/uuid'); }); });