Skip to content

Commit aae0e89

Browse files
authored
refactor(opencode): use layer nodes in plugin tests (anomalyco#34495)
1 parent 93a7b4a commit aae0e89

2 files changed

Lines changed: 29 additions & 36 deletions

File tree

packages/opencode/test/plugin/auth-override.test.ts

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,39 @@ import { describe, expect, test } from "bun:test"
22
import path from "path"
33
import { pathToFileURL } from "url"
44
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
5-
import { Effect, Layer } from "effect"
5+
import { Effect } from "effect"
66
import { FSUtil } from "@opencode-ai/core/fs-util"
77
import { provideInstance, TestInstance, tmpdirScoped } from "../fixture/fixture"
88
import { ProviderAuth } from "@/provider/auth"
99

10-
import { Plugin } from "@/plugin"
1110
import { RuntimeFlags } from "@/effect/runtime-flags"
12-
import { Auth } from "@/auth"
13-
import { EventV2Bridge } from "@/event-v2-bridge"
1411
import { TestConfig } from "../fixture/config"
1512
import { testEffect } from "../lib/effect"
1613
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
1714
import { ProviderV2 } from "@opencode-ai/core/provider"
15+
import { Config } from "@/config/config"
1816

1917
const it = testEffect(LayerNode.compile(LayerNode.group([CrossSpawnSpawner.node, FSUtil.node])))
2018

21-
function layer(directory: string, plugins: string[]) {
22-
return ProviderAuth.layer.pipe(
23-
Layer.provide(Auth.defaultLayer),
24-
Layer.provide(
25-
Plugin.layer.pipe(
26-
Layer.provide(EventV2Bridge.defaultLayer),
27-
Layer.provide(RuntimeFlags.layer()),
28-
Layer.provide(
29-
TestConfig.layer({
30-
get: () =>
31-
Effect.succeed({
32-
plugin: plugins,
33-
plugin_origins: plugins.map((plugin) => ({
34-
spec: plugin,
35-
source: path.join(directory, "opencode.json"),
36-
scope: "local" as const,
37-
})),
38-
}),
39-
directories: () => Effect.succeed([directory]),
19+
function providerAuthLayer(directory: string, plugins: string[]) {
20+
return LayerNode.compile(ProviderAuth.node, [
21+
[
22+
Config.node,
23+
TestConfig.layer({
24+
get: () =>
25+
Effect.succeed({
26+
plugin: plugins,
27+
plugin_origins: plugins.map((plugin) => ({
28+
spec: plugin,
29+
source: path.join(directory, "opencode.json"),
30+
scope: "local" as const,
31+
})),
4032
}),
41-
),
42-
),
43-
),
44-
)
33+
directories: () => Effect.succeed([directory]),
34+
}),
35+
],
36+
[RuntimeFlags.node, RuntimeFlags.layer()],
37+
])
4538
}
4639

4740
describe("plugin.auth-override", () => {
@@ -74,10 +67,10 @@ describe("plugin.auth-override", () => {
7467

7568
const plain = yield* tmpdirScoped({ git: true })
7669
const plugin = pathToFileURL(path.join(pluginDir, "custom-copilot-auth.ts")).href
77-
const methods = yield* ProviderAuth.use.methods().pipe(Effect.provide(layer(tmp.directory, [plugin])))
70+
const methods = yield* ProviderAuth.use.methods().pipe(Effect.provide(providerAuthLayer(tmp.directory, [plugin])))
7871
const plainMethods = yield* ProviderAuth.use
7972
.methods()
80-
.pipe(Effect.provide(layer(plain, [])), provideInstance(plain))
73+
.pipe(Effect.provide(providerAuthLayer(plain, [])), provideInstance(plain))
8174

8275
const copilot = methods[ProviderV2.ID.make("github-copilot")]
8376
expect(copilot).toBeDefined()

packages/opencode/test/plugin/loader-shared.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import path from "path"
66
import { pathToFileURL } from "url"
77
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
88
import { FSUtil } from "@opencode-ai/core/fs-util"
9+
import { Config } from "@/config/config"
910
import { disposeAllInstances, provideInstance, testInstanceStoreLayer, tmpdirScoped } from "../fixture/fixture"
1011
import { testEffect } from "../lib/effect"
1112

1213
const { Plugin } = await import("../../src/plugin/index")
1314
const { PluginLoader } = await import("../../src/plugin/loader")
1415
const { readPackageThemes } = await import("../../src/plugin/shared")
15-
const { EventV2Bridge } = await import("../../src/event-v2-bridge")
1616
const { Npm } = await import("@opencode-ai/core/npm")
1717
const { TestConfig } = await import("../fixture/config")
1818
const { RuntimeFlags } = await import("../../src/effect/runtime-flags")
@@ -48,10 +48,9 @@ function load(dir: string, flags?: Parameters<typeof RuntimeFlags.layer>[0]) {
4848
yield* plugin.list()
4949
}).pipe(
5050
Effect.provide(
51-
Plugin.layer.pipe(
52-
Layer.provide(EventV2Bridge.defaultLayer),
53-
Layer.provide(RuntimeFlags.layer({ disableDefaultPlugins: true, ...flags })),
54-
Layer.provide(
51+
LayerNode.compile(Plugin.node, [
52+
[
53+
Config.node,
5554
TestConfig.layer({
5655
get: () =>
5756
Effect.succeed({
@@ -60,8 +59,9 @@ function load(dir: string, flags?: Parameters<typeof RuntimeFlags.layer>[0]) {
6059
}),
6160
directories: () => Effect.succeed([dir]),
6261
}),
63-
),
64-
),
62+
],
63+
[RuntimeFlags.node, RuntimeFlags.layer({ disableDefaultPlugins: true, ...flags })],
64+
]),
6565
),
6666
provideInstance(dir),
6767
)

0 commit comments

Comments
 (0)