68 lines
4.2 KiB
TypeScript
68 lines
4.2 KiB
TypeScript
import { expect, gotoWorkbench, saveScreenshot, test } from "../fixtures/test";
|
|
import { selectors, sessionTab } from "../fixtures/selectors";
|
|
|
|
test("Code Agent message headers render canonical timing metadata", async ({ page }, testInfo) => {
|
|
const baseTime = new Date("2026-06-17T09:39:45.000Z");
|
|
await page.clock.install({ time: baseTime });
|
|
await page.clock.pauseAt(baseTime);
|
|
await gotoWorkbench(page, "/workbench/sessions/ses_running");
|
|
|
|
const running = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="running"]`).first();
|
|
await expect(running.locator(`.message-meta-footer ${selectors.messageDurationMeta}`)).toContainText("耗时 4 秒");
|
|
await expect(running.locator(`.message-meta-footer ${selectors.messageActivityMeta}`)).toContainText("最近更新:0 秒前");
|
|
await expect(running.locator(selectors.messageDurationMeta)).toHaveAttribute("aria-label", "总耗时:4 秒");
|
|
await expect(running.locator(selectors.messageActivityMeta)).toHaveAttribute("aria-label", "最近更新:0 秒前");
|
|
await expect(running.locator(selectors.messageDurationMeta)).not.toContainText("最近");
|
|
|
|
await page.clock.fastForward(5000);
|
|
await expect(running.locator(selectors.messageDurationMeta)).toContainText("耗时 9 秒");
|
|
await expect(running.locator(selectors.messageActivityMeta)).toContainText("最近 5 秒前");
|
|
|
|
await page.clock.fastForward(60000);
|
|
await expect(running.locator(selectors.messageDurationMeta)).toContainText("耗时 1 分 9 秒");
|
|
await expect(running.locator(selectors.messageActivityMeta)).toContainText("最近 1 分 5 秒前");
|
|
|
|
await page.locator(sessionTab("ses_completed")).click();
|
|
const completed = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="completed"]`).first();
|
|
await expect(completed.locator(selectors.messageDurationMeta)).toContainText("耗时 6 秒");
|
|
await expect(completed.locator(selectors.messageActivityMeta)).toHaveCount(0);
|
|
await page.clock.fastForward(60000);
|
|
await expect(completed.locator(selectors.messageDurationMeta)).toContainText("耗时 6 秒");
|
|
|
|
await page.locator(sessionTab("ses_failed")).click();
|
|
const failed = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="failed"]`).first();
|
|
await expect(failed.locator(selectors.messageDurationMeta)).toContainText("耗时 2 秒");
|
|
await expect(failed.locator(selectors.messageActivityMeta)).toHaveCount(0);
|
|
|
|
await page.locator(sessionTab("ses_canceled")).click();
|
|
const canceled = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="canceled"]`).first();
|
|
await expect(canceled.locator(selectors.messageDurationMeta)).toContainText("耗时 0 秒");
|
|
await expect(canceled.locator(selectors.messageActivityMeta)).toHaveCount(0);
|
|
await page.clock.fastForward(60000);
|
|
await expect(canceled.locator(selectors.messageDurationMeta)).toContainText("耗时 0 秒");
|
|
|
|
await expect(page.locator(`${selectors.messageCard}[data-role="user"] ${selectors.messageDurationMeta}`)).toHaveCount(0);
|
|
await expect(page.locator(`${selectors.messageCard}[data-role="user"] ${selectors.messageActivityMeta}`)).toHaveCount(0);
|
|
await saveScreenshot(page, testInfo, "message-timing-headers");
|
|
});
|
|
|
|
test.describe("terminal timing seal", () => {
|
|
test.use({ scenarioId: "terminal-canceled-late-timing" });
|
|
|
|
test("canceled message duration stays sealed after late timing snapshots", async ({ page }, testInfo) => {
|
|
const baseTime = new Date("2026-06-17T09:39:04.000Z");
|
|
await page.clock.install({ time: baseTime });
|
|
await page.clock.pauseAt(baseTime);
|
|
await gotoWorkbench(page, "/workbench/sessions/ses_running");
|
|
|
|
const canceled = page.locator(`${selectors.messageCard}[data-role="agent"][data-status="canceled"]`).first();
|
|
await expect(canceled.locator(selectors.messageDurationMeta)).toContainText("耗时 12 秒");
|
|
await expect(canceled.locator(selectors.messageActivityMeta)).toHaveCount(0);
|
|
|
|
await page.waitForTimeout(1200);
|
|
await expect(canceled.locator(selectors.messageDurationMeta)).toContainText("耗时 12 秒");
|
|
await expect(canceled.locator(selectors.messageDurationMeta)).not.toContainText("14 秒");
|
|
await saveScreenshot(page, testInfo, "message-timing-canceled-sealed");
|
|
});
|
|
});
|