From ee5cf45ef9c3bf9a944ea30555c9a79866109697 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Mon, 18 May 2026 19:13:16 -0400 Subject: [PATCH] Migrate simple config tests to instance fixtures (#28210) --- packages/opencode/test/config/config.test.ts | 111 ++++++------------- perf/test-suite.md | 1 + 2 files changed, 34 insertions(+), 78 deletions(-) diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 6684eea1a4..199d075620 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -94,14 +94,6 @@ const listDirs = (ctx: InstanceContext) => Effect.provide(layer), ), ) -const ready = (ctx: InstanceContext) => - Effect.runPromise( - Config.Service.use((svc) => provideCurrentInstance(svc.waitForDependencies(), ctx)).pipe( - Effect.scoped, - Effect.provide(layer), - ), - ) - // Get managed config directory from environment (set in preload.ts) const managedConfigDir = process.env.OPENCODE_TEST_MANAGED_CONFIG_DIR! @@ -210,43 +202,24 @@ test("does not create global config when OPENCODE_CONFIG_DIR is set", async () = } }) -test("loads JSON config file", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - model: "test/model", - username: "testuser", - }) - }, - }) - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.model).toBe("test/model") - expect(config.username).toBe("testuser") - }, - }) -}) +it.instance( + "loads JSON config file", + Effect.gen(function* () { + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.model).toBe("test/model") + expect(config.username).toBe("testuser") + }), + { config: { model: "test/model", username: "testuser" } }, +) -test("loads shell config field", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - shell: "bash", - }) - }, - }) - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.shell).toBe("bash") - }, - }) -}) +it.instance( + "loads shell config field", + Effect.gen(function* () { + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.shell).toBe("bash") + }), + { config: { shell: "bash" } }, +) test("updates config and preserves empty shell sentinel", async () => { await using tmp = await tmpdir({ @@ -330,41 +303,23 @@ test("updates global config and omits empty shell key in jsonc", async () => { } }) -test("loads formatter boolean config", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - formatter: true, - }) - }, - }) - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.formatter).toBe(true) - }, - }) -}) +it.instance( + "loads formatter boolean config", + Effect.gen(function* () { + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.formatter).toBe(true) + }), + { config: { formatter: true } }, +) -test("loads lsp boolean config", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - lsp: true, - }) - }, - }) - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.lsp).toBe(true) - }, - }) -}) +it.instance( + "loads lsp boolean config", + Effect.gen(function* () { + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.lsp).toBe(true) + }), + { config: { lsp: true } }, +) test("loads project config from Git Bash and MSYS2 paths on Windows", async () => { // Git Bash and MSYS2 both use //... paths on Windows. diff --git a/perf/test-suite.md b/perf/test-suite.md index f6f70dc57b..a377e513c8 100644 --- a/perf/test-suite.md +++ b/perf/test-suite.md @@ -71,6 +71,7 @@ Repeated setup work, long sleeps/timeouts, serial integration tests, filesystem/ | First provider config/env/filtering block can use Effect-aware instance fixtures | Migrated six `tmpdir` + `withTestInstance` cases to `it.instance` | 6.06s | 6.07s | keep | Neutral timing, but removes manual config file writes and instance plumbing; use as the pattern for later provider slices. | | Custom provider/model config cases can use Effect-aware instance fixtures | Migrated three more config-heavy provider cases to `it.instance` | 6.07s | 6.12s | keep | Neutral timing within noise, but continues removing manual config file writes on top of the first provider fixture PR. | | Provider env precedence and model lookup cases can use Effect-aware instance fixtures | Migrated four more provider lookup/default-model cases to `it.instance` | 6.12s | 6.36s | keep | Noisy 5-run median; kept as a small stacked cleanup slice but do not claim speedup from this migration. | +| Simple config load cases can use Effect-aware instance fixtures | Migrated JSON, shell, formatter, and lsp config load cases to `it.instance` | 14.18s | 3.93s | keep | Three-run medians before/after; removes manual `tmpdir` + `withTestInstance` setup from the first simple config block. | ## Profiling Results