fixtures.ts 1.4 KB

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