session-list-path-loading.spec.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { expect, test } from "@playwright/test"
  2. import { fixture, pageMessages } from "../smoke/session-timeline.fixture"
  3. import { mockOpenCodeServer } from "../utils/mock-server"
  4. test("shows loaded sessions before the directory path request resolves", async ({ page }) => {
  5. await mockOpenCodeServer(page, {
  6. sessions: fixture.sessions,
  7. provider: fixture.provider,
  8. directory: fixture.directory,
  9. project: fixture.project,
  10. pageMessages,
  11. })
  12. let releasePath!: () => void
  13. const pathBlocked = new Promise<void>((resolve) => {
  14. releasePath = resolve
  15. })
  16. await page.route("**/path?*", async (route) => {
  17. if (!new URL(route.request().url()).searchParams.has("directory")) return route.fallback()
  18. await pathBlocked
  19. return route.fallback()
  20. })
  21. await page.addInitScript((directory) => {
  22. localStorage.setItem(
  23. "opencode.global.dat:server",
  24. JSON.stringify({
  25. projects: { local: [{ worktree: directory, expanded: true }] },
  26. lastProject: { local: directory },
  27. }),
  28. )
  29. }, fixture.directory)
  30. await page.goto("/")
  31. try {
  32. await expect(page.getByText(fixture.expected.sourceTitle).first()).toBeVisible({ timeout: 5_000 })
  33. } finally {
  34. releasePath()
  35. }
  36. })