test(file): migrate fsmonitor tests to Effect runner (#27099)
This commit is contained in:
@@ -3,67 +3,68 @@ import { describe, expect, test } from "bun:test"
|
|||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { File } from "../../src/file"
|
|
||||||
import { Instance } from "../../src/project/instance"
|
|
||||||
import { WithInstance } from "../../src/project/with-instance"
|
|
||||||
import { provideInstance, tmpdir } from "../fixture/fixture"
|
|
||||||
|
|
||||||
const run = <A, E>(eff: Effect.Effect<A, E, File.Service>) =>
|
const it = process.platform === "win32" ? (await import("../lib/effect")).testEffect((await import("../../src/file")).File.defaultLayer) : undefined
|
||||||
Effect.runPromise(provideInstance(Instance.directory)(eff.pipe(Effect.provide(File.defaultLayer))))
|
|
||||||
const status = () => run(File.Service.use((svc) => svc.status()))
|
|
||||||
const read = (file: string) => run(File.Service.use((svc) => svc.read(file)))
|
|
||||||
|
|
||||||
const wintest = process.platform === "win32" ? test : test.skip
|
|
||||||
|
|
||||||
describe("file fsmonitor", () => {
|
describe("file fsmonitor", () => {
|
||||||
wintest("status does not start fsmonitor for readonly git checks", async () => {
|
if (!it) {
|
||||||
await using tmp = await tmpdir({ git: true })
|
test.skip("status does not start fsmonitor for readonly git checks", () => {})
|
||||||
const target = path.join(tmp.path, "tracked.txt")
|
test.skip("read does not start fsmonitor for git diffs", () => {})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
await fs.writeFile(target, "base\n")
|
it.instance(
|
||||||
await $`git add tracked.txt`.cwd(tmp.path).quiet()
|
"status does not start fsmonitor for readonly git checks",
|
||||||
await $`git commit -m init`.cwd(tmp.path).quiet()
|
() =>
|
||||||
await $`git config core.fsmonitor true`.cwd(tmp.path).quiet()
|
Effect.gen(function* () {
|
||||||
await $`git fsmonitor--daemon stop`.cwd(tmp.path).quiet().nothrow()
|
const { File } = yield* Effect.promise(() => import("../../src/file"))
|
||||||
await fs.writeFile(target, "next\n")
|
const { TestInstance } = yield* Effect.promise(() => import("../fixture/fixture"))
|
||||||
await fs.writeFile(path.join(tmp.path, "new.txt"), "new\n")
|
const directory = (yield* TestInstance).directory
|
||||||
|
const target = path.join(directory, "tracked.txt")
|
||||||
|
|
||||||
const before = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
|
yield* Effect.promise(() => fs.writeFile(target, "base\n"))
|
||||||
expect(before.exitCode).not.toBe(0)
|
yield* Effect.promise(() => $`git add tracked.txt`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git commit -m init`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git config core.fsmonitor true`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git fsmonitor--daemon stop`.cwd(directory).quiet().nothrow())
|
||||||
|
yield* Effect.promise(() => fs.writeFile(target, "next\n"))
|
||||||
|
yield* Effect.promise(() => fs.writeFile(path.join(directory, "new.txt"), "new\n"))
|
||||||
|
|
||||||
await WithInstance.provide({
|
const before = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
|
||||||
directory: tmp.path,
|
expect(before.exitCode).not.toBe(0)
|
||||||
fn: async () => {
|
|
||||||
await status()
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const after = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
|
yield* File.Service.use((svc) => svc.status())
|
||||||
expect(after.exitCode).not.toBe(0)
|
|
||||||
})
|
|
||||||
|
|
||||||
wintest("read does not start fsmonitor for git diffs", async () => {
|
const after = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
|
||||||
await using tmp = await tmpdir({ git: true })
|
expect(after.exitCode).not.toBe(0)
|
||||||
const target = path.join(tmp.path, "tracked.txt")
|
}),
|
||||||
|
{ git: true },
|
||||||
|
)
|
||||||
|
|
||||||
await fs.writeFile(target, "base\n")
|
it.instance(
|
||||||
await $`git add tracked.txt`.cwd(tmp.path).quiet()
|
"read does not start fsmonitor for git diffs",
|
||||||
await $`git commit -m init`.cwd(tmp.path).quiet()
|
() =>
|
||||||
await $`git config core.fsmonitor true`.cwd(tmp.path).quiet()
|
Effect.gen(function* () {
|
||||||
await $`git fsmonitor--daemon stop`.cwd(tmp.path).quiet().nothrow()
|
const { File } = yield* Effect.promise(() => import("../../src/file"))
|
||||||
await fs.writeFile(target, "next\n")
|
const { TestInstance } = yield* Effect.promise(() => import("../fixture/fixture"))
|
||||||
|
const directory = (yield* TestInstance).directory
|
||||||
|
const target = path.join(directory, "tracked.txt")
|
||||||
|
|
||||||
const before = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
|
yield* Effect.promise(() => fs.writeFile(target, "base\n"))
|
||||||
expect(before.exitCode).not.toBe(0)
|
yield* Effect.promise(() => $`git add tracked.txt`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git commit -m init`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git config core.fsmonitor true`.cwd(directory).quiet())
|
||||||
|
yield* Effect.promise(() => $`git fsmonitor--daemon stop`.cwd(directory).quiet().nothrow())
|
||||||
|
yield* Effect.promise(() => fs.writeFile(target, "next\n"))
|
||||||
|
|
||||||
await WithInstance.provide({
|
const before = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
|
||||||
directory: tmp.path,
|
expect(before.exitCode).not.toBe(0)
|
||||||
fn: async () => {
|
|
||||||
await read("tracked.txt")
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const after = await $`git fsmonitor--daemon status`.cwd(tmp.path).quiet().nothrow()
|
yield* File.Service.use((svc) => svc.read("tracked.txt"))
|
||||||
expect(after.exitCode).not.toBe(0)
|
|
||||||
})
|
const after = yield* Effect.promise(() => $`git fsmonitor--daemon status`.cwd(directory).quiet().nothrow())
|
||||||
|
expect(after.exitCode).not.toBe(0)
|
||||||
|
}),
|
||||||
|
{ git: true },
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user