fix: stabilize validate pipeline and cliproxy route tests

This commit is contained in:
Tam Nhu Tran committed 2026-03-20 09:29:51 -04:00
1 parent e2ca9c2407
commit 0d90f04f3e
22 files changed
+214 -65

No files matched your search

@@ -90,6 +90,6 @@ describe('buildClaudeEnvironment - composite remote routing', () => {
expect(env.ANTHROPIC_MODEL).toMatch(/^claude-opus-4-6-thinking(\([^)]+\))?$/);
expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toMatch(/^claude-opus-4-6-thinking(\([^)]+\))?$/);
expect(env.ANTHROPIC_DEFAULT_SONNET_MODEL).toMatch(/^gemini-2.5-pro(\([^)]+\))?$/);
expect(env.ANTHROPIC_DEFAULT_HAIKU_MODEL).toBe('gpt-5.1-codex-mini');
expect(env.ANTHROPIC_DEFAULT_HAIKU_MODEL).toMatch(/^gpt-5.1-codex-mini(?:-medium)?$/);
});
});
@@ -14,18 +14,30 @@ import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import type { Server } from 'http';
import claudeExtensionRoutes from '../../../src/web-server/routes/claude-extension-routes';
import SharedManager from '../../../src/management/shared-manager';
import { createEmptyUnifiedConfig } from '../../../src/config/unified-config-types';
import { saveUnifiedConfig } from '../../../src/config/unified-config-loader';
describe('web-server claude-extension-routes', () => {
let server: Server;
let baseUrl = '';
let tempHome = '';
let originalCcsHome: string | undefined;
let originalClaudeConfigDir: string | undefined;
let setGlobalConfigDir: (dir: string | undefined) => void;
let claudeExtensionRoutes: ReturnType<typeof express.Router>;
let SharedManager: typeof import('../../../src/management/shared-manager').default;
let createEmptyUnifiedConfig: typeof import('../../../src/config/unified-config-types').createEmptyUnifiedConfig;
let saveUnifiedConfig: typeof import('../../../src/config/unified-config-loader').saveUnifiedConfig;
beforeAll(async () => {
originalCcsHome = process.env.CCS_HOME;
originalClaudeConfigDir = process.env.CLAUDE_CONFIG_DIR;
({ setGlobalConfigDir } = await import('../../../src/utils/config-manager'));
({ default: SharedManager } = await import('../../../src/management/shared-manager'));
({ createEmptyUnifiedConfig } = await import('../../../src/config/unified-config-types'));
({ saveUnifiedConfig } = await import('../../../src/config/unified-config-loader'));
({ default: claudeExtensionRoutes } = await import(
'../../../src/web-server/routes/claude-extension-routes'
));
const app = express();
app.use(express.json());
app.use('/api/claude-extension', claudeExtensionRoutes);
@@ -49,12 +61,20 @@ describe('web-server claude-extension-routes', () => {
afterAll(async () => {
await new Promise<void>((resolve) => server.close(() => resolve()));
setGlobalConfigDir(undefined);
if (originalCcsHome !== undefined) process.env.CCS_HOME = originalCcsHome;
else delete process.env.CCS_HOME;
if (originalClaudeConfigDir !== undefined) process.env.CLAUDE_CONFIG_DIR = originalClaudeConfigDir;
else delete process.env.CLAUDE_CONFIG_DIR;
});
beforeEach(() => {
tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-claude-extension-routes-'));
originalCcsHome = process.env.CCS_HOME;
process.env.CCS_HOME = tempHome;
process.env.CLAUDE_CONFIG_DIR = path.join(tempHome, '.claude');
setGlobalConfigDir(path.join(tempHome, '.ccs'));
const ccsDir = path.join(tempHome, '.ccs');
fs.mkdirSync(ccsDir, { recursive: true });
@@ -110,9 +130,9 @@ describe('web-server claude-extension-routes', () => {
afterEach(() => {
mock.restore();
if (originalCcsHome !== undefined) process.env.CCS_HOME = originalCcsHome;
else delete process.env.CCS_HOME;
setGlobalConfigDir(undefined);
delete process.env.CCS_HOME;
delete process.env.CLAUDE_CONFIG_DIR;
if (tempHome && fs.existsSync(tempHome)) {
fs.rmSync(tempHome, { recursive: true, force: true });
@@ -7,12 +7,34 @@ const installSpy = {
};
mock.module('../../../src/config/unified-config-loader', () => ({
isUnifiedMode: () => true,
loadUnifiedConfig: () => ({
cliproxy: { backend: 'plus' },
}),
loadOrCreateUnifiedConfig: () => ({
cliproxy: { backend: 'plus' },
}),
getGlobalEnvConfig: () => ({}),
getThinkingConfig: () => ({
mode: 'auto',
tier_defaults: {
opus: 'high',
sonnet: 'high',
haiku: 'medium',
},
provider_overrides: {},
show_warnings: true,
}),
getCliproxySafetyConfig: () => ({
antigravity_ack_bypass: false,
}),
saveUnifiedConfig: () => {},
}));
mock.module('../../../src/cliproxy/binary-manager', () => ({
ensureCLIProxyBinary: async () => '/tmp/cliproxy',
isCLIProxyInstalled: () => true,
getCLIProxyPath: () => '/tmp/cliproxy',
checkCliproxyUpdate: async () => ({
hasUpdate: false,
currentVersion: '6.6.80',
@@ -26,6 +48,7 @@ mock.module('../../../src/cliproxy/binary-manager', () => ({
}),
getInstalledCliproxyVersion: () => '6.6.80',
installCliproxyVersion: async () => {},
fetchLatestCliproxyVersion: async () => '6.6.89',
}));
mock.module('../../../src/cliproxy/binary/version-checker', () => ({
@@ -103,7 +126,9 @@ beforeEach(() => {
});
afterAll(async () => {
await new Promise<void>((resolve) => server.close(() => resolve()));
if (server) {
await new Promise<void>((resolve) => server.close(() => resolve()));
}
mock.restore();
});
@@ -4,7 +4,6 @@ import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import type { Server } from 'http';
import cliproxyStatsRoutes from '../../../src/web-server/routes/cliproxy-stats-routes';
function writeSettings(filePath: string, env: Record<string, string>): void {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
@@ -16,8 +15,16 @@ describe('cliproxy-stats-routes model update canonicalization', () => {
let baseUrl = '';
let tempHome = '';
let originalCcsHome: string | undefined;
let setGlobalConfigDir: (dir: string | undefined) => void;
let cliproxyStatsRoutes: ReturnType<typeof express.Router>;
beforeAll(async () => {
originalCcsHome = process.env.CCS_HOME;
({ setGlobalConfigDir } = await import('../../../src/utils/config-manager'));
({ default: cliproxyStatsRoutes } = await import(
'../../../src/web-server/routes/cliproxy-stats-routes'
));
const app = express();
app.use(express.json());
app.use('/api/cliproxy', cliproxyStatsRoutes);
@@ -41,20 +48,24 @@ describe('cliproxy-stats-routes model update canonicalization', () => {
afterAll(async () => {
await new Promise<void>((resolve) => server.close(() => resolve()));
});
setGlobalConfigDir(undefined);
beforeEach(() => {
tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-cliproxy-model-route-'));
originalCcsHome = process.env.CCS_HOME;
process.env.CCS_HOME = tempHome;
});
afterEach(() => {
if (originalCcsHome !== undefined) {
process.env.CCS_HOME = originalCcsHome;
} else {
delete process.env.CCS_HOME;
}
});
beforeEach(() => {
tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-cliproxy-model-route-'));
process.env.CCS_HOME = tempHome;
setGlobalConfigDir(path.join(tempHome, '.ccs'));
});
afterEach(() => {
setGlobalConfigDir(undefined);
delete process.env.CCS_HOME;
if (tempHome && fs.existsSync(tempHome)) {
fs.rmSync(tempHome, { recursive: true, force: true });