refine Semi UI mobile alert rule editing
This commit is contained in:
@@ -284,6 +284,46 @@ test('uses the shared Semi bottom SideSheet pattern for mobile advanced filters'
|
||||
expect(document.querySelector('.v2-alert-filter-sidesheet .semi-sidesheet-inner')).toHaveStyle({ height: 'min(72dvh, 620px)' });
|
||||
});
|
||||
|
||||
test('keeps mobile rule selection focused and opens editing in a Semi bottom SideSheet', async () => {
|
||||
layout.mobile = true;
|
||||
mocks.alertRulesV2.mockResolvedValue([alertRule()]);
|
||||
mocks.metricCatalog.mockResolvedValue({
|
||||
metrics: [{ key: 'speed_kmh', label: '速度', unit: 'km/h', category: 'driving', valueType: 'numeric', protocols: ['JT808'], sourceFields: {}, searchable: true, chartable: true, alertable: true }],
|
||||
asOf: ''
|
||||
});
|
||||
mocks.alertNotificationsV2.mockResolvedValue({ items: [], total: 0, limit: 100, offset: 0 });
|
||||
const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
|
||||
render(<QueryClientProvider client={client}><MemoryRouter future={ROUTER_FUTURE} initialEntries={['/alerts?tab=rules']}><AlertsPage /></MemoryRouter></QueryClientProvider>);
|
||||
|
||||
const ruleItem = await screen.findByRole('button', { name: /测试超速规则/ });
|
||||
await waitFor(() => expect(ruleItem).toHaveAttribute('aria-pressed', 'true'));
|
||||
expect(screen.getByRole('region', { name: '告警规则列表' })).toBeInTheDocument();
|
||||
expect(ruleItem).toHaveAttribute('aria-haspopup', 'dialog');
|
||||
expect(ruleItem).toHaveAttribute('aria-expanded', 'false');
|
||||
expect(document.querySelector('.v2-alert-rule-editor')).not.toBeInTheDocument();
|
||||
|
||||
fireEvent.click(ruleItem);
|
||||
const editor = await screen.findByRole('dialog', { name: '告警规则编辑' });
|
||||
expect(document.querySelector('.v2-alert-rule-editor-sidesheet')).toHaveClass('semi-sidesheet-bottom');
|
||||
expect(document.querySelector('.v2-alert-rule-editor-sidesheet .semi-sidesheet-inner')).toHaveStyle({ height: 'min(92dvh, 820px)' });
|
||||
expect(within(editor).getByDisplayValue('测试超速规则')).toBeInTheDocument();
|
||||
expect(within(editor).getByRole('button', { name: '保存规则' })).toBeInTheDocument();
|
||||
expect(ruleItem).toHaveAttribute('aria-expanded', 'true');
|
||||
|
||||
fireEvent.click(within(editor).getByRole('button', { name: '关闭告警规则编辑' }));
|
||||
await waitFor(() => expect(document.querySelector('.v2-alert-rule-editor')).not.toBeInTheDocument());
|
||||
expect(document.querySelector('.v2-alert-rule-editor-sidesheet .semi-sidesheet-inner')).toHaveClass('semi-sidesheet-animation-content_hide_bottom');
|
||||
expect(ruleItem).toHaveAttribute('aria-expanded', 'false');
|
||||
|
||||
const newRule = screen.getByRole('button', { name: /新建规则/ });
|
||||
expect(newRule).toHaveAttribute('aria-haspopup', 'dialog');
|
||||
fireEvent.click(newRule);
|
||||
await waitFor(() => expect(document.querySelector('.v2-alert-rule-editor')).toBeInTheDocument());
|
||||
const newEditor = screen.getByRole('dialog', { name: '告警规则编辑' });
|
||||
expect(within(newEditor).getByText('新建规则')).toBeInTheDocument();
|
||||
expect(newRule).toHaveAttribute('aria-expanded', 'true');
|
||||
});
|
||||
|
||||
test('creates auditable drafts from simple offline and hydrogen rule templates', async () => {
|
||||
mocks.alertRulesV2.mockResolvedValue([alertRule()]);
|
||||
mocks.metricCatalog.mockResolvedValue({
|
||||
|
||||
Reference in New Issue
Block a user