import { spawn, ChildProcess } from "child_process";
import { fileURLToPath } from "url";
import { dirname, join } from "path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
interface ServerResponse {
jsonrpc: string;
id: number;
result?: any;
error?: any;
}
// Test the refresh_translations functionality
function testRefreshTranslations(): void {
console.log("Testing Refresh Translations functionality...\n");
const serverProcess: ChildProcess = spawn(
"node",
[join(__dirname, "../dist/index.js")],
{
stdio: ["pipe", "pipe", "pipe"],
}
);
// Test 1: List tools to confirm refresh_translations is available
const listToolsMessage =
JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/list",
}) + "\n";
serverProcess.stdin?.write(listToolsMessage);
// Test 2: Call refresh_translations tool
const refreshMessage =
JSON.stringify({
jsonrpc: "2.0",
id: 2,
method: "tools/call",
params: {
name: "refresh_translations",
arguments: {},
},
}) + "\n";
setTimeout(() => {
serverProcess.stdin?.write(refreshMessage);
}, 100);
// Test 3: Search after refresh to verify it's working
const searchAfterRefreshMessage =
JSON.stringify({
jsonrpc: "2.0",
id: 3,
method: "tools/call",
params: {
name: "find_translation",
arguments: {
query: "welcome",
},
},
}) + "\n";
setTimeout(() => {
serverProcess.stdin?.write(searchAfterRefreshMessage);
serverProcess.stdin?.end();
}, 200);
let output = "";
serverProcess.stdout?.on("data", (data: Buffer) => {
output += data.toString();
});
serverProcess.stderr?.on("data", (data: Buffer) => {
console.log("Server log:", data.toString());
});
serverProcess.on("close", (code: number | null) => {
console.log("Server responses:");
// Parse and display responses with proper typing
const responses = output
.trim()
.split("\n")
.filter((line) => line.trim());
responses.forEach((responseStr, index) => {
try {
const response: ServerResponse = JSON.parse(responseStr);
console.log(`\n=== Response ${index + 1} (ID: ${response.id}) ===`);
if (response.result) {
if (response.result.tools) {
console.log(
"Tools available:",
response.result.tools.map((t: any) => t.name).join(", ")
);
} else if (response.result.content) {
const content = response.result.content[0]?.text;
console.log("Raw Content:", content);
// Try to parse the content as JSON if it looks like JSON
if (
content &&
(content.trim().startsWith("[") || content.trim().startsWith("{"))
) {
try {
const jsonContent = JSON.parse(content);
if (Array.isArray(jsonContent)) {
console.log("Search Results:");
jsonContent.forEach((item: any, idx: number) => {
console.log(` ${idx + 1}. ${item.key} = "${item.value}"`);
});
} else {
console.log("Refresh Result:");
console.log(` Success: ${jsonContent.success}`);
console.log(` Message: ${jsonContent.message}`);
console.log(` Entries: ${jsonContent.entriesCount}`);
console.log(` Time: ${jsonContent.timestamp}`);
}
} catch (parseError) {
console.log("Content (as text):", content);
}
} else {
console.log("Content:", content);
}
}
}
} catch (error) {
console.log(`Response ${index + 1} (raw):`, responseStr);
}
});
console.log("\nServer exited with code:", code);
console.log("✅ Refresh Translation test completed!");
});
// Clean exit after 8 seconds
setTimeout(() => {
serverProcess.kill();
}, 8000);
}
testRefreshTranslations();