History

test(execution): cover buildExecuteDescription structure and sort

Rhys Sullivan committed 6 months ago

Commit ae5bb461 parent bd378c61 file · +68 −0Browse files

Unified · Split

packages/core/execution/src/description.test.ts+68−0
@@ -0,0 +1,68 @@
1import { describe, expect, it } from "@effect/vitest";
2import { Effect } from "effect";
3
4import type { Executor, Source } from "@executor/sdk";
5
6import { buildExecuteDescription } from "./description";
7
8const makeSource = (overrides: Partial<Source> & Pick<Source, "id" | "name">): Source => ({
9 kind: "in-memory",
10 pluginId: "test-plugin",
11 canRemove: false,
12 canRefresh: false,
13 canEdit: false,
14 runtime: false,
15 ...overrides,
16});
17
18const makeFakeExecutor = (sources: readonly Source[]): Executor =>
19 ({
20 sources: {
21 list: () => Effect.succeed(sources),
22 },
23 }) as unknown as Executor;
24
25describe("buildExecuteDescription", () => {
26 it.effect("includes the workflow preamble and lists sources sorted by id", () =>
27 Effect.gen(function* () {
28 const sources: readonly Source[] = [
29 // Intentionally out of order — the formatter is expected to sort.
30 makeSource({ id: "slack", name: "Slack Workspace" }),
31 makeSource({ id: "github", name: "GitHub" }),
32 ];
33 const executor = makeFakeExecutor(sources);
34
35 const description = yield* buildExecuteDescription(executor);
36
37 // Stable anchor from the workflow preamble.
38 expect(description).toContain(
39 "Execute TypeScript in a sandboxed runtime",
40 );
41 // The namespaces section header.
42 expect(description).toContain("## Available namespaces");
43 // Both sources rendered with backticks + label-suffix rule.
44 expect(description).toContain("`github` — GitHub");
45 expect(description).toContain("`slack` — Slack Workspace");
46
47 // Sort order: `github` appears before `slack`.
48 const githubIdx = description.indexOf("`github`");
49 const slackIdx = description.indexOf("`slack`");
50 expect(githubIdx).toBeGreaterThan(-1);
51 expect(slackIdx).toBeGreaterThan(-1);
52 expect(githubIdx).toBeLessThan(slackIdx);
53 }),
54 );
55
56 it.effect("omits the Available namespaces section when there are no sources", () =>
57 Effect.gen(function* () {
58 const executor = makeFakeExecutor([]);
59
60 const description = yield* buildExecuteDescription(executor);
61
62 expect(description).toContain(
63 "Execute TypeScript in a sandboxed runtime",
64 );
65 expect(description).not.toContain("## Available namespaces");
66 }),
67 );
68});