Skip to content
Source
Sign inSign up

T3ProjectFileLoader.test.ts

43 lines1.4 KB

1import * as NodeServices from "@effect/platform-node/NodeServices";
2import { it, describe, expect } from "@effect/vitest";
3import * as Effect from "effect/Effect";
4import * as FileSystem from "effect/FileSystem";
5import * as Layer from "effect/Layer";
6import * as Option from "effect/Option";
7import * as Path from "effect/Path";
8​
9import * as T3ProjectFileLoader from "./T3ProjectFileLoader.ts";
10​
11const layerTest = Layer.empty.pipe(
12 Layer.provideMerge(T3ProjectFileLoader.layer),
13 Layer.provideMerge(NodeServices.layer),
14);
15​
16const makeTempDir = Effect.gen(function* () {
17 const fileSystem = yield* FileSystem.FileSystem;
18 return yield* fileSystem.makeTempDirectoryScoped({
19 prefix: "t3code-project-file-",
20 });
21});
22​
23const writeProjectFile = Effect.fn("writeProjectFile")(function* (cwd: string, contents: string) {
24 const fileSystem = yield* FileSystem.FileSystem;
25 const path = yield* Path.Path;
26 yield* fileSystem.writeFileString(path.join(cwd, "t3.json"), contents).pipe(Effect.orDie);
27});
28​
29it.layer(layerTest)("T3ProjectFileLoader", (it) => {
30 describe("load", () => {
31 it.effect("returns none for malformed JSON without failing", () =>
32 Effect.gen(function* () {
33 const loader = yield* T3ProjectFileLoader.T3ProjectFileLoader;
34 const cwd = yield* makeTempDir;
35 yield* writeProjectFile(cwd, "{ not json");
36​
37 const loaded = yield* loader.load(cwd);
38​
39 expect(Option.isNone(loaded)).toBe(true);
40 }),
41 );
42 });
43});