1import { providers } from "@/Neon/Providers.ts";
2import * as Test from "@/Test/Alchemy.ts";
3import { Server } from "@/Website/Server.ts";
4import { expect } from "alchemy-test";
5import * as Effect from "effect/Effect";
6import { browserRoundtrip } from "./Browser.ts";
7import { bodyContaining, exampleRoot } from "./Fixture.ts";
8
9const { test } = Test.make({ providers: providers(), dev: true });
10
11test.provider(
12 "Vocs source target isolates its dev cwd and supports interactive MDX",
13 (stack) =>
14 Effect.gen(function* () {
15 yield* stack.destroy();
16 const root = yield* exampleRoot("vocs");
17 const framework = new URL(
18 "../../../../../packages/frontend-frameworks/src/vocs/neon.ts",
19 import.meta.url,
20 ).href;
21 const server = yield* stack.deploy(
22 Server("Build", { root, framework, target: framework }),
23 );
24 expect(server.url).toMatch(/^http:\/\/(localhost|127\.0\.0\.1):\d+/);
25 yield* bodyContaining(`${server.url}/counter`, "count:");
26 yield* browserRoundtrip(String(server.url), "vocs");
27 yield* stack.destroy();
28 }),
29 {
30 tags: ["provider:neon", "provider:neon:website", "local"],
31 timeout: 120_000,
32 },
33);