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

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