fixtures.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { test as base, expect } from "@playwright/test"
  2. import { seedProjects } from "./actions"
  3. import { promptSelector } from "./selectors"
  4. import { createSdk, dirSlug, getWorktree, sessionPath } from "./utils"
  5. type TestFixtures = {
  6. sdk: ReturnType<typeof createSdk>
  7. gotoSession: (sessionID?: string) => Promise<void>
  8. }
  9. type WorkerFixtures = {
  10. directory: string
  11. slug: string
  12. }
  13. export const test = base.extend<TestFixtures, WorkerFixtures>({
  14. directory: [
  15. async ({}, use) => {
  16. const directory = await getWorktree()
  17. await use(directory)
  18. },
  19. { scope: "worker" },
  20. ],
  21. slug: [
  22. async ({ directory }, use) => {
  23. await use(dirSlug(directory))
  24. },
  25. { scope: "worker" },
  26. ],
  27. sdk: async ({ directory }, use) => {
  28. await use(createSdk(directory))
  29. },
  30. gotoSession: async ({ page, directory }, use) => {
  31. await seedProjects(page, { directory })
  32. await page.addInitScript(() => {
  33. localStorage.setItem(
  34. "opencode.global.dat:model",
  35. JSON.stringify({
  36. recent: [{ providerID: "opencode", modelID: "big-pickle" }],
  37. user: [],
  38. variant: {},
  39. }),
  40. )
  41. })
  42. const gotoSession = async (sessionID?: string) => {
  43. await page.goto(sessionPath(directory, sessionID))
  44. await expect(page.locator(promptSelector)).toBeVisible()
  45. }
  46. await use(gotoSession)
  47. },
  48. })
  49. export { expect }