import { assert, describe, it } from "@effect/vitest";import * as Effect from "effect/Effect";import * as Exit from "effect/Exit";import * as Schema from "effect/Schema"; import { PROJECT_SCRIPT_MCP_MAX_LIST_LIMIT, PROJECT_SCRIPT_MCP_MAX_PREVIEW_CHARS, ProjectScriptMcpListInput, ProjectScriptMcpRunInput, ProjectScriptMcpStopInput,} from "./projectScriptMcp.ts"; const decodeList = Schema.decodeUnknownEffect(ProjectScriptMcpListInput);const decodeRun = Schema.decodeUnknownEffect(ProjectScriptMcpRunInput);const decodeStop = Schema.decodeUnknownEffect(ProjectScriptMcpStopInput); describe("project script MCP contracts", () => { it.effect("bounds pages and command previews", () => Effect.gen(function* () { assert.deepEqual(yield* decodeList({}), {}); assert.isTrue( Exit.isFailure( yield* Effect.exit(decodeList({ limit: PROJECT_SCRIPT_MCP_MAX_LIST_LIMIT + 1 })), ), ); assert.isTrue( Exit.isFailure( yield* Effect.exit( decodeList({ commandPreviewChars: PROJECT_SCRIPT_MCP_MAX_PREVIEW_CHARS + 1 }), ), ), ); }), ); it.effect("requires saved script and returned terminal handles", () => Effect.gen(function* () { assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeRun({})))); assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeStop({ scriptId: "dev" })))); assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeRun({ scriptId: "dev" })))); assert.deepEqual(yield* decodeRun({ scriptId: "dev", terminalId: "script-run:1" }), { scriptId: "dev", terminalId: "script-run:1", }); assert.deepEqual(yield* decodeStop({ scriptId: "dev", terminalId: "script-run:1" }), { scriptId: "dev", terminalId: "script-run:1", }); const persistedScriptId = "saved-script:".padEnd(1_024, "x"); assert.deepEqual( yield* decodeRun({ scriptId: persistedScriptId, terminalId: "script-run:long-id" }), { scriptId: persistedScriptId, terminalId: "script-run:long-id" }, ); }), );});
import { assert, describe, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
import * as Exit from "effect/Exit";
import * as Schema from "effect/Schema";
import {
PROJECT_SCRIPT_MCP_MAX_LIST_LIMIT,
PROJECT_SCRIPT_MCP_MAX_PREVIEW_CHARS,
ProjectScriptMcpListInput,
ProjectScriptMcpRunInput,
ProjectScriptMcpStopInput,
} from "./projectScriptMcp.ts";
const decodeList = Schema.decodeUnknownEffect(ProjectScriptMcpListInput);
const decodeRun = Schema.decodeUnknownEffect(ProjectScriptMcpRunInput);
const decodeStop = Schema.decodeUnknownEffect(ProjectScriptMcpStopInput);
describe("project script MCP contracts", () => {
it.effect("bounds pages and command previews", () =>
Effect.gen(function* () {
assert.deepEqual(yield* decodeList({}), {});
assert.isTrue(
Exit.isFailure(
yield* Effect.exit(decodeList({ limit: PROJECT_SCRIPT_MCP_MAX_LIST_LIMIT + 1 })),
),
);
assert.isTrue(
Exit.isFailure(
yield* Effect.exit(
decodeList({ commandPreviewChars: PROJECT_SCRIPT_MCP_MAX_PREVIEW_CHARS + 1 }),
),
),
);
}),
);
it.effect("requires saved script and returned terminal handles", () =>
Effect.gen(function* () {
assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeRun({}))));
assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeStop({ scriptId: "dev" }))));
assert.isTrue(Exit.isFailure(yield* Effect.exit(decodeRun({ scriptId: "dev" }))));
assert.deepEqual(yield* decodeRun({ scriptId: "dev", terminalId: "script-run:1" }), {
scriptId: "dev",
terminalId: "script-run:1",
});
assert.deepEqual(yield* decodeStop({ scriptId: "dev", terminalId: "script-run:1" }), {
scriptId: "dev",
terminalId: "script-run:1",
});
const persistedScriptId = "saved-script:".padEnd(1_024, "x");
assert.deepEqual(
yield* decodeRun({ scriptId: persistedScriptId, terminalId: "script-run:long-id" }),
{ scriptId: persistedScriptId, terminalId: "script-run:long-id" },
);
}),
);
});