diff options
| author | Kit Langton <[email protected]> | 2026-04-30 12:52:29 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-30 12:52:29 -0400 |
| commit | 92e80b466036f4e1ceedd93296997eeebbdd0592 (patch) | |
| tree | 8bc4c861c8cfca2336d765ad0606ffa4800cd010 | |
| parent | ce63ca4d7a3552a5e35f98e698967c0d499b2c1d (diff) | |
| download | opencode-92e80b466036f4e1ceedd93296997eeebbdd0592.tar.gz opencode-92e80b466036f4e1ceedd93296997eeebbdd0592.zip | |
test: use Effect test helper for app runtime logger (#25049)
| -rw-r--r-- | packages/opencode/test/effect/app-runtime-logger.test.ts | 96 |
1 files changed, 51 insertions, 45 deletions
diff --git a/packages/opencode/test/effect/app-runtime-logger.test.ts b/packages/opencode/test/effect/app-runtime-logger.test.ts index dc88c60bf..fe9516ef9 100644 --- a/packages/opencode/test/effect/app-runtime-logger.test.ts +++ b/packages/opencode/test/effect/app-runtime-logger.test.ts @@ -1,12 +1,15 @@ -import { expect, test } from "bun:test" +import { expect } from "bun:test" import { Context, Effect, Layer, Logger } from "effect" +import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { AppRuntime } from "../../src/effect/app-runtime" import { EffectBridge } from "@/effect/bridge" import { InstanceRef } from "../../src/effect/instance-ref" import * as EffectLogger from "@opencode-ai/core/effect/logger" import { makeRuntime } from "../../src/effect/run-service" -import { Instance } from "../../src/project/instance" -import { tmpdir } from "../fixture/fixture" +import { provideInstance, tmpdirScoped } from "../fixture/fixture" +import { testEffect } from "../lib/effect" + +const it = testEffect(CrossSpawnSpawner.defaultLayer) function check(loggers: ReadonlySet<Logger.Logger<unknown, any>>) { return { @@ -17,56 +20,58 @@ function check(loggers: ReadonlySet<Logger.Logger<unknown, any>>) { } } -test("makeRuntime installs EffectLogger through Observability.layer", async () => { - class Dummy extends Context.Service<Dummy, { readonly current: () => Effect.Effect<ReturnType<typeof check>> }>()( - "@test/Dummy", - ) {} - - const layer = Layer.effect( - Dummy, - Effect.gen(function* () { - return Dummy.of({ - current: () => Effect.map(Effect.service(Logger.CurrentLoggers), check), - }) - }), - ) +it.live("makeRuntime installs EffectLogger through Observability.layer", () => + Effect.gen(function* () { + class Dummy extends Context.Service<Dummy, { readonly current: () => Effect.Effect<ReturnType<typeof check>> }>()( + "@test/Dummy", + ) {} - const rt = makeRuntime(Dummy, layer) - const current = await rt.runPromise((svc) => svc.current()) + const layer = Layer.effect( + Dummy, + Effect.gen(function* () { + return Dummy.of({ + current: () => Effect.map(Effect.service(Logger.CurrentLoggers), check), + }) + }), + ) - expect(current.effectLogger).toBe(true) - expect(current.defaultLogger).toBe(false) -}) + const current = yield* Effect.promise(() => makeRuntime(Dummy, layer).runPromise((svc) => svc.current())) -test("AppRuntime also installs EffectLogger through Observability.layer", async () => { - const current = await AppRuntime.runPromise(Effect.map(Effect.service(Logger.CurrentLoggers), check)) + expect(current.effectLogger).toBe(true) + expect(current.defaultLogger).toBe(false) + }), +) - expect(current.effectLogger).toBe(true) - expect(current.defaultLogger).toBe(false) -}) +it.live("AppRuntime also installs EffectLogger through Observability.layer", () => + Effect.gen(function* () { + const current = yield* Effect.promise(() => + AppRuntime.runPromise(Effect.map(Effect.service(Logger.CurrentLoggers), check)), + ) -test("AppRuntime attaches InstanceRef from ALS", async () => { - await using tmp = await tmpdir({ git: true }) + expect(current.effectLogger).toBe(true) + expect(current.defaultLogger).toBe(false) + }), +) - const dir = await Instance.provide({ - directory: tmp.path, - fn: () => +it.live("AppRuntime attaches InstanceRef from ALS", () => + Effect.gen(function* () { + const dir = yield* tmpdirScoped({ git: true }) + const current = yield* Effect.promise(() => AppRuntime.runPromise( Effect.gen(function* () { return (yield* InstanceRef)?.directory }), ), - }) - - expect(dir).toBe(tmp.path) -}) + ).pipe(provideInstance(dir)) -test("EffectBridge preserves logger and instance context across async boundaries", async () => { - await using tmp = await tmpdir({ git: true }) + expect(current).toBe(dir) + }), +) - const result = await Instance.provide({ - directory: tmp.path, - fn: () => +it.live("EffectBridge preserves logger and instance context across async boundaries", () => + Effect.gen(function* () { + const dir = yield* tmpdirScoped({ git: true }) + const result = yield* Effect.promise(() => AppRuntime.runPromise( Effect.gen(function* () { const bridge = yield* EffectBridge.make() @@ -84,9 +89,10 @@ test("EffectBridge preserves logger and instance context across async boundaries ) }), ), - }) + ).pipe(provideInstance(dir)) - expect(result.directory).toBe(tmp.path) - expect(result.effectLogger).toBe(true) - expect(result.defaultLogger).toBe(false) -}) + expect(result.directory).toBe(dir) + expect(result.effectLogger).toBe(true) + expect(result.defaultLogger).toBe(false) + }), +) |
