import {LocationFixture} from 'sentry-fixture/locationFixture';
import {RouterFixture} from 'sentry-fixture/routerFixture';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {useNavigate} from 'sentry/utils/useNavigate';
import Thresholds from 'sentry/views/dashboards/widgetBuilder/components/thresholds';
import {WidgetBuilderProvider} from 'sentry/views/dashboards/widgetBuilder/contexts/widgetBuilderContext';
jest.mock('sentry/utils/useNavigate');
describe('Thresholds', () => {
let mockNavigate!: jest.Mock;
beforeEach(() => {
mockNavigate = jest.fn();
jest.mocked(useNavigate).mockReturnValue(mockNavigate);
});
it('sets thresholds to undefined if the thresholds are fully wiped', async () => {
render(
,
{
router: RouterFixture({
location: LocationFixture({
query: {
thresholds: '{"max_values":{"max1":100},"unit":"millisecond"}',
},
}),
}),
}
);
await userEvent.clear(screen.getByLabelText('First Maximum'));
expect(mockNavigate).toHaveBeenCalledWith(
expect.objectContaining({
query: expect.objectContaining({
thresholds: undefined,
}),
}),
{replace: true}
);
});
it('sets a threshold when applied', async () => {
render(
);
await userEvent.type(screen.getByLabelText('First Maximum'), '100');
await userEvent.type(screen.getByLabelText('Second Maximum'), '200');
await userEvent.tab();
expect(mockNavigate).toHaveBeenCalledWith(
expect.objectContaining({
query: expect.objectContaining({
thresholds: '{"max_values":{"max1":100,"max2":200},"unit":null}',
}),
}),
{replace: true}
);
});
it('updates the unit when applied', async () => {
render(
,
{
router: RouterFixture({
location: LocationFixture({
query: {
thresholds: '{"max_values":{"max1":100,"max2":200},"unit":"millisecond"}',
},
}),
}),
}
);
await userEvent.click(screen.getAllByText('millisecond')[0]!);
await userEvent.click(screen.getByText('second'));
expect(mockNavigate).toHaveBeenCalledWith(
expect.objectContaining({
query: expect.objectContaining({
thresholds: '{"max_values":{"max1":100,"max2":200},"unit":"second"}',
}),
}),
{replace: true}
);
});
});