feat: enforce partner name length constraints and improve workspace name handling

This commit is contained in:
hy committed 2026-09-10 18:48:26 +08:00
1 parent 5ce3e881e4
commit dbde267abb
1 file changed
+28 -6
+28 -6
View File
@@ -48,6 +48,11 @@ export const WORKBENCH_RESULT_E2E_TIMEOUT_MS = WORKBENCH_LONG_E2E_TIMEOUT_MS + 1
export const WORKBENCH_LIVE_AI_E2E_TIMEOUT_MS = 900_000
export const WORKBENCH_MODEL_LIST_TIMEOUT_MS = 60_000
export const WORKBENCH_FIXTURE_ROOT = E2E_WORKSPACE_FIXTURE_ROOT
/** Matches ChatPage create/edit partner Input maxLength. */
export const WORKBENCH_PARTNER_NAME_MAX_LENGTH = 40
export const clampWorkbenchPartnerName = (name: string): string =>
name.trim().slice(0, WORKBENCH_PARTNER_NAME_MAX_LENGTH)
export type WorkbenchLiveModelEnv = {
baseUrl: string
@@ -944,8 +949,9 @@ export const prepareWorkbenchWorkspaceThroughUi = async (
}
export const waitForVisiblePartnerRow = async (page: Page, name: string): Promise<void> => {
const partnerName = clampWorkbenchPartnerName(name)
await getWorkbenchPrefixLocator(page, workbenchSelectors.partnerItemPrefix)
.filter({ hasText: name })
.filter({ hasText: partnerName })
.first()
.waitFor({ state: 'visible' })
}
@@ -953,13 +959,18 @@ export const waitForVisiblePartnerRow = async (page: Page, name: string): Promis
export const createPartnerThroughWorkbenchUi = async (
page: Page,
name = '测试伙伴'
): Promise<void> => {
): Promise<string> => {
const partnerName = clampWorkbenchPartnerName(name)
if (!partnerName) {
throw new Error('partner name is required')
}
await getWorkbenchLocator(page, workbenchSelectors.newPartnerButton).click()
const nameInput = getWorkbenchLocator(page, workbenchSelectors.createPartnerNameInput)
await nameInput.waitFor({ state: 'visible' })
await nameInput.fill(name)
await nameInput.fill(partnerName)
await nameInput.press('Enter')
await waitForVisiblePartnerRow(page, name)
await waitForVisiblePartnerRow(page, partnerName)
return partnerName
}
export const setupWorkbenchWithTempWorkspace = async (
@@ -975,7 +986,13 @@ export const setupWorkbenchWithTempWorkspace = async (
): Promise<WorkbenchSetupResult> => {
const env = loadWorkbenchLiveModelEnv()
const workspace = await createTemporaryWorkbenchWorkspace(input.caseId)
const workspaceName = input.workspaceName || `Workbench ${input.caseId}`
// Default name doubles as partner title; keep it within the partner Input maxLength.
const workspaceName = clampWorkbenchPartnerName(
input.workspaceName || `Workbench ${input.caseId}`
)
if (!workspaceName) {
throw new Error('workspace/partner name is required')
}
if (input.configureModel !== false) {
await configureLiveModelThroughSettingsUi(page, env)
}
@@ -1007,7 +1024,12 @@ export const setupWorkbenchWorkspaceOnly = async (
}
): Promise<WorkbenchWorkspaceOnlySetupResult> => {
const workspace = await createTemporaryWorkbenchWorkspace(input.caseId)
const workspaceName = input.workspaceName || `Workbench ${input.caseId}`
const workspaceName = clampWorkbenchPartnerName(
input.workspaceName || `Workbench ${input.caseId}`
)
if (!workspaceName) {
throw new Error('workspace/partner name is required')
}
await prepareWorkbenchWorkspaceThroughUi(page, {
workspaceName,
rootPath: workspace.rootPath,