Ver código fonte

test(web): retain historical Messages replay after provider consolidation

Yichen Jiang 2 semanas atrás
pai
commit
59c1ee7c82

+ 18 - 25
apps/web/tests/deepseek-messages-chat.e2e.ts

@@ -1,4 +1,4 @@
-/** Recorded Web conversation through the shipped Messages route and DeepSeek model group. */
+/** Historical Messages provider replay preserves its recorded identity and DeepSeek model group. */
 import { readFile } from 'node:fs/promises'
 import { fileURLToPath } from 'node:url'
 import { join } from 'node:path'
@@ -6,16 +6,15 @@ import { chromium, type Browser, type Page } from 'playwright'
 import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest'
 import {
   assertFixtureInventory, captureStableAria, compareOrRefreshGolden, fixtureUserPrompts,
-  launchWebScaffold, recordFixture, selectedSessionFixture, watchConsole, webSnapshotMode, type WebScaffold,
+  launchWebScaffold, selectedSessionFixture, watchConsole, webSnapshotMode, type WebScaffold,
 } from './scaffold.ts'
 import { connectFreshWorkspaceZh, saveFailureShot, ZH_BROWSER_LOCALE } from './support.ts'
 
 const SNAPSHOT_DIR = fileURLToPath(new URL('../../../snapshots/web/deepseek-messages-chat', import.meta.url))
 const FIXTURE = join(SNAPSHOT_DIR, 'session.v3.jsonl')
 const MODE = webSnapshotMode()
-const RECORD_PROMPT = '只回复 MESSAGES_WEB_READY,不调用工具。'
 
-describe('web e2e: DeepSeek Messages conversation', () => {
+describe.skipIf(MODE === 'record')('web e2e: DeepSeek Messages conversation', () => {
   let scaffold: WebScaffold
   let browser: Browser
   let page: Page
@@ -23,21 +22,19 @@ describe('web e2e: DeepSeek Messages conversation', () => {
   let replayFixture: string
 
   beforeAll(async () => {
-    replayFixture = await selectedSessionFixture(FIXTURE, MODE === 'record')
+    replayFixture = await selectedSessionFixture(FIXTURE, false)
     scaffold = await launchWebScaffold({
       deepSeekMessages: true,
-      ...(MODE === 'record' ? {} : {
-        replayFixture,
-        paceMs: 5,
-        replayProviders: [{
-          id: 'deepseek-messages', name: 'DeepSeek',
-          models: [{
-            id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash',
-            contextWindow: 1_000_000, defaultMaxTokens: 256_000,
-            reasoningEfforts: ['off', 'low', 'high', 'max'], defaultReasoningEffort: 'high',
-          }],
+      replayFixture,
+      paceMs: 5,
+      replayProviders: [{
+        id: 'deepseek-messages', name: 'DeepSeek',
+        models: [{
+          id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash',
+          contextWindow: 1_000_000, defaultMaxTokens: 256_000,
+          reasoningEfforts: ['off', 'low', 'high', 'max'], defaultReasoningEffort: 'high',
         }],
-      }),
+      }],
     })
     browser = await chromium.launch()
     page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: ZH_BROWSER_LOCALE })
@@ -50,9 +47,9 @@ describe('web e2e: DeepSeek Messages conversation', () => {
     try { await browser?.close() } finally { await scaffold?.close() }
   })
 
-  it('records the Messages provider while displaying DeepSeek in the model selector', async () => {
+  it('replays the historical Messages provider while displaying DeepSeek in the model selector', async () => {
     onTestFailed(() => saveFailureShot(page, 'web-e2e-deepseek-messages-chat'))
-    const prompts = MODE === 'record' ? [RECORD_PROMPT] : fixtureUserPrompts(await readFile(replayFixture, 'utf8'))
+    const prompts = fixtureUserPrompts(await readFile(replayFixture, 'utf8'))
     expect(prompts).toHaveLength(1)
     expect(scaffold.ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'deepseek-messages', model: 'deepseek-v4-flash' })
     await page.getByRole('button', { name: /^选择模型/ }).click()
@@ -67,16 +64,12 @@ describe('web e2e: DeepSeek Messages conversation', () => {
     const session = scaffold.ctx.sessions.get(sessionId)!
     expect(session.requestHeader()?.config.provider).toBe('deepseek-messages')
     await page.getByText('MESSAGES_WEB_READY', { exact: true }).waitFor()
-    if (MODE === 'record') {
-      await recordFixture(scaffold, sessionId, FIXTURE)
-    } else {
-      await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'ui.expected.md'),
-        await captureStableAria(page, '[class*="centerCol"]', scaffold.workspaceCwd), MODE)
-    }
+    await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'ui.expected.md'),
+      await captureStableAria(page, '[class*="centerCol"]', scaffold.workspaceCwd), MODE)
     expect(tripwire.pageErrors).toEqual([])
   })
 
-  it.skipIf(MODE === 'record')('keeps the recorded-session inventory closed', async () => {
+  it('keeps the recorded-session inventory closed', async () => {
     await assertFixtureInventory(SNAPSHOT_DIR, ['session.v3.jsonl', 'ui.expected.md'])
   })
 })

+ 1 - 3
snapshots/web/deepseek-messages-chat/ui.expected.md

@@ -41,9 +41,7 @@
   - text: 用时 {{duration}}
 - text: {{clock}}
 - textbox "发消息或创建任务, / 调用指令, @ 文件或对话"
-- button "指令":
-  - img
-- button "添加附件":
+- button "添加文件或调用指令":
   - img
 - button "访问模式,当前:工作区内修改": 工作区内修改
 - button "选择模型,当前 DeepSeek-V4-Flash,推理等级 high":