import { mock, describe, expect, test } from 'bun:test' // Mock heavy deps mock.module('src/utils/model/agent.js', () => ({ getDefaultSubagentModel: () => undefined, })) mock.module('src/utils/settings/constants.js', () => ({ getSourceDisplayName: (source: string) => source, getSourceDisplayNameLowercase: (source: string) => source, getSourceDisplayNameCapitalized: (source: string) => source, getSettingSourceName: (source: string) => source, getSettingSourceDisplayNameLowercase: (source: string) => source, getSettingSourceDisplayNameCapitalized: (source: string) => source, parseSettingSourcesFlag: () => [], getEnabledSettingSources: () => [], isSettingSourceEnabled: () => true, SETTING_SOURCES: ['localSettings', 'userSettings', 'projectSettings'], SOURCES: ['localSettings', 'userSettings', 'projectSettings'], CLAUDE_CODE_SETTINGS_SCHEMA_URL: 'https://json.schemastore.org/claude-code-settings.json', })) const { resolveAgentOverrides, compareAgentsByName, AGENT_SOURCE_GROUPS } = await import('../agentDisplay') function makeAgent(agentType: string, source: string): any { return { agentType, source, name: agentType } } describe('resolveAgentOverrides', () => { test('marks no overrides when all agents active', () => { const agents = [makeAgent('builder', 'userSettings')] const result = resolveAgentOverrides(agents, agents) expect(result).toHaveLength(1) expect(result[0].overriddenBy).toBeUndefined() }) test('marks inactive agent as overridden', () => { const allAgents = [ makeAgent('builder', 'projectSettings'), makeAgent('builder', 'userSettings'), ] const activeAgents = [makeAgent('builder', 'userSettings')] const result = resolveAgentOverrides(allAgents, activeAgents) const projectAgent = result.find((a: any) => a.source === 'projectSettings') expect(projectAgent?.overriddenBy).toBe('userSettings') }) test('overriddenBy shows the overriding agent source', () => { const allAgents = [makeAgent('tester', 'localSettings')] const activeAgents = [makeAgent('tester', 'policySettings')] const result = resolveAgentOverrides(allAgents, activeAgents) expect(result[0].overriddenBy).toBe('policySettings') }) test('deduplicates agents by (agentType, source)', () => { const agents = [ makeAgent('builder', 'userSettings'), makeAgent('builder', 'userSettings'), // duplicate ] const result = resolveAgentOverrides(agents, agents.slice(0, 1)) expect(result).toHaveLength(1) }) test('preserves agent definition properties', () => { const agents = [ { agentType: 'a', source: 'userSettings', name: 'Agent A' }, ] as any[] const result = resolveAgentOverrides(agents, agents) expect((result[0] as any).name).toBe('Agent A') expect(result[0].agentType).toBe('a') }) test('handles empty arrays', () => { expect(resolveAgentOverrides([], [])).toEqual([]) }) test('handles agent from git worktree (duplicate detection)', () => { const agents = [ makeAgent('builder', 'projectSettings'), makeAgent('builder', 'projectSettings'), makeAgent('builder', 'localSettings'), ] const result = resolveAgentOverrides(agents, agents.slice(0, 1)) // Deduped: projectSettings appears once, localSettings once expect(result).toHaveLength(2) }) }) describe('compareAgentsByName', () => { test('sorts alphabetically ascending', () => { const a = makeAgent('alpha', 'userSettings') const b = makeAgent('beta', 'userSettings') expect(compareAgentsByName(a, b)).toBeLessThan(0) }) test('returns negative when a.name < b.name', () => { const a = makeAgent('a', 's') const b = makeAgent('b', 's') expect(compareAgentsByName(a, b)).toBeLessThan(0) }) test('returns positive when a.name > b.name', () => { const a = makeAgent('z', 's') const b = makeAgent('a', 's') expect(compareAgentsByName(a, b)).toBeGreaterThan(0) }) test('returns 0 for same name', () => { const a = makeAgent('same', 's') const b = makeAgent('same', 's') expect(compareAgentsByName(a, b)).toBe(0) }) test('is case-insensitive (sensitivity: base)', () => { const a = makeAgent('Alpha', 's') const b = makeAgent('alpha', 's') expect(compareAgentsByName(a, b)).toBe(0) }) }) describe('AGENT_SOURCE_GROUPS', () => { test('contains expected source groups in order', () => { expect(AGENT_SOURCE_GROUPS).toHaveLength(7) expect(AGENT_SOURCE_GROUPS[0]).toEqual({ label: 'User agents', source: 'userSettings', }) expect(AGENT_SOURCE_GROUPS[6]).toEqual({ label: 'Built-in agents', source: 'built-in', }) }) test('has unique labels', () => { const labels = AGENT_SOURCE_GROUPS.map(g => g.label) expect(new Set(labels).size).toBe(labels.length) }) test('has unique sources', () => { const sources = AGENT_SOURCE_GROUPS.map(g => g.source) expect(new Set(sources).size).toBe(sources.length) }) })