Files
claudecodeui/server/routes/tests/commands.test.js
2026-05-14 13:22:34 +03:00

55 lines
2.0 KiB
JavaScript

import assert from 'node:assert/strict';
import { mkdtemp, rm } from 'node:fs/promises';
import os from 'node:os';
import path from 'node:path';
import test from 'node:test';
import { executeModelsCommand } from '../commands.js';
const withTemporaryModelsCache = async (callback) => {
const tempRoot = await mkdtemp(path.join(os.tmpdir(), 'commands-model-cache-'));
const previousCachePath = process.env.CLOUDCLI_PROVIDER_MODELS_CACHE_PATH;
process.env.CLOUDCLI_PROVIDER_MODELS_CACHE_PATH = path.join(tempRoot, 'models-cache.json');
try {
await callback();
} finally {
if (previousCachePath === undefined) {
delete process.env.CLOUDCLI_PROVIDER_MODELS_CACHE_PATH;
} else {
process.env.CLOUDCLI_PROVIDER_MODELS_CACHE_PATH = previousCachePath;
}
await rm(tempRoot, { recursive: true, force: true });
}
};
test('models command returns available models only for the active provider', async () => {
await withTemporaryModelsCache(async () => {
const result = await executeModelsCommand([], {
provider: 'codex',
model: 'gpt-5.4',
});
assert.equal(result.type, 'builtin');
assert.equal(result.action, 'models');
assert.equal(result.data.current.provider, 'codex');
assert.equal(result.data.current.model, 'gpt-5.4');
assert.deepEqual(Object.keys(result.data.available), ['codex']);
assert.deepEqual(result.data.available.codex, result.data.availableModels);
assert.ok(result.data.availableModels.includes('gpt-5.4'));
assert.equal(result.data.available.claude, undefined);
assert.equal(result.data.available.cursor, undefined);
});
});
test('models command falls back to claude for unsupported providers', async () => {
await withTemporaryModelsCache(async () => {
const result = await executeModelsCommand([], {
provider: 'unknown-provider',
});
assert.equal(result.data.current.provider, 'claude');
assert.deepEqual(Object.keys(result.data.available), ['claude']);
});
});