Files
2026-07-13 13:20:22 +08:00

58 lines
1.7 KiB
TypeScript

/**
* @license
* Copyright 2025 AionUi (aionui.com)
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, expect, it } from 'vitest';
import type { Assistant } from '@/common/types/agent/assistantTypes';
import { selectableAssistants } from '@/renderer/utils/model/assistantSelection';
const mk = (id: string, source: Assistant['source'], sort_order: number, enabled = true): Assistant =>
({
id,
source,
name: id,
name_i18n: {},
description_i18n: {},
enabled,
sort_order,
enabled_skills: [],
custom_skill_names: [],
disabled_builtin_skills: [],
context_i18n: {},
prompts: [],
prompts_i18n: {},
models: [],
agent_status: 'online',
team_selectable: true,
deletable: source === 'user',
}) as Assistant;
describe('selectableAssistants', () => {
it('orders by group (generated → user → builtin), then sort_order within a group', () => {
const result = selectableAssistants([
mk('builtin-a', 'builtin', 5),
mk('user-b', 'user', 20),
mk('cli-a', 'generated', 30),
mk('user-a', 'user', 10),
mk('cli-b', 'generated', 40),
]);
expect(result.map((a) => a.id)).toEqual(['cli-a', 'cli-b', 'user-a', 'user-b', 'builtin-a']);
});
it('drops disabled assistants', () => {
const result = selectableAssistants([
mk('cli-on', 'generated', 10, true),
mk('cli-off', 'generated', 20, false),
mk('user-off', 'user', 30, false),
]);
expect(result.map((a) => a.id)).toEqual(['cli-on']);
});
it('keeps CLI agents ahead of official even when official has a lower sort_order', () => {
const result = selectableAssistants([mk('official', 'builtin', 1), mk('cli', 'generated', 999)]);
expect(result[0].id).toBe('cli');
});
});