Jelajahi Sumber

test(server): lock fixed workspace routing context (#26454)

Kit Langton 4 bulan lalu
induk
melakukan
cc68afb2de

+ 35 - 0
packages/opencode/test/server/httpapi-instance-context.test.ts

@@ -7,6 +7,7 @@ import * as Socket from "effect/unstable/socket/Socket"
 import { mkdir } from "node:fs/promises"
 import { mkdir } from "node:fs/promises"
 import path from "node:path"
 import path from "node:path"
 import { registerAdapter } from "../../src/control-plane/adapters"
 import { registerAdapter } from "../../src/control-plane/adapters"
+import { WorkspaceID } from "../../src/control-plane/schema"
 import type { WorkspaceAdapter } from "../../src/control-plane/types"
 import type { WorkspaceAdapter } from "../../src/control-plane/types"
 import { Workspace } from "../../src/control-plane/workspace"
 import { Workspace } from "../../src/control-plane/workspace"
 import { InstanceRef, WorkspaceRef } from "../../src/effect/instance-ref"
 import { InstanceRef, WorkspaceRef } from "../../src/effect/instance-ref"
@@ -203,6 +204,40 @@ describe("HttpApi instance context middleware", () => {
     }),
     }),
   )
   )
 
 
+  it.live("uses configured workspace id instead of routing to requested workspaces", () =>
+    Effect.gen(function* () {
+      const originalWorkspaceID = Flag.OPENCODE_WORKSPACE_ID
+      const fixedWorkspaceID = WorkspaceID.ascending()
+      Flag.OPENCODE_WORKSPACE_ID = fixedWorkspaceID
+      yield* Effect.addFinalizer(() =>
+        Effect.sync(() => {
+          Flag.OPENCODE_WORKSPACE_ID = originalWorkspaceID
+        }),
+      )
+
+      const dir = yield* tmpdirScoped({ git: true })
+      const project = yield* Project.use.fromDirectory(dir)
+      const workspaceDir = path.join(dir, ".workspace-local")
+      const workspace = yield* createLocalWorkspace({
+        projectID: project.project.id,
+        type: "instance-context-fixed-workspace-ref",
+        directory: workspaceDir,
+      })
+      yield* serveProbe()
+
+      const response = yield* HttpClientRequest.get(`/probe?workspace=${workspace.id}`).pipe(
+        HttpClientRequest.setHeader("x-opencode-directory", dir),
+        HttpClient.execute,
+      )
+
+      expect(response.status).toBe(200)
+      expect(yield* response.json).toMatchObject({
+        directory: dir,
+        workspaceID: fixedWorkspaceID,
+      })
+    }),
+  )
+
   it.live("preserves selected workspace id on instance disposal events", () =>
   it.live("preserves selected workspace id on instance disposal events", () =>
     Effect.gen(function* () {
     Effect.gen(function* () {
       const dir = yield* tmpdirScoped({ git: true })
       const dir = yield* tmpdirScoped({ git: true })