This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import { render, screen, waitFor } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { beforeEach, expect, it, vi } from 'vitest';
|
||||
import { MonitorRulesModal, ChannelEnrollmentPrompt } from './MonitorConfiguration';
|
||||
const api = vi.hoisted(() => ({
|
||||
rules: vi.fn(),
|
||||
effective: vi.fn(),
|
||||
saveRule: vi.fn(),
|
||||
targets: vi.fn(),
|
||||
target: vi.fn(),
|
||||
}));
|
||||
vi.mock('./monitorApi', async (importOriginal) => ({ ...(await importOriginal<object>()), monitorApi: api }));
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
api.rules.mockResolvedValue([]);
|
||||
api.effective.mockResolvedValue([]);
|
||||
});
|
||||
it('leaves default thresholds empty and preserves input on actual save failure', async () => {
|
||||
const user = userEvent.setup(),
|
||||
close = vi.fn();
|
||||
api.saveRule.mockRejectedValue(new Error('规则已被修改,请刷新后重试'));
|
||||
render(<MonitorRulesModal type="industry" onClose={close} />);
|
||||
await waitFor(() => expect(screen.getByRole('button', { name: '保存规则' })).toBeEnabled());
|
||||
expect(screen.getByLabelText('5秒到达率下限(%)')).toHaveValue(null);
|
||||
expect(screen.getByLabelText('启用告警')).not.toBeChecked();
|
||||
await user.type(screen.getByLabelText('最低成熟样本量'), '100');
|
||||
await user.type(screen.getByLabelText('5秒到达率下限(%)'), '90');
|
||||
await user.click(screen.getByRole('button', { name: '保存规则' }));
|
||||
expect(await screen.findByRole('alert')).toHaveTextContent('规则已被修改');
|
||||
expect(screen.getByLabelText('最低成熟样本量')).toHaveValue(100);
|
||||
expect(api.saveRule).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
version: 0,
|
||||
scope: {},
|
||||
config: expect.objectContaining({ enabled: false, minSamples: 100, thresholds: [90, null, null] }),
|
||||
}),
|
||||
);
|
||||
expect(close).not.toHaveBeenCalled();
|
||||
});
|
||||
it('retries enrollment against the same saved channel without creating another channel', async () => {
|
||||
const user = userEvent.setup(),
|
||||
close = vi.fn();
|
||||
const channel = { id: 'saved-channel', name: '已保存通道', version: 0, enabled: false };
|
||||
api.targets.mockResolvedValue([channel]);
|
||||
api.target.mockRejectedValueOnce(new Error('网络中断')).mockResolvedValueOnce({ success: true });
|
||||
render(<ChannelEnrollmentPrompt channel={channel} onClose={close} />);
|
||||
await user.click(screen.getByRole('button', { name: '加入监控' }));
|
||||
expect(await screen.findByRole('alert')).toHaveTextContent('无需重新创建通道');
|
||||
await user.click(screen.getByRole('button', { name: '加入监控' }));
|
||||
await waitFor(() => expect(close).toHaveBeenCalledOnce());
|
||||
expect(api.target.mock.calls).toEqual([
|
||||
[channel, true],
|
||||
[channel, true],
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user