import { describe, expect, it } from 'vitest' import { providerDisplayNames } from '../domain/providers.js' describe('providerDisplayNames', () => { it('returns bare names when all are unique', () => { expect( providerDisplayNames([ { name: 'Anthropic', slug: 'anthropic' }, { name: 'OpenAI', slug: 'openai' } ]) ).toEqual(['Anthropic', 'OpenAI']) }) it('appends slug to every collision so the disambiguation is symmetric', () => { expect( providerDisplayNames([ { name: 'Kimi For Coding', slug: 'kimi-coding' }, { name: 'Kimi For Coding', slug: 'kimi-coding-cn' } ]) ).toEqual(['Kimi For Coding (kimi-coding)', 'Kimi For Coding (kimi-coding-cn)']) }) it('only disambiguates the colliding group', () => { expect( providerDisplayNames([ { name: 'Anthropic', slug: 'anthropic' }, { name: 'Foo', slug: 'foo-a' }, { name: 'Foo', slug: 'foo-b' } ]) ).toEqual(['Anthropic', 'Foo (foo-a)', 'Foo (foo-b)']) }) it('falls back to plain name if slug is empty', () => { expect( providerDisplayNames([ { name: 'Foo', slug: '' }, { name: 'Foo', slug: '' } ]) ).toEqual(['Foo', 'Foo']) }) it('skips disambiguation when slug equals name', () => { expect( providerDisplayNames([ { name: 'foo', slug: 'foo' }, { name: 'foo', slug: 'foo' } ]) ).toEqual(['foo', 'foo']) }) it('handles empty input', () => { expect(providerDisplayNames([])).toEqual([]) }) it('preserves order', () => { const input = [ { name: 'Z', slug: 'z' }, { name: 'A', slug: 'a1' }, { name: 'A', slug: 'a2' } ] expect(providerDisplayNames(input)).toEqual(['Z', 'A (a1)', 'A (a2)']) }) })