mirror of
https://github.com/anomalyco/opencode.git
synced 2026-10-24 17:00:01 +00:00
50 lines
2.2 KiB
TypeScript
50 lines
2.2 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { Effect, Logger } from "effect"
|
|
import { AppNodeBuilder } from "@opencode/core/effect/app-node-builder"
|
|
import { LayerNode } from "@opencode/util/effect/layer-node"
|
|
import { Database } from "@opencode/core/database/database"
|
|
import { Bus } from "@opencode/core/bus"
|
|
import { EventLogger } from "@opencode/core/event-logger"
|
|
import { Agent } from "@opencode/schema/agent"
|
|
import { Model } from "@opencode/schema/model"
|
|
import { Provider } from "@opencode/schema/provider"
|
|
import { Command } from "@opencode/schema/command"
|
|
import { Config } from "@opencode/schema/config"
|
|
import { McpEvent } from "@opencode/schema/mcp-event"
|
|
|
|
const UnlistedUpdated = Bus.ephemeral({ type: "test.updated", schema: {} })
|
|
|
|
describe("EventLogger", () => {
|
|
test("logs explicitly listed updated events", async () => {
|
|
const output = new Array<ReturnType<typeof Logger.formatStructured.log>>()
|
|
const logger = Logger.map(Logger.formatStructured, (entry) => {
|
|
output.push(entry)
|
|
})
|
|
|
|
await Effect.gen(function* () {
|
|
const bus = yield* Bus.Service
|
|
yield* bus.publish(Agent.Event.Updated, {})
|
|
yield* bus.publish(Provider.Event.Updated, {})
|
|
yield* bus.publish(Model.Event.Updated, {})
|
|
yield* bus.publish(Command.Event.Updated, {})
|
|
yield* bus.publish(Config.Event.Updated, {})
|
|
yield* bus.publish(McpEvent.StatusChanged, { server: "example" })
|
|
yield* bus.publish(UnlistedUpdated, {})
|
|
}).pipe(
|
|
Effect.provide(AppNodeBuilder.build(LayerNode.group([Database.node, Bus.node, EventLogger.node]))),
|
|
Effect.provide(Logger.layer([logger])),
|
|
Effect.scoped,
|
|
Effect.runPromise,
|
|
)
|
|
|
|
expect(
|
|
output.flatMap((entry) => (Array.isArray(entry.message) && entry.message[0] === "event" ? [entry.message] : [])),
|
|
).toEqual([
|
|
["event", { event: expect.objectContaining({ type: "agent.updated" }) }],
|
|
["event", { event: expect.objectContaining({ type: "provider.updated" }) }],
|
|
["event", { event: expect.objectContaining({ type: "model.updated" }) }],
|
|
["event", { event: expect.objectContaining({ type: "command.updated" }) }],
|
|
["event", { event: expect.objectContaining({ type: "config.updated" }) }],
|
|
])
|
|
})
|
|
})
|