Fix Claude test credential setup

This commit is contained in:
Mohamed Boudra
2025-12-24 23:31:31 +07:00
parent 9d3b45475a
commit 5ce9be1688
4 changed files with 46 additions and 16 deletions
@@ -2,7 +2,7 @@ import net from "node:net";
import os from "node:os";
import path from "node:path";
import { existsSync } from "node:fs";
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { copyFile, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { describe, expect, test } from "vitest";
import { experimental_createMCPClient } from "ai";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
@@ -36,6 +36,14 @@ const CLAUDE_SETTINGS = {
},
};
async function copyClaudeCredentials(sourceDir: string, targetDir: string): Promise<void> {
const sourceCredentials = path.join(sourceDir, ".credentials.json");
if (!existsSync(sourceCredentials)) {
return;
}
await copyFile(sourceCredentials, path.join(targetDir, ".credentials.json"));
}
async function getAvailablePort(): Promise<number> {
return new Promise((resolve, reject) => {
const server = net.createServer();
@@ -145,10 +153,13 @@ describe("agent MCP end-to-end", () => {
process.env.CODEX_SESSION_DIR = codexSessionDir;
process.env.CODEX_HOME = codexHome;
const previousClaudeConfigDir = process.env.CLAUDE_CONFIG_DIR;
const sourceClaudeConfigDir =
previousClaudeConfigDir ?? path.join(os.homedir(), ".claude");
const claudeConfigDir = await mkdtemp(path.join(os.tmpdir(), "claude-config-"));
const claudeSettingsText = `${JSON.stringify(CLAUDE_SETTINGS, null, 2)}\n`;
await writeFile(path.join(claudeConfigDir, "settings.json"), claudeSettingsText, "utf8");
await writeFile(path.join(claudeConfigDir, "settings.local.json"), claudeSettingsText, "utf8");
await copyClaudeCredentials(sourceClaudeConfigDir, claudeConfigDir);
process.env.CLAUDE_CONFIG_DIR = claudeConfigDir;
const daemon = await createPaseoDaemon(daemonConfig);
@@ -2,6 +2,7 @@ import { afterAll, beforeAll, describe, expect, test, vi } from "vitest";
import { createServer as createHTTPServer } from "http";
import { randomUUID } from "node:crypto";
import {
copyFileSync,
existsSync,
mkdtempSync,
readFileSync,
@@ -34,17 +35,6 @@ import { AgentManager } from "../agent-manager.js";
import { AgentRegistry } from "../agent-registry.js";
import { createAgentMcpServer } from "../mcp-server.js";
const hasClaudeCredentials = Boolean(
process.env.CLAUDE_CODE_OAUTH_TOKEN || process.env.ANTHROPIC_API_KEY?.trim()?.length
);
const requireClaudeCredentials = () => {
if (!hasClaudeCredentials) {
throw new Error(
"Claude credentials missing. Set CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY to run ClaudeAgentClient integration tests."
);
}
};
function tmpCwd(): string {
const dir = mkdtempSync(path.join(os.tmpdir(), "claude-agent-e2e-"));
try {
@@ -54,8 +44,18 @@ function tmpCwd(): string {
}
}
function copyClaudeCredentials(sourceDir: string, targetDir: string): void {
const sourceCredentials = path.join(sourceDir, ".credentials.json");
if (!existsSync(sourceCredentials)) {
return;
}
copyFileSync(sourceCredentials, path.join(targetDir, ".credentials.json"));
}
function useTempClaudeConfigDir(): () => void {
const previousConfigDir = process.env.CLAUDE_CONFIG_DIR;
const sourceConfigDir =
previousConfigDir ?? path.join(os.homedir(), ".claude");
const configDir = mkdtempSync(path.join(os.tmpdir(), "claude-config-"));
const settings = {
permissions: {
@@ -72,6 +72,7 @@ function useTempClaudeConfigDir(): () => void {
const settingsText = `${JSON.stringify(settings, null, 2)}\n`;
writeFileSync(path.join(configDir, "settings.json"), settingsText, "utf8");
writeFileSync(path.join(configDir, "settings.local.json"), settingsText, "utf8");
copyClaudeCredentials(sourceConfigDir, configDir);
process.env.CLAUDE_CONFIG_DIR = configDir;
return () => {
if (previousConfigDir === undefined) {
@@ -274,9 +275,6 @@ describe("ClaudeAgentClient (SDK integration)", () => {
},
});
beforeAll(() => {
requireClaudeCredentials();
});
beforeAll(() => {
restoreClaudeConfigDir = useTempClaudeConfigDir();
});