summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/projects/projects-switch.spec.ts
diff options
context:
space:
mode:
authorLuke Parker <[email protected]>2026-03-20 14:12:06 +1000
committerGitHub <[email protected]>2026-03-20 00:12:06 -0400
commitd460614cd7ad9e047a2792139ea67e16caa82ea7 (patch)
treeff415e8719c7b6edd73bc824da379308e4e62589 /packages/app/e2e/projects/projects-switch.spec.ts
parent7866dbcfcc36a60d22ad466eddf54c54b21fabe3 (diff)
downloadopencode-d460614cd7ad9e047a2792139ea67e16caa82ea7.tar.gz
opencode-d460614cd7ad9e047a2792139ea67e16caa82ea7.zip
fix: lots of desktop stability, better e2e error logging (#18300)
Diffstat (limited to 'packages/app/e2e/projects/projects-switch.spec.ts')
-rw-r--r--packages/app/e2e/projects/projects-switch.spec.ts53
1 files changed, 10 insertions, 43 deletions
diff --git a/packages/app/e2e/projects/projects-switch.spec.ts b/packages/app/e2e/projects/projects-switch.spec.ts
index e9cbf868d..b46c1b407 100644
--- a/packages/app/e2e/projects/projects-switch.spec.ts
+++ b/packages/app/e2e/projects/projects-switch.spec.ts
@@ -1,5 +1,4 @@
import { base64Decode } from "@opencode-ai/util/encode"
-import type { Page } from "@playwright/test"
import { test, expect } from "../fixtures"
import {
defocus,
@@ -7,43 +6,14 @@ import {
cleanupTestProject,
openSidebar,
sessionIDFromUrl,
- waitDir,
+ setWorkspacesEnabled,
+ waitSession,
+ waitSessionSaved,
waitSlug,
} from "../actions"
import { projectSwitchSelector, promptSelector, workspaceItemSelector, workspaceNewSessionSelector } from "../selectors"
import { dirSlug, resolveDirectory } from "../utils"
-async function workspaces(page: Page, directory: string, enabled: boolean) {
- await page.evaluate(
- ({ directory, enabled }: { directory: string; enabled: boolean }) => {
- const key = "opencode.global.dat:layout"
- const raw = localStorage.getItem(key)
- const data = raw ? JSON.parse(raw) : {}
- const sidebar = data.sidebar && typeof data.sidebar === "object" ? data.sidebar : {}
- const current =
- sidebar.workspaces && typeof sidebar.workspaces === "object" && !Array.isArray(sidebar.workspaces)
- ? sidebar.workspaces
- : {}
- const next = { ...current }
-
- if (enabled) next[directory] = true
- if (!enabled) delete next[directory]
-
- localStorage.setItem(
- key,
- JSON.stringify({
- ...data,
- sidebar: {
- ...sidebar,
- workspaces: next,
- },
- }),
- )
- },
- { directory, enabled },
- )
-}
-
test("can switch between projects from sidebar", async ({ page, withProject }) => {
await page.setViewportSize({ width: 1400, height: 800 })
@@ -84,9 +54,7 @@ test("switching back to a project opens the latest workspace session", async ({
await withProject(
async ({ directory, slug, trackSession, trackDirectory }) => {
await defocus(page)
- await workspaces(page, directory, true)
- await page.reload()
- await expect(page.locator(promptSelector)).toBeVisible()
+ await setWorkspacesEnabled(page, slug, true)
await openSidebar(page)
await expect(page.getByRole("button", { name: "New workspace" }).first()).toBeVisible()
@@ -108,8 +76,7 @@ test("switching back to a project opens the latest workspace session", async ({
await expect(btn).toBeVisible()
await btn.click({ force: true })
- await waitSlug(page)
- await waitDir(page, space)
+ await waitSession(page, { directory: space })
// Create a session by sending a prompt
const prompt = page.locator(promptSelector)
@@ -123,6 +90,7 @@ test("switching back to a project opens the latest workspace session", async ({
const created = sessionIDFromUrl(page.url())
if (!created) throw new Error(`Failed to get session ID from url: ${page.url()}`)
trackSession(created, space)
+ await waitSessionSaved(space, created)
await expect(page).toHaveURL(new RegExp(`/${next}/session/${created}(?:[/?#]|$)`))
@@ -130,15 +98,14 @@ test("switching back to a project opens the latest workspace session", async ({
const otherButton = page.locator(projectSwitchSelector(otherSlug)).first()
await expect(otherButton).toBeVisible()
- await otherButton.click()
- await expect(page).toHaveURL(new RegExp(`/${otherSlug}/session`))
+ await otherButton.click({ force: true })
+ await waitSession(page, { directory: other })
const rootButton = page.locator(projectSwitchSelector(slug)).first()
await expect(rootButton).toBeVisible()
- await rootButton.click()
+ await rootButton.click({ force: true })
- await waitDir(page, space)
- await expect.poll(() => sessionIDFromUrl(page.url()) ?? "").toBe(created)
+ await waitSession(page, { directory: space, sessionID: created })
await expect(page).toHaveURL(new RegExp(`/session/${created}(?:[/?#]|$)`))
},
{ extra: [other] },