// TestLiveServer.ts
export const EnvLive = Layer.mergeAll(
NodeContext.layer,
NodeHttpServer.layer(createServer, { port: 1234 }),
NodeHttpClient.layerWithoutAgent,
).pipe(Layer.provide(NodeHttpClient.makeAgentLayer({ keepAlive: false })));
export const client = pipe(
HttpClient.fetch,
HttpClient.mapRequest(HttpRequest.prependUrl(`http://0.0.0.0:1234/rpc`)),
HttpResolverNoStream.make<ContestIORouter>,
Resolver.toClient,
);
// Schema.ts
export class GetContest extends S.TaggedRequest<GetContest>()(
"GetContest",
S.Union(NotFound, DbError),
DT.Contest,
{ id: DT.ContestId },
) {}
// e2e.test.ts
import { beforeAll, beforeEach, describe, expect, it } from "@effect/vitest";
it.scoped("Create contest", () =>
Effect.gen(function* () {
yield* serve;
console.error("Error creating contest");
const created = yield* client(new RS.CreateContest(contestInit));
const contestId = created.id;
const updated = yield* client(new RS.GetContest({ id: contestId }));
expect(updated).toMatchObject(contestInit);
}).pipe(Effect.provide(EnvLive)),
);
// TestLiveServer.ts
export const EnvLive = Layer.mergeAll(
NodeContext.layer,
NodeHttpServer.layer(createServer, { port: 1234 }),
NodeHttpClient.layerWithoutAgent,
).pipe(Layer.provide(NodeHttpClient.makeAgentLayer({ keepAlive: false })));
export const client = pipe(
HttpClient.fetch,
HttpClient.mapRequest(HttpRequest.prependUrl(`http://0.0.0.0:1234/rpc`)),
HttpResolverNoStream.make<ContestIORouter>,
Resolver.toClient,
);
// Schema.ts
export class GetContest extends S.TaggedRequest<GetContest>()(
"GetContest",
S.Union(NotFound, DbError),
DT.Contest,
{ id: DT.ContestId },
) {}
// e2e.test.ts
import { beforeAll, beforeEach, describe, expect, it } from "@effect/vitest";
it.scoped("Create contest", () =>
Effect.gen(function* () {
yield* serve;
console.error("Error creating contest");
const created = yield* client(new RS.CreateContest(contestInit));
const contestId = created.id;
const updated = yield* client(new RS.GetContest({ id: contestId }));
expect(updated).toMatchObject(contestInit);
}).pipe(Effect.provide(EnvLive)),
);