server-default.spec.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { test, expect } from "../fixtures"
  2. import { serverName, serverUrl } from "../utils"
  3. import { clickListItem, 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. const row = dialog.locator('[data-slot="list-item"]').filter({ hasText: serverName }).first()
  27. await expect(row).toBeVisible()
  28. const menuTrigger = row.locator('[data-slot="dropdown-menu-trigger"]').first()
  29. await expect(menuTrigger).toBeVisible()
  30. await menuTrigger.click({ force: true })
  31. const menu = page.locator('[data-component="dropdown-menu-content"]').first()
  32. await expect(menu).toBeVisible()
  33. await clickMenuItem(menu, /set as default/i)
  34. await expect.poll(() => page.evaluate((key) => localStorage.getItem(key), DEFAULT_SERVER_URL_KEY)).toBe(serverUrl)
  35. await expect(row.getByText("Default", { exact: true })).toBeVisible()
  36. await closeDialog(page, dialog)
  37. await ensurePopoverOpen()
  38. const serverRow = popover.locator("button").filter({ hasText: serverName }).first()
  39. await expect(serverRow).toBeVisible()
  40. await expect(serverRow.getByText("Default", { exact: true })).toBeVisible()
  41. })