Skip to content

Commit d35e09f

Browse files
authored
test(workspace): use runtime flags in workspace tests (anomalyco#27612)
1 parent fc34c74 commit d35e09f

6 files changed

Lines changed: 35 additions & 44 deletions

File tree

packages/opencode/test/control-plane/workspace.test.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { FetchHttpClient, HttpServer, HttpServerRequest, HttpServerResponse } fr
1010
import { eq } from "drizzle-orm"
1111
import { AppFileSystem } from "@opencode-ai/core/filesystem"
1212
import * as Log from "@opencode-ai/core/util/log"
13-
import { Flag } from "@opencode-ai/core/flag/flag"
1413
import { GlobalBus, type GlobalEvent } from "@/bus/global"
1514
import { Database } from "@/storage/db"
1615
import { ProjectID } from "@/project/schema"
@@ -42,7 +41,6 @@ import { RuntimeFlags } from "@/effect/runtime-flags"
4241

4342
void Log.init({ print: false })
4443

45-
const originalWorkspacesFlag = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
4644
const originalEnv = {
4745
OPENCODE_AUTH_CONTENT: process.env.OPENCODE_AUTH_CONTENT,
4846
OPENCODE_EXPERIMENTAL_WORKSPACES: process.env.OPENCODE_EXPERIMENTAL_WORKSPACES,
@@ -113,15 +111,13 @@ function restoreEnv() {
113111

114112
beforeEach(() => {
115113
Database.close()
116-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true
117114
restoreEnv()
118115
process.env.OPENCODE_EXPERIMENTAL_WORKSPACES = "true"
119116
})
120117

121118
afterEach(async () => {
122119
mock.restore()
123120
await disposeAllInstances()
124-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspacesFlag
125121
restoreEnv()
126122
await resetDatabase()
127123
})
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { FetchHttpClient } from "effect/unstable/http"
2+
import { Layer } from "effect"
3+
import { AppFileSystem } from "@opencode-ai/core/filesystem"
4+
import { Auth } from "../../src/auth"
5+
import { Workspace } from "../../src/control-plane/workspace"
6+
import { RuntimeFlags } from "../../src/effect/runtime-flags"
7+
import { InstanceBootstrap } from "../../src/project/bootstrap"
8+
import { InstanceStore } from "../../src/project/instance-store"
9+
import { Project } from "../../src/project/project"
10+
import { Vcs } from "../../src/project/vcs"
11+
import { Session } from "../../src/session/session"
12+
import { SessionPrompt } from "../../src/session/prompt"
13+
import { SyncEvent } from "../../src/sync"
14+
15+
export const workspaceLayerWithRuntimeFlags = (overrides: Partial<RuntimeFlags.Info>) =>
16+
Workspace.layer.pipe(
17+
Layer.provide(Auth.defaultLayer),
18+
Layer.provide(Session.defaultLayer),
19+
Layer.provide(SyncEvent.defaultLayer),
20+
Layer.provide(SessionPrompt.defaultLayer),
21+
Layer.provide(Project.defaultLayer),
22+
Layer.provide(Vcs.defaultLayer),
23+
Layer.provide(FetchHttpClient.layer),
24+
Layer.provide(AppFileSystem.defaultLayer),
25+
Layer.provide(RuntimeFlags.layer(overrides)),
26+
Layer.provide(InstanceStore.defaultLayer),
27+
Layer.provide(InstanceBootstrap.defaultLayer),
28+
)

packages/opencode/test/plugin/workspace-adapter.test.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { afterAll, afterEach, describe, expect } from "bun:test"
1+
import { afterEach, describe, expect } from "bun:test"
22
import { Effect, Layer, Option } from "effect"
33
import { FetchHttpClient } from "effect/unstable/http"
44
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
55
import { AppFileSystem } from "@opencode-ai/core/filesystem"
66
import { EffectFlock } from "@opencode-ai/core/util/effect-flock"
7-
import { Flag } from "@opencode-ai/core/flag/flag"
87
import path from "path"
98
import { pathToFileURL } from "url"
109
import { Account } from "../../src/account/account"
@@ -62,18 +61,10 @@ const workspaceLayer = Workspace.layer.pipe(
6261
)
6362
const it = testEffect(Layer.mergeAll(pluginLayer, workspaceLayer, CrossSpawnSpawner.defaultLayer))
6463

65-
const experimental = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
66-
67-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true
68-
6964
afterEach(async () => {
7065
await disposeAllInstances()
7166
})
7267

73-
afterAll(() => {
74-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = experimental
75-
})
76-
7768
describe("plugin.workspace", () => {
7869
it.live("plugin can install a workspace adapter", () =>
7970
provideTmpdirInstance((dir) =>

packages/opencode/test/server/httpapi-instance-context.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { NodeHttpServer, NodeServices } from "@effect/platform-node"
2-
import { Flag } from "@opencode-ai/core/flag/flag"
32
import { describe, expect } from "bun:test"
43
import { Effect, Fiber, Layer } from "effect"
54
import { HttpClient, HttpClientRequest, HttpRouter, HttpServerResponse } from "effect/unstable/http"
@@ -11,39 +10,32 @@ import { WorkspaceID } from "../../src/control-plane/schema"
1110
import type { WorkspaceAdapter } from "../../src/control-plane/types"
1211
import { Workspace } from "../../src/control-plane/workspace"
1312
import { InstanceRef, WorkspaceRef } from "../../src/effect/instance-ref"
14-
import { InstanceBootstrap } from "../../src/project/bootstrap"
1513
import { Instance } from "../../src/project/instance"
1614
import { InstanceLayer } from "../../src/project/instance-layer"
17-
import { InstanceStore } from "../../src/project/instance-store"
1815
import { Project } from "../../src/project/project"
1916
import { disposeMiddleware, markInstanceForDisposal } from "../../src/server/routes/instance/httpapi/lifecycle"
2017
import { instanceRouterMiddleware } from "../../src/server/routes/instance/httpapi/middleware/instance-context"
2118
import { workspaceRouterMiddleware } from "../../src/server/routes/instance/httpapi/middleware/workspace-routing"
2219
import { resetDatabase } from "../fixture/db"
2320
import { disposeAllInstances, tmpdirScoped } from "../fixture/fixture"
2421
import { withFixedWorkspaceID } from "../fixture/flag"
22+
import { workspaceLayerWithRuntimeFlags } from "../fixture/workspace"
2523
import { waitGlobalBusEvent } from "./global-bus"
2624
import { testEffect } from "../lib/effect"
2725

2826
const testStateLayer = Layer.effectDiscard(
2927
Effect.gen(function* () {
30-
const originalWorkspaces = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
3128
yield* Effect.promise(() => resetDatabase())
32-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true
3329
yield* Effect.addFinalizer(() =>
3430
Effect.promise(async () => {
35-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspaces
3631
await disposeAllInstances()
3732
await resetDatabase()
3833
}),
3934
)
4035
}),
4136
)
4237

43-
const workspaceLayer = Workspace.defaultLayer.pipe(
44-
Layer.provide(InstanceStore.defaultLayer),
45-
Layer.provide(InstanceBootstrap.defaultLayer),
46-
)
38+
const workspaceLayer = workspaceLayerWithRuntimeFlags({ experimentalWorkspaces: true })
4739

4840
const it = testEffect(
4941
Layer.mergeAll(

packages/opencode/test/server/httpapi-promptasync-context.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
// Effect.provideService calls there are required, not defensive duplication.
99

1010
import { NodeHttpServer, NodeServices } from "@effect/platform-node"
11-
import { Flag } from "@opencode-ai/core/flag/flag"
1211
import { describe, expect } from "bun:test"
1312
import { Deferred, Effect, Layer, Scope } from "effect"
1413
import * as Stream from "effect/Stream"
@@ -19,35 +18,28 @@ import { registerAdapter } from "../../src/control-plane/adapters"
1918
import type { WorkspaceAdapter } from "../../src/control-plane/types"
2019
import { Workspace } from "../../src/control-plane/workspace"
2120
import { InstanceRef, WorkspaceRef } from "../../src/effect/instance-ref"
22-
import { InstanceBootstrap } from "../../src/project/bootstrap"
2321
import { InstanceLayer } from "../../src/project/instance-layer"
24-
import { InstanceStore } from "../../src/project/instance-store"
2522
import { Project } from "../../src/project/project"
2623
import { instanceRouterMiddleware } from "../../src/server/routes/instance/httpapi/middleware/instance-context"
2724
import { workspaceRouterMiddleware } from "../../src/server/routes/instance/httpapi/middleware/workspace-routing"
2825
import { resetDatabase } from "../fixture/db"
2926
import { disposeAllInstances, tmpdirScoped } from "../fixture/fixture"
27+
import { workspaceLayerWithRuntimeFlags } from "../fixture/workspace"
3028
import { testEffect } from "../lib/effect"
3129

3230
const testStateLayer = Layer.effectDiscard(
3331
Effect.gen(function* () {
34-
const originalWorkspaces = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
3532
yield* Effect.promise(() => resetDatabase())
36-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true
3733
yield* Effect.addFinalizer(() =>
3834
Effect.promise(async () => {
39-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspaces
4035
await disposeAllInstances()
4136
await resetDatabase()
4237
}),
4338
)
4439
}),
4540
)
4641

47-
const workspaceLayer = Workspace.defaultLayer.pipe(
48-
Layer.provide(InstanceStore.defaultLayer),
49-
Layer.provide(InstanceBootstrap.defaultLayer),
50-
)
42+
const workspaceLayer = workspaceLayerWithRuntimeFlags({ experimentalWorkspaces: true })
5143

5244
const it = testEffect(
5345
Layer.mergeAll(

packages/opencode/test/server/httpapi-workspace-routing.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { NodeHttpServer, NodeServices } from "@effect/platform-node"
2-
import { Flag } from "@opencode-ai/core/flag/flag"
32
import { describe, expect } from "bun:test"
43
import { Context, Effect, Layer, Queue, Ref } from "effect"
54
import {
@@ -20,8 +19,6 @@ import { WorkspaceID } from "../../src/control-plane/schema"
2019
import type { WorkspaceAdapter } from "../../src/control-plane/types"
2120
import { Workspace } from "../../src/control-plane/workspace"
2221
import { WorkspaceTable } from "../../src/control-plane/workspace.sql"
23-
import { InstanceBootstrap } from "../../src/project/bootstrap"
24-
import { InstanceStore } from "../../src/project/instance-store"
2522
import { Project } from "../../src/project/project"
2623
import { WorkspacePaths } from "../../src/server/routes/instance/httpapi/groups/workspace"
2724
import {
@@ -31,27 +28,22 @@ import {
3128
import { HEADER as FenceHeader } from "../../src/server/shared/fence"
3229
import { Database } from "../../src/storage/db"
3330
import { resetDatabase } from "../fixture/db"
31+
import { workspaceLayerWithRuntimeFlags } from "../fixture/workspace"
3432
import { tmpdirScoped } from "../fixture/fixture"
3533
import { testEffect } from "../lib/effect"
3634

3735
const testStateLayer = Layer.effectDiscard(
3836
Effect.gen(function* () {
39-
const originalWorkspaces = Flag.OPENCODE_EXPERIMENTAL_WORKSPACES
4037
yield* Effect.promise(() => resetDatabase())
41-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = true
4238
yield* Effect.addFinalizer(() =>
4339
Effect.promise(async () => {
44-
Flag.OPENCODE_EXPERIMENTAL_WORKSPACES = originalWorkspaces
4540
await resetDatabase()
4641
}),
4742
)
4843
}),
4944
)
5045

51-
const workspaceLayer = Workspace.defaultLayer.pipe(
52-
Layer.provide(InstanceStore.defaultLayer),
53-
Layer.provide(InstanceBootstrap.defaultLayer),
54-
)
46+
const workspaceLayer = workspaceLayerWithRuntimeFlags({ experimentalWorkspaces: true })
5547

5648
const it = testEffect(
5749
Layer.mergeAll(

0 commit comments

Comments
 (0)