summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/projects/workspaces.spec.ts
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-19 21:59:14 +0800
committerGitHub <[email protected]>2026-03-19 19:29:14 +0530
commit84f60d97a0c37c9136dfd965a66a0c8685a19e71 (patch)
tree3257e9da5114ddf3775b310db9b5707cc48267c4 /packages/app/e2e/projects/workspaces.spec.ts
parentcbf4b68fee8ff45c10a484b27f94e2dbe5f5dea2 (diff)
downloadopencode-84f60d97a0c37c9136dfd965a66a0c8685a19e71.tar.gz
opencode-84f60d97a0c37c9136dfd965a66a0c8685a19e71.zip
app: fix workspace flicker when switching directories (#18207)
Co-authored-by: Shoubhit Dash <[email protected]>
Diffstat (limited to 'packages/app/e2e/projects/workspaces.spec.ts')
-rw-r--r--packages/app/e2e/projects/workspaces.spec.ts29
1 files changed, 15 insertions, 14 deletions
diff --git a/packages/app/e2e/projects/workspaces.spec.ts b/packages/app/e2e/projects/workspaces.spec.ts
index aeeccb9bb..8ee899f18 100644
--- a/packages/app/e2e/projects/workspaces.spec.ts
+++ b/packages/app/e2e/projects/workspaces.spec.ts
@@ -1,4 +1,3 @@
-import { base64Decode } from "@opencode-ai/util/encode"
import fs from "node:fs/promises"
import os from "node:os"
import path from "node:path"
@@ -13,8 +12,10 @@ import {
confirmDialog,
openSidebar,
openWorkspaceMenu,
+ resolveSlug,
setWorkspacesEnabled,
slugFromUrl,
+ waitDir,
waitSlug,
} from "../actions"
import { dropdownMenuContentSelector, inlineInputSelector, workspaceItemSelector } from "../selectors"
@@ -27,15 +28,15 @@ async function setupWorkspaceTest(page: Page, project: { slug: string }) {
await setWorkspacesEnabled(page, rootSlug, true)
await page.getByRole("button", { name: "New workspace" }).first().click()
- const slug = await waitSlug(page, [rootSlug])
- const dir = base64Decode(slug)
+ const next = await resolveSlug(await waitSlug(page, [rootSlug]))
+ await waitDir(page, next.directory)
await openSidebar(page)
await expect
.poll(
async () => {
- const item = page.locator(workspaceItemSelector(slug)).first()
+ const item = page.locator(workspaceItemSelector(next.slug)).first()
try {
await item.hover({ timeout: 500 })
return true
@@ -47,7 +48,7 @@ async function setupWorkspaceTest(page: Page, project: { slug: string }) {
)
.toBe(true)
- return { rootSlug, slug, directory: dir }
+ return { rootSlug, slug: next.slug, directory: next.directory }
}
test("can enable and disable workspaces from project menu", async ({ page, withProject }) => {
@@ -79,15 +80,15 @@ test("can create a workspace", async ({ page, withProject }) => {
await expect(page.getByRole("button", { name: "New workspace" }).first()).toBeVisible()
await page.getByRole("button", { name: "New workspace" }).first().click()
- const workspaceSlug = await waitSlug(page, [slug])
- const workspaceDir = base64Decode(workspaceSlug)
+ const next = await resolveSlug(await waitSlug(page, [slug]))
+ await waitDir(page, next.directory)
await openSidebar(page)
await expect
.poll(
async () => {
- const item = page.locator(workspaceItemSelector(workspaceSlug)).first()
+ const item = page.locator(workspaceItemSelector(next.slug)).first()
try {
await item.hover({ timeout: 500 })
return true
@@ -99,9 +100,9 @@ test("can create a workspace", async ({ page, withProject }) => {
)
.toBe(true)
- await expect(page.locator(workspaceItemSelector(workspaceSlug)).first()).toBeVisible()
+ await expect(page.locator(workspaceItemSelector(next.slug)).first()).toBeVisible()
- await cleanupTestProject(workspaceDir)
+ await cleanupTestProject(next.directory)
})
})
@@ -119,7 +120,7 @@ test("non-git projects keep workspace mode disabled", async ({ page, withProject
await expect.poll(() => slugFromUrl(page.url()), { timeout: 30_000 }).not.toBe("")
- const activeDir = base64Decode(slugFromUrl(page.url()))
+ const activeDir = await resolveSlug(slugFromUrl(page.url())).then((item) => item.directory)
expect(path.basename(activeDir)).toContain("opencode-e2e-project-nongit-")
await openSidebar(page)
@@ -331,9 +332,9 @@ test("can reorder workspaces by drag and drop", async ({ page, withProject }) =>
for (const _ of [0, 1]) {
const prev = slugFromUrl(page.url())
await page.getByRole("button", { name: "New workspace" }).first().click()
- const slug = await waitSlug(page, [rootSlug, prev])
- const dir = base64Decode(slug)
- workspaces.push({ slug, directory: dir })
+ const next = await resolveSlug(await waitSlug(page, [rootSlug, prev]))
+ await waitDir(page, next.directory)
+ workspaces.push(next)
await openSidebar(page)
}