aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx
diff options
context:
space:
mode:
authorMathieu Suen <mathieu.suen@sonarsource.com>2022-02-21 14:27:12 +0100
committersonartech <sonartech@sonarsource.com>2022-03-07 20:02:55 +0000
commitd8530e0208081d06def14e861d3aa7bd5965d797 (patch)
tree7876cd7f4993bb28d86c399d3f93698c97b446e4 /server/sonar-web/src/main/js/helpers/testReactTestingUtils.tsx
parentb90268c5cd663d677a4f0254c919e34cba67de5a (diff)
downloadsonarqube-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.tsx70
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>
+ );
+}