mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: update more unit tests to work with react 18 (#64812)
update more unit tests to work with react 18
This commit is contained in:
parent
6b6cf5f4b7
commit
b19f7bb653
@ -1,4 +1,4 @@
|
|||||||
import { render, screen } from '@testing-library/react';
|
import { act, render, screen } from '@testing-library/react';
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
@ -136,7 +136,9 @@ describe('Graph', () => {
|
|||||||
series: { seriesIndex: 0 },
|
series: { seriesIndex: 0 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
$('div.graph-panel__chart').trigger('plothover', [eventArgs.pos, eventArgs.activeItem]);
|
act(() => {
|
||||||
|
$('div.graph-panel__chart').trigger('plothover', [eventArgs.pos, eventArgs.activeItem]);
|
||||||
|
});
|
||||||
const timestamp = screen.getByLabelText('Timestamp');
|
const timestamp = screen.getByLabelText('Timestamp');
|
||||||
const tooltip = screen.getByTestId('SeriesTableRow').parentElement;
|
const tooltip = screen.getByTestId('SeriesTableRow').parentElement;
|
||||||
|
|
||||||
@ -165,7 +167,9 @@ describe('Graph', () => {
|
|||||||
activeItem: null,
|
activeItem: null,
|
||||||
};
|
};
|
||||||
// Then
|
// Then
|
||||||
$('div.graph-panel__chart').trigger('plothover', [eventArgs.pos, eventArgs.activeItem]);
|
act(() => {
|
||||||
|
$('div.graph-panel__chart').trigger('plothover', [eventArgs.pos, eventArgs.activeItem]);
|
||||||
|
});
|
||||||
const timestamp = screen.getByLabelText('Timestamp');
|
const timestamp = screen.getByLabelText('Timestamp');
|
||||||
|
|
||||||
const tableRows = screen.getAllByTestId('SeriesTableRow');
|
const tableRows = screen.getAllByTestId('SeriesTableRow');
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { render } from '@testing-library/react';
|
import { render, screen } from '@testing-library/react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { createTheme } from '@grafana/data';
|
import { createTheme } from '@grafana/data';
|
||||||
@ -29,7 +29,7 @@ describe('<QueryField />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('syntaxLoaded', () => {
|
describe('syntaxLoaded', () => {
|
||||||
it('should re-render the editor after syntax has fully loaded', () => {
|
it('should re-render the editor after syntax has fully loaded', async () => {
|
||||||
const mockOnRichValueChange = jest.fn();
|
const mockOnRichValueChange = jest.fn();
|
||||||
const { rerender } = render(
|
const { rerender } = render(
|
||||||
<UnThemedQueryField
|
<UnThemedQueryField
|
||||||
@ -49,9 +49,12 @@ describe('<QueryField />', () => {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
expect(mockOnRichValueChange).toHaveBeenCalled();
|
expect(mockOnRichValueChange).toHaveBeenCalled();
|
||||||
|
|
||||||
|
// wait for the query to appear to prevent act warnings
|
||||||
|
await screen.findByText('my query');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not re-render the editor if syntax is already loaded', () => {
|
it('should not re-render the editor if syntax is already loaded', async () => {
|
||||||
const mockOnRichValueChange = jest.fn();
|
const mockOnRichValueChange = jest.fn();
|
||||||
const { rerender } = render(
|
const { rerender } = render(
|
||||||
<UnThemedQueryField
|
<UnThemedQueryField
|
||||||
@ -72,9 +75,12 @@ describe('<QueryField />', () => {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
expect(mockOnRichValueChange).not.toBeCalled();
|
expect(mockOnRichValueChange).not.toBeCalled();
|
||||||
|
|
||||||
|
// wait for the query to appear to prevent act warnings
|
||||||
|
await screen.findByText('my query');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not re-render the editor twice once syntax is fully loaded', () => {
|
it('should not re-render the editor twice once syntax is fully loaded', async () => {
|
||||||
const mockOnRichValueChange = jest.fn();
|
const mockOnRichValueChange = jest.fn();
|
||||||
const { rerender } = render(
|
const { rerender } = render(
|
||||||
<UnThemedQueryField
|
<UnThemedQueryField
|
||||||
@ -103,6 +109,9 @@ describe('<QueryField />', () => {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
expect(mockOnRichValueChange).toBeCalledTimes(1);
|
expect(mockOnRichValueChange).toBeCalledTimes(1);
|
||||||
|
|
||||||
|
// wait for the query to appear to prevent act warnings
|
||||||
|
await screen.findByText('my query');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -113,7 +113,6 @@ export class UnThemedQueryField extends PureComponent<QueryFieldProps, QueryFiel
|
|||||||
|
|
||||||
componentDidUpdate(prevProps: QueryFieldProps, prevState: QueryFieldState) {
|
componentDidUpdate(prevProps: QueryFieldProps, prevState: QueryFieldState) {
|
||||||
const { query, syntax, syntaxLoaded } = this.props;
|
const { query, syntax, syntaxLoaded } = this.props;
|
||||||
|
|
||||||
if (!prevProps.syntaxLoaded && syntaxLoaded && this.editor) {
|
if (!prevProps.syntaxLoaded && syntaxLoaded && this.editor) {
|
||||||
// Need a bogus edit to re-render the editor after syntax has fully loaded
|
// Need a bogus edit to re-render the editor after syntax has fully loaded
|
||||||
const editor = this.editor.insertText(' ').deleteBackward(1);
|
const editor = this.editor.insertText(' ').deleteBackward(1);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { render, screen } from '@testing-library/react';
|
import { act, render, screen } from '@testing-library/react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
@ -26,7 +26,7 @@ const setup = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('Render', () => {
|
describe('NavBar', () => {
|
||||||
it('should render component', async () => {
|
it('should render component', async () => {
|
||||||
setup();
|
setup();
|
||||||
const sidemenu = await screen.findByTestId('sidemenu');
|
const sidemenu = await screen.findByTestId('sidemenu');
|
||||||
@ -36,7 +36,7 @@ describe('Render', () => {
|
|||||||
it('should not render when in kiosk mode is tv', async () => {
|
it('should not render when in kiosk mode is tv', async () => {
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
locationService.partial({ kiosk: 'tv' });
|
act(() => locationService.partial({ kiosk: 'tv' }));
|
||||||
const sidemenu = screen.queryByTestId('sidemenu');
|
const sidemenu = screen.queryByTestId('sidemenu');
|
||||||
expect(sidemenu).not.toBeInTheDocument();
|
expect(sidemenu).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
@ -44,7 +44,7 @@ describe('Render', () => {
|
|||||||
it('should not render when in kiosk mode is full', async () => {
|
it('should not render when in kiosk mode is full', async () => {
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
locationService.partial({ kiosk: '1' });
|
act(() => locationService.partial({ kiosk: '1' }));
|
||||||
const sidemenu = screen.queryByTestId('sidemenu');
|
const sidemenu = screen.queryByTestId('sidemenu');
|
||||||
expect(sidemenu).not.toBeInTheDocument();
|
expect(sidemenu).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
@ -508,9 +508,7 @@ describe('CorrelationsPage', () => {
|
|||||||
|
|
||||||
await userEvent.click(screen.getByRole('button', { name: /save$/i }));
|
await userEvent.click(screen.getByRole('button', { name: /save$/i }));
|
||||||
|
|
||||||
await waitFor(() => {
|
expect(await screen.findByRole('cell', { name: /edited label$/i })).toBeInTheDocument();
|
||||||
expect(screen.queryByRole('cell', { name: /edited label$/i })).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(mocks.reportInteraction).toHaveBeenLastCalledWith('grafana_correlations_edited');
|
expect(mocks.reportInteraction).toHaveBeenLastCalledWith('grafana_correlations_edited');
|
||||||
});
|
});
|
||||||
|
@ -94,7 +94,7 @@ describe('<EditDataSourcePage>', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render the edit page without an issue', () => {
|
it('should render the edit page without an issue', async () => {
|
||||||
setup(uid, store);
|
setup(uid, store);
|
||||||
|
|
||||||
expect(screen.queryByText('Loading ...')).not.toBeInTheDocument();
|
expect(screen.queryByText('Loading ...')).not.toBeInTheDocument();
|
||||||
@ -107,5 +107,8 @@ describe('<EditDataSourcePage>', () => {
|
|||||||
expect(screen.queryByRole('button', { name: /Delete/i })).toBeVisible();
|
expect(screen.queryByRole('button', { name: /Delete/i })).toBeVisible();
|
||||||
expect(screen.queryByRole('button', { name: /Save (.*) test/i })).toBeVisible();
|
expect(screen.queryByRole('button', { name: /Save (.*) test/i })).toBeVisible();
|
||||||
expect(screen.queryByText('Explore')).toBeVisible();
|
expect(screen.queryByText('Explore')).toBeVisible();
|
||||||
|
|
||||||
|
// wait for the rest of the async processes to finish
|
||||||
|
expect(await screen.findByText(name)).toBeVisible();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -125,14 +125,22 @@ const setup = (overrideProps?: Partial<Props>) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
describe('Explore', () => {
|
describe('Explore', () => {
|
||||||
it('should not render no data with not started loading state', () => {
|
it('should not render no data with not started loading state', async () => {
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
|
// Wait for the Explore component to render
|
||||||
|
await screen.findByText('Explore');
|
||||||
|
|
||||||
expect(screen.queryByTestId('explore-no-data')).not.toBeInTheDocument();
|
expect(screen.queryByTestId('explore-no-data')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render no data with done loading state', async () => {
|
it('should render no data with done loading state', async () => {
|
||||||
const queryResp = makeEmptyQueryResponse(LoadingState.Done);
|
const queryResp = makeEmptyQueryResponse(LoadingState.Done);
|
||||||
setup({ queryResponse: queryResp });
|
setup({ queryResponse: queryResp });
|
||||||
|
|
||||||
|
// Wait for the Explore component to render
|
||||||
|
await screen.findByText('Explore');
|
||||||
|
|
||||||
expect(screen.getByTestId('explore-no-data')).toBeInTheDocument();
|
expect(screen.getByTestId('explore-no-data')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -106,14 +106,13 @@ describe('MetricsQueryEditor', () => {
|
|||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'web-server' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'web-server' });
|
||||||
expect(resourcePickerButton).toBeInTheDocument();
|
expect(resourcePickerButton).toBeInTheDocument();
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(async () => {
|
||||||
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();
|
expect(screen.queryByText('Loading...')).not.toBeInTheDocument();
|
||||||
|
const selection = await screen.findAllByLabelText('web-server');
|
||||||
|
expect(selection).toHaveLength(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
const selection = await screen.findAllByLabelText('web-server');
|
|
||||||
expect(selection).toHaveLength(2);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should change resource when a resource is selected in the ResourcePicker', async () => {
|
it('should change resource when a resource is selected in the ResourcePicker', async () => {
|
||||||
@ -138,17 +137,17 @@ describe('MetricsQueryEditor', () => {
|
|||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
expect(resourcePickerButton).toBeInTheDocument();
|
expect(resourcePickerButton).toBeInTheDocument();
|
||||||
expect(screen.queryByRole('button', { name: 'Expand Primary Subscription' })).not.toBeInTheDocument();
|
expect(screen.queryByRole('button', { name: 'Expand Primary Subscription' })).not.toBeInTheDocument();
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
||||||
expect(subscriptionButton).toBeInTheDocument();
|
expect(subscriptionButton).toBeInTheDocument();
|
||||||
expect(screen.queryByRole('button', { name: 'Expand A Great Resource Group' })).not.toBeInTheDocument();
|
expect(screen.queryByRole('button', { name: 'Expand A Great Resource Group' })).not.toBeInTheDocument();
|
||||||
subscriptionButton.click();
|
await userEvent.click(subscriptionButton);
|
||||||
|
|
||||||
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
||||||
expect(resourceGroupButton).toBeInTheDocument();
|
expect(resourceGroupButton).toBeInTheDocument();
|
||||||
expect(screen.queryByLabelText('web-server')).not.toBeInTheDocument();
|
expect(screen.queryByLabelText('web-server')).not.toBeInTheDocument();
|
||||||
resourceGroupButton.click();
|
await userEvent.click(resourceGroupButton);
|
||||||
|
|
||||||
const checkbox = await screen.findByLabelText('web-server');
|
const checkbox = await screen.findByLabelText('web-server');
|
||||||
expect(checkbox).toBeInTheDocument();
|
expect(checkbox).toBeInTheDocument();
|
||||||
@ -194,13 +193,13 @@ describe('MetricsQueryEditor', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
||||||
subscriptionButton.click();
|
await userEvent.click(subscriptionButton);
|
||||||
|
|
||||||
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
||||||
resourceGroupButton.click();
|
await userEvent.click(resourceGroupButton);
|
||||||
|
|
||||||
const checkbox = await screen.findByLabelText('web-server');
|
const checkbox = await screen.findByLabelText('web-server');
|
||||||
await userEvent.click(checkbox);
|
await userEvent.click(checkbox);
|
||||||
@ -253,13 +252,13 @@ describe('MetricsQueryEditor', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
||||||
subscriptionButton.click();
|
await userEvent.click(subscriptionButton);
|
||||||
|
|
||||||
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
||||||
resourceGroupButton.click();
|
await userEvent.click(resourceGroupButton);
|
||||||
|
|
||||||
const checkbox = await screen.findByLabelText('web-server');
|
const checkbox = await screen.findByLabelText('web-server');
|
||||||
await userEvent.click(checkbox);
|
await userEvent.click(checkbox);
|
||||||
@ -288,13 +287,13 @@ describe('MetricsQueryEditor', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
||||||
subscriptionButton.click();
|
await userEvent.click(subscriptionButton);
|
||||||
|
|
||||||
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
||||||
resourceGroupButton.click();
|
await userEvent.click(resourceGroupButton);
|
||||||
|
|
||||||
const checkbox = await screen.findByLabelText('web-server');
|
const checkbox = await screen.findByLabelText('web-server');
|
||||||
await userEvent.click(checkbox);
|
await userEvent.click(checkbox);
|
||||||
@ -397,20 +396,20 @@ describe('MetricsQueryEditor', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' });
|
||||||
subscriptionButton.click();
|
await userEvent.click(subscriptionButton);
|
||||||
|
|
||||||
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' });
|
||||||
resourceGroupButton.click();
|
await userEvent.click(resourceGroupButton);
|
||||||
|
|
||||||
const checkbox = await screen.findByLabelText('web-server');
|
const checkbox = await screen.findByLabelText('web-server');
|
||||||
await userEvent.click(checkbox);
|
await userEvent.click(checkbox);
|
||||||
expect(checkbox).toBeChecked();
|
expect(checkbox).toBeChecked();
|
||||||
|
|
||||||
const advancedSection = screen.getByText('Advanced');
|
const advancedSection = screen.getByText('Advanced');
|
||||||
advancedSection.click();
|
await userEvent.click(advancedSection);
|
||||||
|
|
||||||
const advancedInput = await screen.findByLabelText('Subscription');
|
const advancedInput = await screen.findByLabelText('Subscription');
|
||||||
await userEvent.type(advancedInput, 'def-123');
|
await userEvent.type(advancedInput, 'def-123');
|
||||||
@ -443,10 +442,10 @@ describe('MetricsQueryEditor', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' });
|
||||||
resourcePickerButton.click();
|
await userEvent.click(resourcePickerButton);
|
||||||
|
|
||||||
const advancedSection = screen.getByText('Advanced');
|
const advancedSection = screen.getByText('Advanced');
|
||||||
advancedSection.click();
|
await userEvent.click(advancedSection);
|
||||||
|
|
||||||
const advancedInput = await screen.findByLabelText('Subscription');
|
const advancedInput = await screen.findByLabelText('Subscription');
|
||||||
await userEvent.type(advancedInput, 'def-123');
|
await userEvent.type(advancedInput, 'def-123');
|
||||||
@ -458,7 +457,7 @@ describe('MetricsQueryEditor', () => {
|
|||||||
await userEvent.type(rnInput, 'rn');
|
await userEvent.type(rnInput, 'rn');
|
||||||
|
|
||||||
const applyButton = screen.getByRole('button', { name: 'Apply' });
|
const applyButton = screen.getByRole('button', { name: 'Apply' });
|
||||||
applyButton.click();
|
await userEvent.click(applyButton);
|
||||||
|
|
||||||
expect(onChange).toBeCalledTimes(1);
|
expect(onChange).toBeCalledTimes(1);
|
||||||
expect(onChange).toBeCalledWith(
|
expect(onChange).toBeCalledWith(
|
||||||
|
@ -24,6 +24,14 @@ const getOptionsV1 = jest.fn().mockImplementation(() => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Have to mock CodeEditor else it causes act warnings
|
||||||
|
jest.mock('@grafana/ui', () => ({
|
||||||
|
...jest.requireActual('@grafana/ui'),
|
||||||
|
CodeEditor: function CodeEditor({ value, onSave }: { value: string; onSave: (newQuery: string) => void }) {
|
||||||
|
return <input data-testid="mockeditor" value={value} onChange={(event) => onSave(event.target.value)} />;
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
jest.mock('../language_provider', () => {
|
jest.mock('../language_provider', () => {
|
||||||
return jest.fn().mockImplementation(() => {
|
return jest.fn().mockImplementation(() => {
|
||||||
return { getOptionsV1 };
|
return { getOptionsV1 };
|
||||||
|
Loading…
Reference in New Issue
Block a user