diff options
author | Mathieu Suen <mathieu.suen@sonarsource.com> | 2022-02-21 14:27:12 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2022-03-07 20:02:55 +0000 |
commit | d8530e0208081d06def14e861d3aa7bd5965d797 (patch) | |
tree | 7876cd7f4993bb28d86c399d3f93698c97b446e4 /server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx | |
parent | b90268c5cd663d677a4f0254c919e34cba67de5a (diff) | |
download | sonarqube-d8530e0208081d06def14e861d3aa7bd5965d797.tar.gz sonarqube-d8530e0208081d06def14e861d3aa7bd5965d797.zip |
[NO JIRA] Setup react testing library
Diffstat (limited to 'server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx')
-rw-r--r-- | server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx b/server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx new file mode 100644 index 00000000000..fbc4f8ace63 --- /dev/null +++ b/server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx @@ -0,0 +1,70 @@ +/* + * SonarQube + * Copyright (C) 2009-2022 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +import { render, RenderResult } from '@testing-library/react'; +import { History } from 'history'; +import * as React from 'react'; +import { HelmetProvider } from 'react-helmet-async'; +import { IntlProvider } from 'react-intl'; +import { Provider } from 'react-redux'; +import { createMemoryHistory, RouteConfig, Router } from 'react-router'; +import { Store } from 'redux'; +import AppStateContextProvider from '../app/components/app-state/AppStateContextProvider'; +import { MetricsContext } from '../app/components/metrics/MetricsContext'; +import getStore from '../app/utils/getStore'; +import { RouteWithChildRoutes } from '../app/utils/startReactApp'; +import { Store as State } from '../store/rootReducer'; +import { AppState, Dict, Metric } from '../types/types'; +import { DEFAULT_METRICS } from './mocks/metrics'; +import { mockAppState } from './testMocks'; + +interface RenderContext { + metrics?: Dict<Metric>; + store?: Store<State, any>; + history?: History; + appState?: AppState; +} + +export function renderApp( + indexPath: string, + routes: RouteConfig, + { + metrics = DEFAULT_METRICS, + store = getStore(), + appState = mockAppState(), + history = createMemoryHistory() + }: RenderContext = {} +): RenderResult { + history.push(`/${indexPath}`); + return render( + <HelmetProvider context={{}}> + <IntlProvider defaultLocale="en" locale="en"> + <MetricsContext.Provider value={metrics}> + <Provider store={store}> + <AppStateContextProvider appState={appState}> + <Router history={history}> + <RouteWithChildRoutes path={indexPath} childRoutes={routes} /> + </Router> + </AppStateContextProvider> + </Provider> + </MetricsContext.Provider> + </IntlProvider> + </HelmetProvider> + ); +} |