fix(web): deduplicate plan review rendering

This commit is contained in:
fz
2026-07-24 15:05:18 +08:00
parent fd8b238d94
commit 4cd4c11871
14 changed files with 78 additions and 49 deletions

View File

@@ -292,6 +292,7 @@ describe('web boot chain success pass (keyless, ten real bundles, ?fixture)', ()
const composer = page.locator('[data-question-key]')
await composer.waitFor({ timeout: 15_000 })
expect({
pendingQuestionPlaceholders: await page.getByText(/等待回答(/).count(),
question: await composer.getByRole('heading').innerText(),
progress: await composer.getByText('1 / 3', { exact: true }).innerText(),
options: await composer.getByRole('radio').allTextContents(),
@@ -304,6 +305,7 @@ describe('web boot chain success pass (keyless, ten real bundles, ?fixture)', ()
"2研究潜力型更看重 Agent 理解、训练评测思路和长期成长空间。",
"3均衡型同时要求工程能力和 Agent 认知,但可能筛选门槛更高。",
],
"pendingQuestionPlaceholders": 0,
"progress": "1 / 3",
"question": "你现在更想招哪类 Agent/Harness 候选人?",
}
@@ -312,11 +314,30 @@ describe('web boot chain success pass (keyless, ten real bundles, ?fixture)', ()
await composer.getByRole('radio', { name: '工程落地型' }).click()
await composer.getByText('2 / 3', { exact: true }).waitFor()
await composer.getByRole('button', { name: '跳过本题', exact: true }).click()
const detail = composer.getByText('按当前招聘目标选择;跳过则视为不设偏好。')
const planHeading = composer.getByRole('heading', { level: 1, name: '面试计划' })
await planHeading.waitFor()
expect({
code: await composer.locator('code').filter({ hasText: '偏好' }).innerText(),
headingTag: await planHeading.evaluate(element => element.tagName),
listItems: await composer.locator('li').allTextContents(),
strong: await composer.locator('strong').filter({ hasText: '按当前招聘目标' }).innerText(),
}).toMatchInlineSnapshot(`
{
"code": "偏好",
"headingTag": "H1",
"listItems": [
"按当前招聘目标选择",
"跳过则视为不设 偏好",
],
"strong": "按当前招聘目标",
}
`)
// Exercise provider-sized plan detail through the assembled composer
// without making the shared fixture transcript permanently enormous.
await detail.evaluate((element) => {
element.textContent = Array.from(
await planHeading.evaluate((element) => {
const markdown = element.parentElement
if (markdown === null) throw new Error('Markdown detail root missing')
markdown.textContent = Array.from(
{ length: 80 },
(_, index) => `Plan section ${String(index + 1)} keeps review context readable.`,
).join(' ')