[Cases] Enhancement: Add createAppMockRenderer method for easier unit testing (#123595)

This commit is contained in:
Esteban Beltran 2022-01-25 20:38:32 +01:00 committed by GitHub
parent 57d507c121
commit c3866c4032
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,11 +10,17 @@ import { euiDarkVars } from '@kbn/ui-theme';
import { I18nProvider } from '@kbn/i18n-react';
import { ThemeProvider } from 'styled-components';
import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react';
import { KibanaContextProvider } from 'src/plugins/kibana_react/public';
import { SECURITY_SOLUTION_OWNER } from '../../../common/constants';
import { CasesFeatures } from '../../../common/ui/types';
import { CasesProvider } from '../../components/cases_context';
import { createKibanaContextProviderMock } from '../lib/kibana/kibana_react.mock';
import {
createKibanaContextProviderMock,
createStartServicesMock,
} from '../lib/kibana/kibana_react.mock';
import { FieldHook } from '../shared_imports';
import { StartServices } from '../../types';
interface Props {
children: React.ReactNode;
@ -22,6 +28,7 @@ interface Props {
features?: CasesFeatures;
owner?: string[];
}
type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult;
window.scrollTo = jest.fn();
const MockKibanaContextProvider = createKibanaContextProviderMock();
@ -47,6 +54,43 @@ TestProvidersComponent.displayName = 'TestProviders';
export const TestProviders = React.memo(TestProvidersComponent);
export interface AppMockRenderer {
render: UiRender;
coreStart: StartServices;
}
export const createAppMockRenderer = ({
features,
owner = [SECURITY_SOLUTION_OWNER],
userCanCrud = true,
}: {
features?: CasesFeatures;
owner?: string[];
userCanCrud?: boolean;
} = {}): AppMockRenderer => {
const services = createStartServicesMock();
const AppWrapper: React.FC<{ children: React.ReactElement }> = ({ children }) => (
<I18nProvider>
<KibanaContextProvider services={services}>
<ThemeProvider theme={() => ({ eui: euiDarkVars, darkMode: true })}>
<CasesProvider value={{ features, owner, userCanCrud }}>{children}</CasesProvider>
</ThemeProvider>
</KibanaContextProvider>
</I18nProvider>
);
const render: UiRender = (ui, options) => {
return reactRender(ui, {
wrapper: AppWrapper as React.ComponentType,
...options,
});
};
return {
coreStart: services,
render,
};
};
export const useFormFieldMock = <T,>(options?: Partial<FieldHook<T>>): FieldHook<T> => ({
path: 'path',
type: 'type',