56 lines
2.1 KiB
TypeScript
56 lines
2.1 KiB
TypeScript
import { rm } from "node:fs/promises"
|
|
import { resolve } from "node:path"
|
|
import { NodeServices } from "@effect/platform-node"
|
|
import { expect, it } from "@effect/vitest"
|
|
import { ConfigProvider, Effect, Exit, Fiber } from "effect"
|
|
import { initializeInstance } from "../../src/instance/instance.js"
|
|
import * as OpenCodeInstance from "../../src/instance/runtime.js"
|
|
|
|
const fakeOpenCode = [process.execPath, resolve("test", "fixtures", "fake-opencode.ts")]
|
|
|
|
it.live("stops a TUI while its readiness check is pending", () =>
|
|
Effect.scoped(
|
|
Effect.gen(function* () {
|
|
const artifacts = yield* Effect.promise(() => initializeInstance())
|
|
yield* Effect.addFinalizer(() => Effect.promise(() => rm(artifacts, { recursive: true, force: true })))
|
|
const instance = yield* OpenCodeInstance.make({
|
|
artifacts,
|
|
name: "pending-client-test",
|
|
scripted: true,
|
|
command: [...fakeOpenCode, "no-ui"],
|
|
})
|
|
|
|
yield* instance.launchServer
|
|
const launch = yield* instance.launchTui("pending").pipe(Effect.exit, Effect.forkChild)
|
|
yield* Effect.sleep(100)
|
|
|
|
const started = Date.now()
|
|
yield* instance.stop
|
|
expect(Date.now() - started).toBeLessThan(5_000)
|
|
expect(Exit.isFailure(yield* Fiber.join(launch))).toBe(true)
|
|
}),
|
|
).pipe(Effect.provide(NodeServices.layer)),
|
|
)
|
|
|
|
it.live("reads the database target from Effect config", () =>
|
|
Effect.scoped(
|
|
Effect.gen(function* () {
|
|
const artifacts = yield* Effect.promise(() => initializeInstance())
|
|
yield* Effect.addFinalizer(() => Effect.promise(() => rm(artifacts, { recursive: true, force: true })))
|
|
const instance = yield* OpenCodeInstance.make({
|
|
artifacts,
|
|
name: "database-config-test",
|
|
scripted: true,
|
|
command: fakeOpenCode,
|
|
})
|
|
yield* Effect.addFinalizer(() => instance.stop)
|
|
|
|
yield* instance.launchServer
|
|
expect(yield* Effect.promise(() => Bun.file(`${artifacts}/service-db.txt`).text())).toBe("restart.sqlite")
|
|
}),
|
|
).pipe(
|
|
Effect.provide(ConfigProvider.layer(ConfigProvider.fromUnknown({ OPENCODE_DRIVE_DB: "restart.sqlite" }))),
|
|
Effect.provide(NodeServices.layer),
|
|
),
|
|
)
|