Files
DeskClaw/tests/unit/provider-model-sync.test.ts
Lingxuan Zuo e28eba01e1 refactor/channel & ipc (#349)
Co-authored-by: paisley <8197966+su8su@users.noreply.github.com>
Co-authored-by: zuolingxuan <zuolingxuan@bytedance.com>
2026-03-09 19:04:00 +08:00

90 lines
2.5 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { buildNonOAuthAgentProviderUpdate, getModelIdFromRef } from '@electron/main/provider-model-sync';
import type { ProviderConfig } from '@electron/utils/secure-storage';
function providerConfig(overrides: Partial<ProviderConfig>): ProviderConfig {
return {
id: 'provider-id',
name: 'Provider',
type: 'moonshot',
enabled: true,
createdAt: '2026-03-09T00:00:00.000Z',
updatedAt: '2026-03-09T00:00:00.000Z',
...overrides,
};
}
describe('provider-model-sync', () => {
it('extracts model ID from provider/model refs', () => {
expect(getModelIdFromRef('moonshot/kimi-k2.5', 'moonshot')).toBe('kimi-k2.5');
expect(getModelIdFromRef('kimi-k2.5', 'moonshot')).toBe('kimi-k2.5');
expect(getModelIdFromRef(undefined, 'moonshot')).toBeUndefined();
});
it('builds models.json update payload for moonshot default switch', () => {
const payload = buildNonOAuthAgentProviderUpdate(
providerConfig({ type: 'moonshot', id: 'moonshot' }),
'moonshot',
'moonshot/kimi-k2.5',
);
expect(payload).toEqual({
providerKey: 'moonshot',
entry: {
baseUrl: 'https://api.moonshot.cn/v1',
api: 'openai-completions',
apiKey: 'MOONSHOT_API_KEY',
models: [{ id: 'kimi-k2.5', name: 'kimi-k2.5' }],
},
});
});
it('prefers provider custom baseUrl and omits models when modelRef is missing', () => {
const payload = buildNonOAuthAgentProviderUpdate(
providerConfig({
type: 'ark',
id: 'ark',
baseUrl: 'https://custom-ark.example.com/v3',
}),
'ark',
undefined,
);
expect(payload).toEqual({
providerKey: 'ark',
entry: {
baseUrl: 'https://custom-ark.example.com/v3',
api: 'openai-completions',
apiKey: 'ARK_API_KEY',
models: [],
},
});
});
it('returns null for oauth and multi-instance providers', () => {
expect(
buildNonOAuthAgentProviderUpdate(
providerConfig({ type: 'qwen-portal', id: 'qwen-portal' }),
'qwen-portal',
'qwen-portal/coder-model',
),
).toBeNull();
expect(
buildNonOAuthAgentProviderUpdate(
providerConfig({ type: 'custom', id: 'custom-123' }),
'custom-123',
'custom-123/model',
),
).toBeNull();
expect(
buildNonOAuthAgentProviderUpdate(
providerConfig({ type: 'ollama', id: 'ollama' }),
'ollama',
'ollama/qwen3:latest',
),
).toBeNull();
});
});