import { expect, test } from '@playwright/test'
|
|
test('已删除的结果查询路径和未知路径统一回到工作台', async ({ page }) => {
|
await page.addInitScript(() => localStorage.setItem('battery_detection_auth_token', 'ticket20-test-token'))
|
|
await page.goto('/result-query')
|
await expect(page).toHaveURL(/\/dashboard$/)
|
await expect(page.getByRole('button', { name: '结果查询', exact: true })).toHaveCount(0)
|
|
await page.reload()
|
await expect(page).toHaveURL(/\/dashboard$/)
|
|
await page.goto('/not-a-real-page')
|
await expect(page).toHaveURL(/\/dashboard$/)
|
})
|
|
test('未登录访问已删除路径不会保留返回结果查询的目标', async ({ page }) => {
|
await page.goto('/result-query')
|
|
await expect(page).toHaveURL(/\/login(?:\?|$)/)
|
const redirect = new URL(page.url()).searchParams.get('redirect')
|
expect(redirect).not.toBe('/result-query')
|
})
|
|
test('测试列表仍可进入控制台数据列表', async ({ page }) => {
|
await page.addInitScript(() => localStorage.setItem('battery_detection_auth_token', 'ticket20-test-token'))
|
await page.route('**/system/testType/list**', route => route.fulfill({
|
status: 200, contentType: 'application/json', body: JSON.stringify({ code: 200, total: 0, rows: [] }),
|
}))
|
const loadedData = new Set<string>()
|
for (const kind of ['records', 'steps', 'cycles']) {
|
await page.route(`**/system/test/77/data/${kind}`, route => {
|
loadedData.add(kind)
|
return route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ code: 200, data: [] }) })
|
})
|
}
|
await page.route('**/system/test/list**', route => route.fulfill({
|
status: 200,
|
contentType: 'application/json',
|
body: JSON.stringify({
|
code: 200,
|
total: 1,
|
rows: [{
|
testId: 77,
|
testName: 'Ticket20 控制台入口测试',
|
testTypeName: '循环测试',
|
principalName: '测试负责人',
|
testPurpose: '验证数据列表入口',
|
testStatus: 'COMPLETED',
|
receptionStatus: 'ENDED',
|
batteryNo: 'B-01',
|
createTime: '2026-08-31 09:00:00',
|
startedAtUtc: '2026-08-31T01:00:00Z',
|
endedAtUtc: '2026-08-31T02:00:00Z',
|
remark: '',
|
batteryCount: 1,
|
}],
|
}),
|
}))
|
await page.route('**/system/test/77/live-state', route => route.fulfill({
|
status: 200,
|
contentType: 'application/json',
|
body: JSON.stringify({ code: 200, data: { testId: 77, testStatus: 'COMPLETED', receptionStatus: 'ENDED', sources: [], exceptions: [] } }),
|
}))
|
await page.route('**/system/test/77/live', route => route.fulfill({
|
status: 200,
|
contentType: 'text/event-stream',
|
body: 'event: heartbeat\ndata: {"at":"2026-08-31T02:00:00Z"}\n\n',
|
}))
|
await page.route('**/system/test/77', route => route.fulfill({
|
status: 200,
|
contentType: 'application/json',
|
body: JSON.stringify({
|
code: 200,
|
data: {
|
testId: 77,
|
testName: 'Ticket20 控制台入口测试',
|
testStatus: 'COMPLETED',
|
receptionStatus: 'ENDED',
|
batteries: [],
|
planSteps: [],
|
thresholds: [],
|
fieldSnapshots: [],
|
},
|
}),
|
}))
|
|
await page.goto('/test-list')
|
const row = page.locator('tbody tr').filter({ hasText: 'Ticket20 控制台入口测试' })
|
await row.getByRole('button', { name: '控制台', exact: true }).click()
|
await expect(page).toHaveURL(/\/test-list\/77\/console$/)
|
|
await page.getByRole('button', { name: '数据列表', exact: true }).click()
|
const panel = page.locator('.console-data-panel')
|
await expect(panel).toBeVisible()
|
await expect(panel.locator('.section-heading small')).toHaveText('共 0 条')
|
await expect.poll(() => [...loadedData].sort()).toEqual(['cycles', 'records', 'steps'])
|
await expect(panel.locator('.load-error')).toHaveCount(0)
|
for (const tab of ['实时', '工步', '循环']) {
|
const button = panel.getByRole('button', { name: tab, exact: true })
|
await button.click()
|
await expect(button).toHaveAttribute('aria-current', 'page')
|
await expect(panel.locator('tbody .empty-cell')).toBeVisible()
|
}
|
await expect(page.getByRole('button', { name: '结果查询', exact: true })).toHaveCount(0)
|
})
|