server-default.spec.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { test, expect } from "../fixtures"
  2. import { serverNamePattern, serverUrls } from "../utils"
  3. import { closeDialog, clickMenuItem } from "../actions"
  4. const DEFAULT_SERVER_URL_KEY = "opencode.settings.dat:defaultServerUrl"
  5. test("can set a default server on web", async ({ page, gotoSession }) => {
  6. await page.addInitScript((key: string) => {
  7. try {
  8. localStorage.removeItem(key)
  9. } catch {
  10. return
  11. }
  12. }, DEFAULT_SERVER_URL_KEY)
  13. await gotoSession()
  14. const status = page.getByRole("button", { name: "Status" })
  15. await expect(status).toBeVisible()
  16. const popover = page.locator('[data-component="popover-content"]').filter({ hasText: "Manage servers" })
  17. const ensurePopoverOpen = async () => {
  18. if (await popover.isVisible()) return
  19. await status.click()
  20. await expect(popover).toBeVisible()
  21. }
  22. await ensurePopoverOpen()
  23. await popover.getByRole("button", { name: "Manage servers" }).click()
  24. const dialog = page.getByRole("dialog")
  25. await expect(dialog).toBeVisible()
  26. await expect(dialog.getByText(serverNamePattern).first()).toBeVisible()
  27. const menuTrigger = dialog.locator('[data-slot="dropdown-menu-trigger"]').first()
  28. await expect(menuTrigger).toBeVisible()
  29. await menuTrigger.click({ force: true })
  30. const menu = page.locator('[data-component="dropdown-menu-content"]').first()
  31. await expect(menu).toBeVisible()
  32. await clickMenuItem(menu, /set as default/i)
  33. await expect
  34. .poll(async () =>
  35. serverUrls.includes((await page.evaluate((key) => localStorage.getItem(key), DEFAULT_SERVER_URL_KEY)) ?? ""),
  36. )
  37. .toBe(true)
  38. await expect(dialog.getByText("Default", { exact: true })).toBeVisible()
  39. await closeDialog(page, dialog)
  40. await ensurePopoverOpen()
  41. const serverRow = popover.locator("button").filter({ hasText: serverNamePattern }).first()
  42. await expect(serverRow).toBeVisible()
  43. await expect(serverRow.getByText("Default", { exact: true })).toBeVisible()
  44. })