mirror of
https://github.com/anomalyco/opencode.git
synced 2026-08-30 05:12:23 +00:00
Separate ID-bound Session policy from host routing. Bind Inbox and Location preparation dependencies at construction, preserve admission and execution semantics, and cover the extracted ownership contracts directly.
44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
import { describe, expect } from "bun:test"
|
|
import { Effect, Layer } from "effect"
|
|
import { Database } from "@opencode-ai/core/database/database"
|
|
import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
|
|
import { LayerNode } from "@opencode-ai/util/effect/layer-node"
|
|
import { Bus } from "@opencode-ai/core/bus"
|
|
import { Location } from "@opencode-ai/core/location"
|
|
import { Project } from "@opencode-ai/core/project"
|
|
import { AbsolutePath } from "@opencode-ai/core/schema"
|
|
import { Session } from "@opencode-ai/core/session"
|
|
import { SessionProjector } from "@opencode-ai/core/session/projector"
|
|
import { SessionExecution } from "@opencode-ai/core/session/execution"
|
|
import { SessionStore } from "@opencode-ai/core/session/store"
|
|
import { testEffect } from "./lib/effect"
|
|
import { globalProjectNode } from "./lib/project"
|
|
|
|
const location = Location.Ref.make({ directory: AbsolutePath.make("/project") })
|
|
const awaited: Session.ID[] = []
|
|
const execution = Layer.mock(SessionExecution.Service, {
|
|
awaitIdle: (sessionID) => Effect.sync(() => awaited.push(sessionID)),
|
|
})
|
|
const it = testEffect(
|
|
AppNodeBuilder.build(
|
|
LayerNode.group([Database.node, Bus.node, SessionProjector.node, SessionStore.node, Session.node]),
|
|
[
|
|
[Project.node, globalProjectNode],
|
|
[SessionExecution.node, execution],
|
|
],
|
|
),
|
|
)
|
|
|
|
describe("Session.wait", () => {
|
|
it.effect("delegates to SessionExecution.awaitIdle", () =>
|
|
Effect.gen(function* () {
|
|
awaited.length = 0
|
|
const sessions = yield* Session.Service
|
|
const session = yield* sessions.create({ location })
|
|
|
|
yield* sessions.wait(session.id)
|
|
|
|
expect(awaited).toEqual([session.id])
|
|
}),
|
|
)
|
|
})
|