invoke-before-eval.test.ts•2.32 kB
import { test, expect, describe } from "./test-fixtures.js";
describe("Invoke Before Eval Test", () => {
test("should handle invoke call before any eval calls", async ({ client }) => {
// Call invoke before any eval - this should initialize the VM context
const invokeResult = await client.callTool({
name: "invoke",
arguments: {
calls: [
{
server: "filesystem",
tool: "list_allowed_directories",
parameters: {},
},
],
parallel: false,
},
});
expect(invokeResult.isError).toBeFalsy();
expect(invokeResult.content).toBeDefined();
expect(Array.isArray(invokeResult.content)).toBe(true);
// Now call eval to access $results
const evalResult = await client.callTool({
name: "eval",
arguments: {
function: "() => $results.length",
},
});
expect(evalResult.isError).toBeFalsy();
expect(evalResult.content).toBeDefined();
const content = evalResult.content as Array<{ type: string; text: string }>;
const textContent = content.find((c) => c.type === "text");
expect(textContent).toBeDefined();
expect(textContent?.text).toBe("$results[1] = // eval\n1");
});
test("should store invoke results in $results array accessible from eval", async ({ client }) => {
// Call invoke to store a result
const invokeResult = await client.callTool({
name: "invoke",
arguments: {
calls: [
{
server: "filesystem",
tool: "list_allowed_directories",
parameters: {},
},
],
parallel: false,
},
});
expect(invokeResult.isError).toBeFalsy();
// Access the stored result from eval - check it's a string (unwrapped)
const evalResult = await client.callTool({
name: "eval",
arguments: {
function: "() => typeof $results[$results.length - 1]",
},
});
expect(evalResult.isError).toBeFalsy();
expect(evalResult.content).toBeDefined();
const content = evalResult.content as Array<{ type: string; text: string }>;
const textContent = content.find((c) => c.type === "text");
expect(textContent).toBeDefined();
expect(textContent?.text).toBe("$results[1] = // eval\nstring");
});
});