fix(app): normalize e2e workspace path checks
This commit is contained in:
parent
6aaaa4c807
commit
31e92f1454
2 changed files with 21 additions and 10 deletions
|
|
@ -5,7 +5,7 @@ import os from "node:os"
|
|||
import path from "node:path"
|
||||
import { execSync } from "node:child_process"
|
||||
import { terminalAttr, type E2EWindow } from "../src/testing/terminal"
|
||||
import { createSdk, modKey, resolveDirectory, serverUrl } from "./utils"
|
||||
import { createSdk, modKey, resolveDirectory, serverUrl, workspaceKey } from "./utils"
|
||||
import {
|
||||
dropdownMenuTriggerSelector,
|
||||
dropdownMenuContentSelector,
|
||||
|
|
@ -438,7 +438,7 @@ export async function resolveSlug(slug: string) {
|
|||
}
|
||||
|
||||
export async function waitDir(page: Page, directory: string) {
|
||||
const target = await resolveDirectory(directory)
|
||||
const target = workspaceKey(await resolveDirectory(directory))
|
||||
await expect
|
||||
.poll(
|
||||
async () => {
|
||||
|
|
@ -446,7 +446,7 @@ export async function waitDir(page: Page, directory: string) {
|
|||
const slug = slugFromUrl(page.url())
|
||||
if (!slug) return ""
|
||||
return resolveSlug(slug)
|
||||
.then((item) => item.directory)
|
||||
.then((item) => workspaceKey(item.directory))
|
||||
.catch(() => "")
|
||||
},
|
||||
{ timeout: 45_000 },
|
||||
|
|
@ -456,7 +456,7 @@ export async function waitDir(page: Page, directory: string) {
|
|||
}
|
||||
|
||||
export async function waitSession(page: Page, input: { directory: string; sessionID?: string }) {
|
||||
const target = await resolveDirectory(input.directory)
|
||||
const target = workspaceKey(await resolveDirectory(input.directory))
|
||||
await expect
|
||||
.poll(
|
||||
async () => {
|
||||
|
|
@ -464,14 +464,14 @@ export async function waitSession(page: Page, input: { directory: string; sessio
|
|||
const slug = slugFromUrl(page.url())
|
||||
if (!slug) return false
|
||||
const resolved = await resolveSlug(slug).catch(() => undefined)
|
||||
if (!resolved || resolved.directory !== target) return false
|
||||
if (!resolved || workspaceKey(resolved.directory) !== target) return false
|
||||
if (input.sessionID && sessionIDFromUrl(page.url()) !== input.sessionID) return false
|
||||
|
||||
const state = await probeSession(page)
|
||||
if (input.sessionID && (!state || state.sessionID !== input.sessionID)) return false
|
||||
if (state?.dir) {
|
||||
const dir = await resolveDirectory(state.dir).catch(() => state.dir ?? "")
|
||||
if (dir !== target) return false
|
||||
if (workspaceKey(dir) !== target) return false
|
||||
}
|
||||
|
||||
return page
|
||||
|
|
@ -488,7 +488,7 @@ export async function waitSession(page: Page, input: { directory: string; sessio
|
|||
|
||||
export async function waitSessionSaved(directory: string, sessionID: string, timeout = 30_000) {
|
||||
const sdk = createSdk(directory)
|
||||
const target = await resolveDirectory(directory)
|
||||
const target = workspaceKey(await resolveDirectory(directory))
|
||||
|
||||
await expect
|
||||
.poll(
|
||||
|
|
@ -498,7 +498,9 @@ export async function waitSessionSaved(directory: string, sessionID: string, tim
|
|||
.then((x) => x.data)
|
||||
.catch(() => undefined)
|
||||
if (!data?.directory) return ""
|
||||
return resolveDirectory(data.directory).catch(() => data.directory)
|
||||
return resolveDirectory(data.directory)
|
||||
.then(workspaceKey)
|
||||
.catch(() => workspaceKey(data.directory))
|
||||
},
|
||||
{ timeout },
|
||||
)
|
||||
|
|
|
|||
|
|
@ -36,6 +36,14 @@ export async function resolveDirectory(directory: string) {
|
|||
.then((x) => x.data?.directory ?? directory)
|
||||
}
|
||||
|
||||
export function workspaceKey(dir: string) {
|
||||
const value = dir.replaceAll("\\", "/")
|
||||
const drive = value.match(/^([A-Za-z]:)\/+$/)
|
||||
if (drive) return `${drive[1]}/`
|
||||
if (/^\/+$/i.test(value)) return "/"
|
||||
return value.replace(/\/+$/, "")
|
||||
}
|
||||
|
||||
export async function getWorktree() {
|
||||
const sdk = createSdk()
|
||||
const result = await sdk.path.get()
|
||||
|
|
@ -57,7 +65,8 @@ export function sessionPath(directory: string, sessionID?: string) {
|
|||
}
|
||||
|
||||
export function workspacePersistKey(directory: string, key: string) {
|
||||
const head = (directory.slice(0, 12) || "workspace").replace(/[^a-zA-Z0-9._-]/g, "-")
|
||||
const sum = checksum(directory) ?? "0"
|
||||
const dir = workspaceKey(directory)
|
||||
const head = (dir.slice(0, 12) || "workspace").replace(/[^a-zA-Z0-9._-]/g, "-")
|
||||
const sum = checksum(dir) ?? "0"
|
||||
return `opencode.workspace.${head}.${sum}.dat:workspace:${key}`
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue