import { expect, test } from "bun:test" import type { Page, Route } from "@playwright/test" import { mockOpenCodeServer } from "../../utils/mock-server" test("applies message latency after a list response gate is released", async () => { const events: string[] = [] const gate = Promise.withResolvers() let handler: ((route: Route) => Promise) | undefined const page = { route: (_url: string, callback: (route: Route) => Promise) => { handler = callback return Promise.resolve() }, } as unknown as Page await mockOpenCodeServer(page, { provider: {}, directory: "C:/OpenCode", project: {}, sessions: [{ id: "session" }], messageDelay: 25, beforeMessagesResponse: () => { events.push("before") return gate.promise }, onMessages: (request) => events.push(request.phase), pageMessages: () => { events.push("page") return { items: [] } }, }) const response = handler!({ request: () => ({ url: () => "http://127.0.0.1:4096/session/session/message" }), fulfill: () => { events.push("fulfill") return Promise.resolve() }, } as unknown as Route) expect(events).toEqual(["start", "before"]) const released = performance.now() gate.resolve() await response expect(performance.now() - released).toBeGreaterThanOrEqual(20) expect(events).toEqual(["start", "before", "page", "end", "fulfill"]) })