/** * @license * Copyright 2025 AionUi (aionui.com) * SPDX-License-Identifier: Apache-2.0 */ import { beforeEach, describe, expect, it, vi } from 'vitest'; const getAssistantMock = vi.fn(); vi.mock('@/common', () => ({ ipcBridge: { assistants: { get: { invoke: (...args: unknown[]) => getAssistantMock(...args), }, }, }, })); import { resolveDefaultTeamAgentModel } from '@/renderer/pages/team/components/teamCreateModelResolver'; describe('resolveDefaultTeamAgentModel', () => { beforeEach(() => { getAssistantMock.mockReset(); }); it('prefers the assistant fixed default model over agent-level fallbacks', async () => { getAssistantMock.mockResolvedValue({ defaults: { model: { mode: 'fixed', value: 'claude-sonnet-4-5-20250514' }, }, preferences: { last_model_id: 'claude-opus-4-1-20250805', }, }); await expect( resolveDefaultTeamAgentModel({ assistant_id: 'assistant-fixed', }) ).resolves.toBe('claude-sonnet-4-5-20250514'); }); it('uses the assistant remembered auto model before falling back to backend defaults', async () => { getAssistantMock.mockResolvedValue({ defaults: { model: { mode: 'auto' }, }, preferences: { last_model_id: 'gemini-2.5-pro', }, }); await expect( resolveDefaultTeamAgentModel({ assistant_id: 'assistant-auto', }) ).resolves.toBe('gemini-2.5-pro'); }); it('falls back to the assistant engine backend when no assistant-owned model is stored', async () => { getAssistantMock.mockResolvedValue({ defaults: { model: { mode: 'auto' }, }, preferences: { last_model_id: undefined, }, engine: { agent_id: 'cc126dd5', agent: { id: 'cc126dd5', type: 'acp', source: 'builtin', acp_backend: 'gemini', }, }, }); await expect( resolveDefaultTeamAgentModel({ assistant_id: 'assistant-gemini', }) ).resolves.toBe('auto'); }); it('uses the provided assistant backend when detail lookup fails', async () => { getAssistantMock.mockRejectedValue(new Error('lookup failed')); await expect( resolveDefaultTeamAgentModel({ assistant_id: 'assistant-gemini', assistant_backend: 'gemini', }) ).resolves.toBe('auto'); }); });