mock-server.test.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { expect, test } from "bun:test"
  2. import type { Page, Route } from "@playwright/test"
  3. import { mockOpenCodeServer } from "../../utils/mock-server"
  4. test("applies message latency after a list response gate is released", async () => {
  5. const events: string[] = []
  6. const gate = Promise.withResolvers<void>()
  7. let handler: ((route: Route) => Promise<void>) | undefined
  8. const page = {
  9. route: (_url: string, callback: (route: Route) => Promise<void>) => {
  10. handler = callback
  11. return Promise.resolve()
  12. },
  13. } as unknown as Page
  14. await mockOpenCodeServer(page, {
  15. provider: {},
  16. directory: "C:/OpenCode",
  17. project: {},
  18. sessions: [{ id: "session" }],
  19. messageDelay: 25,
  20. beforeMessagesResponse: () => {
  21. events.push("before")
  22. return gate.promise
  23. },
  24. onMessages: (request) => events.push(request.phase),
  25. pageMessages: () => {
  26. events.push("page")
  27. return { items: [] }
  28. },
  29. })
  30. const response = handler!({
  31. request: () => ({ url: () => "http://127.0.0.1:4096/session/session/message" }),
  32. fulfill: () => {
  33. events.push("fulfill")
  34. return Promise.resolve()
  35. },
  36. } as unknown as Route)
  37. expect(events).toEqual(["start", "before"])
  38. const released = performance.now()
  39. gate.resolve()
  40. await response
  41. expect(performance.now() - released).toBeGreaterThanOrEqual(20)
  42. expect(events).toEqual(["start", "before", "page", "end", "fulfill"])
  43. })