refine Semi UI access evidence inspector

This commit is contained in:
lingniu
2026-07-18 16:50:20 +08:00
parent 8827a05e7e
commit f7b523453c
3 changed files with 254 additions and 37 deletions

View File

@@ -157,7 +157,11 @@ test('does not request or render admin-only thresholds for a read-only session',
test('renders mobile access vehicles as selectable Semi cards', async () => {
layout.mobile = true;
prepareBaseData();
mocks.accessVehicles.mockResolvedValue({ items: [accessRow('VIN001', '粤A00001')], total: 1, limit: 50, offset: 0 });
const delayedRow = accessRow('VIN001', '粤A00001');
delayedRow.connectionState = 'degraded';
delayedRow.protocolStatuses[0].delayAbnormal = true;
delayedRow.protocolStatuses[0].dataDelaySec = 128;
mocks.accessVehicles.mockResolvedValue({ items: [delayedRow], total: 1, limit: 50, offset: 0 });
const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
const view = render(<QueryClientProvider client={client}><MemoryRouter future={ROUTER_FUTURE} initialEntries={['/access']}><AccessPage /></MemoryRouter></QueryClientProvider>);
@@ -191,9 +195,25 @@ test('renders mobile access vehicles as selectable Semi cards', async () => {
expect(within(dialog).getByRole('button', { name: '关闭车辆接入详情' })).toBeInTheDocument();
expect(dialog.querySelector('.v2-access-inspector-v3.semi-card')).toBeInTheDocument();
expect(dialog.querySelector('.v2-access-inspector-focus.semi-card')).toBeInTheDocument();
expect(dialog.querySelector('.v2-access-inspector-summary.semi-descriptions')).toBeInTheDocument();
expect(dialog.querySelector('.v2-access-inspector-summary-grid')).toHaveAttribute('aria-label', '车辆接入概览');
expect(within(dialog).getByText('协议证据')).toBeInTheDocument();
expect(within(dialog).getByText('1 / 3 已接入').closest('.semi-tag')).toBeInTheDocument();
expect(dialog.querySelector('.v2-access-protocol-details.semi-card-group')).toBeInTheDocument();
expect(dialog.querySelectorAll('.v2-access-protocol-detail.semi-card')).toHaveLength(3);
const evidenceToggle = within(dialog).getByRole('button', { name: '收起 JT808 完整证据' });
expect(evidenceToggle).toHaveAttribute('aria-expanded', 'true');
expect(within(dialog).getByRole('region', { name: 'JT808 完整接入证据' })).toBeInTheDocument();
expect(within(dialog).getByText('test first seen')).toBeInTheDocument();
expect(within(dialog).getAllByText('当前未发现真实接入来源')).toHaveLength(2);
const vehicleRequestsBeforeEvidenceToggle = mocks.accessVehicles.mock.calls.length;
const summaryRequestsBeforeEvidenceToggle = mocks.accessSummary.mock.calls.length;
fireEvent.click(evidenceToggle);
expect(within(dialog).getByRole('button', { name: '查看 JT808 完整证据' })).toHaveAttribute('aria-expanded', 'false');
expect(within(dialog).queryByRole('region', { name: 'JT808 完整接入证据' })).not.toBeInTheDocument();
fireEvent.click(within(dialog).getByRole('button', { name: '查看 JT808 完整证据' }));
expect(within(dialog).getByRole('button', { name: '收起 JT808 完整证据' })).toHaveAttribute('aria-expanded', 'true');
expect(mocks.accessVehicles).toHaveBeenCalledTimes(vehicleRequestsBeforeEvidenceToggle);
expect(mocks.accessSummary).toHaveBeenCalledTimes(summaryRequestsBeforeEvidenceToggle);
expect(document.querySelector('.v2-access-detail-sidesheet')).toHaveClass('semi-sidesheet-bottom');
expect(document.querySelector('.v2-access-detail-sidesheet .semi-sidesheet-inner')).toHaveStyle({ height: 'min(84dvh, 740px)' });
fireEvent.click(within(dialog).getByRole('button', { name: '关闭车辆接入详情' }));