Rhys Sullivanremove v3 workinged7a3488 months agoHistory
92 lines · 2.6 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import * as Effect from "effect/Effect";import * as Schema from "effect/Schema"; import { makeToolInvokerFromTools } from "@executor/codemode-core";import { makeDenoSubprocessExecutor } from "@executor/runtime-deno-subprocess"; import {  createSqlControlPlaneRuntime,} from "./index";import { withControlPlaneClient } from "./test-http-client"; const makeExecutionResolver = () => {  const toolInvoker = makeToolInvokerFromTools({    tools: {      "math.add": {        description: "Add two numbers",        inputSchema: Schema.standardSchemaV1(          Schema.Struct({            a: Schema.optional(Schema.Number),            b: Schema.optional(Schema.Number),          }),        ),        execute: ({          a,          b,        }) => ({ sum: (a ?? 0) + (b ?? 0) }),      },    },  });   return () =>    Effect.succeed({      executor: makeDenoSubprocessExecutor(),      toolInvoker,    });}; const makeRuntime = Effect.acquireRelease(  createSqlControlPlaneRuntime({    localDataDir: ":memory:",    executionResolver: makeExecutionResolver(),  }),  (runtime) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),); describe("execution-http", () => {  it.scoped("creates and persists an execution through the HTTP API", () =>    Effect.gen(function* () {      const runtime = yield* makeRuntime;      const installation = runtime.localInstallation;       const createExecution = yield* withControlPlaneClient(        {          runtime,          accountId: installation.accountId,        },        (client) =>          client.executions.create({            path: {              workspaceId: installation.workspaceId,            },            payload: {              code: "return await tools.math.add({ a: 20, b: 22 });",            },          }),      );       expect(createExecution.execution.status).toBe("completed");      expect(createExecution.execution.resultJson).toBe(JSON.stringify({ sum: 42 }));      expect(createExecution.pendingInteraction).toBeNull();       const getExecution = yield* withControlPlaneClient(        {          runtime,          accountId: installation.accountId,        },        (client) =>          client.executions.get({            path: {              workspaceId: installation.workspaceId,              executionId: createExecution.execution.id,            },          }),      );       expect(getExecution.execution.id).toBe(createExecution.execution.id);      expect(getExecution.execution.status).toBe("completed");      expect(getExecution.pendingInteraction).toBeNull();    }),  );});