From bcc69f0afbe4674abb7dc68640a091a78bf30cc0 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Mon, 18 May 2026 22:02:59 -0400 Subject: [PATCH] test: migrate managed config fixtures --- packages/opencode/test/config/config.test.ts | 110 +++++++------------ perf/test-suite.md | 1 + 2 files changed, 41 insertions(+), 70 deletions(-) diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index eb699c3511..0795eebb7e 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -104,6 +104,9 @@ async function writeManagedSettings(settings: object, filename = "opencode.json" await Filesystem.write(path.join(managedConfigDir, filename), JSON.stringify(settings)) } +const writeManagedSettingsEffect = (settings: object, filename?: string) => + Effect.promise(() => writeManagedSettings(settings, filename)) + async function writeConfig(dir: string, config: object, name = "opencode.json") { await Filesystem.write(path.join(dir, name), JSON.stringify(config)) } @@ -1302,80 +1305,47 @@ it.instance("migrates legacy write tool to edit permission", () => // Managed settings tests // Note: preload.ts sets OPENCODE_TEST_MANAGED_CONFIG which Global.Path.managedConfig uses -test("managed settings override user settings", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - model: "user/model", - share: "auto", - username: "testuser", - }) - }, - }) +it.instance( + "managed settings override user settings", + Effect.gen(function* () { + yield* writeManagedSettingsEffect({ + $schema: "https://opencode.ai/config.json", + model: "managed/model", + share: "disabled", + }) - await writeManagedSettings({ - $schema: "https://opencode.ai/config.json", - model: "managed/model", - share: "disabled", - }) + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.model).toBe("managed/model") + expect(config.share).toBe("disabled") + expect(config.username).toBe("testuser") + }), + { config: { model: "user/model", share: "auto", username: "testuser" } }, +) - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.model).toBe("managed/model") - expect(config.share).toBe("disabled") - expect(config.username).toBe("testuser") - }, - }) -}) +it.instance( + "managed settings override project settings", + Effect.gen(function* () { + yield* writeManagedSettingsEffect({ + $schema: "https://opencode.ai/config.json", + autoupdate: false, + disabled_providers: ["openai"], + }) -test("managed settings override project settings", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - autoupdate: true, - disabled_providers: [], - }) - }, - }) + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.autoupdate).toBe(false) + expect(config.disabled_providers).toEqual(["openai"]) + }), + { config: { autoupdate: true, disabled_providers: [] } }, +) - await writeManagedSettings({ - $schema: "https://opencode.ai/config.json", - autoupdate: false, - disabled_providers: ["openai"], - }) - - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.autoupdate).toBe(false) - expect(config.disabled_providers).toEqual(["openai"]) - }, - }) -}) - -test("missing managed settings file is not an error", async () => { - await using tmp = await tmpdir({ - init: async (dir) => { - await writeConfig(dir, { - $schema: "https://opencode.ai/config.json", - model: "user/model", - }) - }, - }) - - await withTestInstance({ - directory: tmp.path, - fn: async (ctx) => { - const config = await load(ctx) - expect(config.model).toBe("user/model") - }, - }) -}) +it.instance( + "missing managed settings file is not an error", + Effect.gen(function* () { + const config = yield* Config.Service.use((svc) => svc.get()) + expect(config.model).toBe("user/model") + }), + { config: { model: "user/model" } }, +) it.instance("migrates legacy edit tool to edit permission", () => Effect.gen(function* () { diff --git a/perf/test-suite.md b/perf/test-suite.md index d0b3d13e96..a863a15e37 100644 --- a/perf/test-suite.md +++ b/perf/test-suite.md @@ -78,6 +78,7 @@ Repeated setup work, long sleeps/timeouts, serial integration tests, filesystem/ | `.opencode` agent and command file-loading cases can use Effect-aware instance fixtures | Migrated singular/plural agent and command markdown fixture cases to `it.instance` | 7.21s | 1.87s | keep | Parent baseline was noisy (7.42, 7.21, 2.83); after runs were stable at 1.87, 1.98, 1.83. Keep as cleanup with no broad claim. | | Legacy tools and permission-order config cases can use Effect-aware instance fixtures | Migrated legacy `tools` migration and permission order cases to `it.instance` | 1.87s | 1.87s | keep | Neutral timing; removes more manual temp-instance plumbing from legacy config migration coverage. | | Remaining simple config load cases can use Effect-aware instance fixtures | Migrated default config load and legacy TUI-key cases to `it.instance` | 7.78s | 6.39s | keep | Single baseline before edit; after median from three sequential reruns (5.76, 6.39, 6.53). Keep as cleanup with cautious timing. | +| Managed settings config cases can use Effect-aware instance fixtures | Migrated managed override and missing-managed-file cases to `it.instance` | 2.40s | 1.76s | keep | Single baseline before edit; after median from three sequential reruns (1.75, 1.76, 1.80). | ## Profiling Results