yeg
2026-09-08 eb02e33a51ceb129eaa9e8a7ba72ca65854f9053
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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)
})