mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Routing: Import useLocation from compat package (#92071)
* Routing: Import useLocation from compat package * Add ComparRouter * Add CompatRouter * Fix tests * Add CompatRouter to TestProvider * Use findBy * Remove AppChromeService * Remove historyOptions * Routing: Fix alerting/test utils issues from react compat router usage (#92127) * Use render from test-utils * Use compat router * Convert more tests --------- Co-authored-by: Tom Ratcliffe <tom.ratcliffe@grafana.com>
This commit is contained in:
parent
d24b21d3ef
commit
0af4a20b58
@ -1,7 +1,7 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { DOMAttributes } from '@react-types/shared';
|
import { DOMAttributes } from '@react-types/shared';
|
||||||
import { memo, forwardRef, useCallback } from 'react';
|
import { memo, forwardRef, useCallback } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
||||||
import { selectors } from '@grafana/e2e-selectors';
|
import { selectors } from '@grafana/e2e-selectors';
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { css, cx } from '@emotion/css';
|
import { css, cx } from '@emotion/css';
|
||||||
import { useEffect, useRef } from 'react';
|
import { useEffect, useRef } from 'react';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import { useLocalStorage } from 'react-use';
|
import { useLocalStorage } from 'react-use';
|
||||||
|
|
||||||
import { GrafanaTheme2, NavModelItem, toIconName } from '@grafana/data';
|
import { GrafanaTheme2, NavModelItem, toIconName } from '@grafana/data';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, locationUtil, textUtil } from '@grafana/data';
|
import { GrafanaTheme2, locationUtil, textUtil } from '@grafana/data';
|
||||||
import { useStyles2 } from '@grafana/ui';
|
import { useStyles2 } from '@grafana/ui';
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { cloneDeep } from 'lodash';
|
import { cloneDeep } from 'lodash';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, locationUtil, textUtil } from '@grafana/data';
|
import { GrafanaTheme2, locationUtil, textUtil } from '@grafana/data';
|
||||||
import { Dropdown, ToolbarButton, useStyles2 } from '@grafana/ui';
|
import { Dropdown, ToolbarButton, useStyles2 } from '@grafana/ui';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { UrlQueryMap } from '@grafana/data';
|
import { UrlQueryMap } from '@grafana/data';
|
||||||
import { locationSearchToObject, locationService } from '@grafana/runtime';
|
import { locationSearchToObject, locationService } from '@grafana/runtime';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { ErrorInfo, useEffect } from 'react';
|
import { ErrorInfo, useEffect } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, locationUtil, PageLayoutType } from '@grafana/data';
|
import { GrafanaTheme2, locationUtil, PageLayoutType } from '@grafana/data';
|
||||||
import { Button, ErrorWithStack, useStyles2 } from '@grafana/ui';
|
import { Button, ErrorWithStack, useStyles2 } from '@grafana/ui';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import { render, renderHook, screen, within } from '@testing-library/react';
|
|||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { first, noop } from 'lodash';
|
import { first, noop } from 'lodash';
|
||||||
import { Router } from 'react-router-dom';
|
import { Router } from 'react-router-dom';
|
||||||
|
import { CompatRouter } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { config, locationService } from '@grafana/runtime';
|
import { config, locationService } from '@grafana/runtime';
|
||||||
import { contextSrv } from 'app/core/core';
|
import { contextSrv } from 'app/core/core';
|
||||||
@ -347,7 +348,9 @@ describe('Policy', () => {
|
|||||||
const renderPolicy = (element: JSX.Element) =>
|
const renderPolicy = (element: JSX.Element) =>
|
||||||
render(
|
render(
|
||||||
<Router history={locationService.getHistory()}>
|
<Router history={locationService.getHistory()}>
|
||||||
<AlertmanagerProvider accessType="notification">{element}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="notification">{element}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { render, screen } from '@testing-library/react';
|
import { screen } from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
|
import { render } from 'test/test-utils';
|
||||||
|
|
||||||
import { PanelModel } from 'app/features/dashboard/state';
|
import { PanelModel } from 'app/features/dashboard/state';
|
||||||
import { createDashboardModelFixture } from 'app/features/dashboard/state/__fixtures__/dashboardFixtures';
|
import { createDashboardModelFixture } from 'app/features/dashboard/state/__fixtures__/dashboardFixtures';
|
||||||
@ -16,12 +17,6 @@ jest.mock('app/types', () => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.mock('react-router-dom', () => ({
|
|
||||||
useLocation: () => ({
|
|
||||||
pathname: 'localhost:3000/example/path',
|
|
||||||
}),
|
|
||||||
}));
|
|
||||||
|
|
||||||
jest.spyOn(analytics, 'logInfo');
|
jest.spyOn(analytics, 'logInfo');
|
||||||
|
|
||||||
jest.mock('react-use', () => ({
|
jest.mock('react-use', () => ({
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import { useAsync } from 'react-use';
|
import { useAsync } from 'react-use';
|
||||||
|
|
||||||
import { urlUtil } from '@grafana/data';
|
import { urlUtil } from '@grafana/data';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import { useAsyncFn, useInterval } from 'react-use';
|
import { useAsyncFn, useInterval } from 'react-use';
|
||||||
|
|
||||||
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import { useAsyncFn, useInterval, useMeasure } from 'react-use';
|
import { useAsyncFn, useInterval, useMeasure } from 'react-use';
|
||||||
|
|
||||||
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import pluralize from 'pluralize';
|
import pluralize from 'pluralize';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
import { GrafanaTheme2, urlUtil } from '@grafana/data';
|
||||||
import { LinkButton, LoadingPlaceholder, Pagination, Spinner, Text, useStyles2 } from '@grafana/ui';
|
import { LinkButton, LoadingPlaceholder, Pagination, Spinner, Text, useStyles2 } from '@grafana/ui';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css, cx } from '@emotion/css';
|
import { css, cx } from '@emotion/css';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2 } from '@grafana/data';
|
import { GrafanaTheme2 } from '@grafana/data';
|
||||||
import { LinkButton, Stack, useStyles2 } from '@grafana/ui';
|
import { LinkButton, Stack, useStyles2 } from '@grafana/ui';
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
import { render, waitFor } from '@testing-library/react';
|
import { waitFor } from '@testing-library/react';
|
||||||
import { Provider } from 'react-redux';
|
import { render } from 'test/test-utils';
|
||||||
import { Router } from 'react-router-dom';
|
|
||||||
import { byRole } from 'testing-library-selector';
|
import { byRole } from 'testing-library-selector';
|
||||||
|
|
||||||
import { locationService, setPluginExtensionsHook } from '@grafana/runtime';
|
import { setPluginExtensionsHook } from '@grafana/runtime';
|
||||||
import { contextSrv } from 'app/core/services/context_srv';
|
import { contextSrv } from 'app/core/services/context_srv';
|
||||||
import { configureStore } from 'app/store/configureStore';
|
|
||||||
import { AccessControlAction } from 'app/types';
|
import { AccessControlAction } from 'app/types';
|
||||||
import { CombinedRuleNamespace } from 'app/types/unified-alerting';
|
import { CombinedRuleNamespace } from 'app/types/unified-alerting';
|
||||||
|
|
||||||
@ -101,15 +99,7 @@ describe('RuleListGroupView', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function renderRuleList(namespaces: CombinedRuleNamespace[]) {
|
function renderRuleList(namespaces: CombinedRuleNamespace[]) {
|
||||||
const store = configureStore();
|
render(<RuleListGroupView namespaces={namespaces} expandAll />);
|
||||||
|
|
||||||
render(
|
|
||||||
<Provider store={store}>
|
|
||||||
<Router history={locationService.getHistory()}>
|
|
||||||
<RuleListGroupView namespaces={namespaces} expandAll />
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGrafanaNamespace(): CombinedRuleNamespace {
|
function getGrafanaNamespace(): CombinedRuleNamespace {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import { renderHook } from '@testing-library/react';
|
|||||||
import { createMemoryHistory } from 'history';
|
import { createMemoryHistory } from 'history';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { MemoryRouter, Router } from 'react-router-dom';
|
import { MemoryRouter, Router } from 'react-router-dom';
|
||||||
|
import { CompatRouter } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import store from 'app/core/store';
|
import store from 'app/core/store';
|
||||||
import { AlertManagerImplementation } from 'app/plugins/datasource/alertmanager/types';
|
import { AlertManagerImplementation } from 'app/plugins/datasource/alertmanager/types';
|
||||||
@ -34,7 +35,9 @@ describe('useAlertmanager', () => {
|
|||||||
.mockReturnValueOnce({ availableExternalDataSources: [], availableInternalDataSources: [] });
|
.mockReturnValueOnce({ availableExternalDataSources: [], availableInternalDataSources: [] });
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<MemoryRouter>
|
<MemoryRouter>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</MemoryRouter>
|
</MemoryRouter>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -50,7 +53,9 @@ describe('useAlertmanager', () => {
|
|||||||
|
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<MemoryRouter>
|
<MemoryRouter>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</MemoryRouter>
|
</MemoryRouter>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -68,7 +73,9 @@ describe('useAlertmanager', () => {
|
|||||||
|
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<Router history={history}>
|
<Router history={history}>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -86,7 +93,9 @@ describe('useAlertmanager', () => {
|
|||||||
|
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<Router history={history}>
|
<Router history={history}>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -101,7 +110,9 @@ describe('useAlertmanager', () => {
|
|||||||
|
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<MemoryRouter>
|
<MemoryRouter>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</MemoryRouter>
|
</MemoryRouter>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -122,7 +133,9 @@ describe('useAlertmanager', () => {
|
|||||||
|
|
||||||
const wrapper = ({ children }: React.PropsWithChildren) => (
|
const wrapper = ({ children }: React.PropsWithChildren) => (
|
||||||
<Router history={history}>
|
<Router history={history}>
|
||||||
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
<CompatRouter>
|
||||||
|
<AlertmanagerProvider accessType="instance">{children}</AlertmanagerProvider>
|
||||||
|
</CompatRouter>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { memo, useEffect, useMemo } from 'react';
|
import { memo, useEffect, useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import AutoSizer from 'react-virtualized-auto-sizer';
|
import AutoSizer from 'react-virtualized-auto-sizer';
|
||||||
|
|
||||||
import { GrafanaTheme2 } from '@grafana/data';
|
import { GrafanaTheme2 } from '@grafana/data';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { config, reportInteraction } from '@grafana/runtime';
|
import { config, reportInteraction } from '@grafana/runtime';
|
||||||
import { Button, Drawer, Dropdown, Icon, Menu, MenuItem } from '@grafana/ui';
|
import { Button, Drawer, Dropdown, Icon, Menu, MenuItem } from '@grafana/ui';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { locationUtil } from '@grafana/data';
|
import { locationUtil } from '@grafana/data';
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
import { useAsync } from 'react-use';
|
import { useAsync } from 'react-use';
|
||||||
|
|
||||||
import { urlUtil } from '@grafana/data';
|
import { urlUtil } from '@grafana/data';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { act, fireEvent, render, screen } from '@testing-library/react';
|
import { act, fireEvent, screen } from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
|
import { render } from 'test/test-utils';
|
||||||
|
|
||||||
import { standardEditorsRegistry, standardFieldConfigEditorRegistry } from '@grafana/data';
|
import { standardEditorsRegistry, standardFieldConfigEditorRegistry } from '@grafana/data';
|
||||||
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
|
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
|
||||||
@ -21,12 +22,6 @@ import { VizPanelManager } from './VizPanelManager';
|
|||||||
|
|
||||||
const OptionsPaneSelector = selectors.components.PanelEditor.OptionsPane;
|
const OptionsPaneSelector = selectors.components.PanelEditor.OptionsPane;
|
||||||
|
|
||||||
jest.mock('react-router-dom', () => ({
|
|
||||||
useLocation: () => ({
|
|
||||||
pathname: '',
|
|
||||||
}),
|
|
||||||
}));
|
|
||||||
|
|
||||||
standardEditorsRegistry.setInit(getAllOptionEditors);
|
standardEditorsRegistry.setInit(getAllOptionEditors);
|
||||||
standardFieldConfigEditorRegistry.setInit(getAllStandardFieldConfigs);
|
standardFieldConfigEditorRegistry.setInit(getAllStandardFieldConfigs);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css, cx } from '@emotion/css';
|
import { css, cx } from '@emotion/css';
|
||||||
import { useEffect, useMemo } from 'react';
|
import { useEffect, useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, PageLayoutType } from '@grafana/data';
|
import { GrafanaTheme2, PageLayoutType } from '@grafana/data';
|
||||||
import { useChromeHeaderHeight } from '@grafana/runtime';
|
import { useChromeHeaderHeight } from '@grafana/runtime';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { locationUtil, NavModelItem } from '@grafana/data';
|
import { locationUtil, NavModelItem } from '@grafana/data';
|
||||||
import { SceneObject, SceneObjectState } from '@grafana/scenes';
|
import { SceneObject, SceneObjectState } from '@grafana/scenes';
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { memo, ReactNode } from 'react';
|
import { memo, ReactNode } from 'react';
|
||||||
import { connect, ConnectedProps } from 'react-redux';
|
import { connect, ConnectedProps } from 'react-redux';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { textUtil } from '@grafana/data';
|
import { textUtil } from '@grafana/data';
|
||||||
import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';
|
import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import * as H from 'history';
|
import * as H from 'history';
|
||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { locationUtil, NavModel, NavModelItem } from '@grafana/data';
|
import { locationUtil, NavModel, NavModelItem } from '@grafana/data';
|
||||||
import { selectors } from '@grafana/e2e-selectors';
|
import { selectors } from '@grafana/e2e-selectors';
|
||||||
|
@ -1,20 +1,13 @@
|
|||||||
import { render, screen, within } from '@testing-library/react';
|
import { screen, within } from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { Provider } from 'react-redux';
|
import { render } from 'test/test-utils';
|
||||||
import { Router } from 'react-router-dom';
|
|
||||||
import { getGrafanaContextMock } from 'test/mocks/getGrafanaContextMock';
|
|
||||||
|
|
||||||
import { locationService } from '@grafana/runtime';
|
|
||||||
import { GrafanaContext } from 'app/core/context/GrafanaContext';
|
|
||||||
|
|
||||||
import { configureStore } from '../../../../store/configureStore';
|
|
||||||
import { DashboardModel } from '../../state';
|
import { DashboardModel } from '../../state';
|
||||||
import { createDashboardModelFixture } from '../../state/__fixtures__/dashboardFixtures';
|
import { createDashboardModelFixture } from '../../state/__fixtures__/dashboardFixtures';
|
||||||
|
|
||||||
import { DashboardSettings } from './DashboardSettings';
|
import { DashboardSettings } from './DashboardSettings';
|
||||||
|
|
||||||
function setup(dashboard: DashboardModel) {
|
function setup(dashboard: DashboardModel) {
|
||||||
const store = configureStore();
|
|
||||||
const sectionNav = {
|
const sectionNav = {
|
||||||
main: { text: 'Dashboard' },
|
main: { text: 'Dashboard' },
|
||||||
node: {
|
node: {
|
||||||
@ -24,13 +17,7 @@ function setup(dashboard: DashboardModel) {
|
|||||||
|
|
||||||
// Need to use DashboardSettings here as it's responsible for fetching the state back from location
|
// Need to use DashboardSettings here as it's responsible for fetching the state back from location
|
||||||
return render(
|
return render(
|
||||||
<GrafanaContext.Provider value={getGrafanaContextMock()}>
|
<DashboardSettings editview="links" dashboard={dashboard} sectionNav={sectionNav} pageNav={sectionNav.node} />
|
||||||
<Provider store={store}>
|
|
||||||
<Router history={locationService.getHistory()}>
|
|
||||||
<DashboardSettings editview="links" dashboard={dashboard} sectionNav={sectionNav} pageNav={sectionNav.node} />
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
</GrafanaContext.Provider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { connect, MapStateToProps } from 'react-redux';
|
import { connect, MapStateToProps } from 'react-redux';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { PanelPlugin } from '@grafana/data';
|
import { PanelPlugin } from '@grafana/data';
|
||||||
import { locationService } from '@grafana/runtime';
|
import { locationService } from '@grafana/runtime';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { fireEvent, render, screen, within } from '@testing-library/react';
|
import { fireEvent, screen, within } from '@testing-library/react';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import configureMockStore from 'redux-mock-store';
|
import configureMockStore from 'redux-mock-store';
|
||||||
|
import { render } from 'test/test-utils';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
FieldConfigSource,
|
FieldConfigSource,
|
||||||
|
@ -1,26 +1,22 @@
|
|||||||
import { render, screen, waitFor } from '@testing-library/react';
|
import { screen, waitFor } from '@testing-library/react';
|
||||||
import { KBarProvider } from 'kbar';
|
import { KBarProvider } from 'kbar';
|
||||||
import { Component } from 'react';
|
import { Component } from 'react';
|
||||||
import { Provider } from 'react-redux';
|
import { match } from 'react-router-dom';
|
||||||
import { match, Router } from 'react-router-dom';
|
|
||||||
import { useEffectOnce } from 'react-use';
|
import { useEffectOnce } from 'react-use';
|
||||||
import { mockToolkitActionCreator } from 'test/core/redux/mocks';
|
import { mockToolkitActionCreator } from 'test/core/redux/mocks';
|
||||||
import { TestProvider } from 'test/helpers/TestProvider';
|
import { render } from 'test/test-utils';
|
||||||
import { getGrafanaContextMock } from 'test/mocks/getGrafanaContextMock';
|
|
||||||
|
|
||||||
import { createTheme } from '@grafana/data';
|
import { createTheme } from '@grafana/data';
|
||||||
import { selectors } from '@grafana/e2e-selectors';
|
import { selectors } from '@grafana/e2e-selectors';
|
||||||
import { config, locationService, setDataSourceSrv } from '@grafana/runtime';
|
import { config, setDataSourceSrv } from '@grafana/runtime';
|
||||||
import { Dashboard } from '@grafana/schema';
|
import { Dashboard } from '@grafana/schema';
|
||||||
import { notifyApp } from 'app/core/actions';
|
import { notifyApp } from 'app/core/actions';
|
||||||
import { AppChrome } from 'app/core/components/AppChrome/AppChrome';
|
import { AppChrome } from 'app/core/components/AppChrome/AppChrome';
|
||||||
import { GrafanaContext } from 'app/core/context/GrafanaContext';
|
|
||||||
import { getRouteComponentProps } from 'app/core/navigation/__mocks__/routeProps';
|
import { getRouteComponentProps } from 'app/core/navigation/__mocks__/routeProps';
|
||||||
import { RouteDescriptor } from 'app/core/navigation/types';
|
import { RouteDescriptor } from 'app/core/navigation/types';
|
||||||
import { HOME_NAV_ID } from 'app/core/reducers/navModel';
|
import { HOME_NAV_ID } from 'app/core/reducers/navModel';
|
||||||
import { DashboardInitPhase, DashboardMeta, DashboardRoutes } from 'app/types';
|
import { DashboardInitPhase, DashboardMeta, DashboardRoutes } from 'app/types';
|
||||||
|
|
||||||
import { configureStore } from '../../../store/configureStore';
|
|
||||||
import { Props as LazyLoaderProps } from '../dashgrid/LazyLoader';
|
import { Props as LazyLoaderProps } from '../dashgrid/LazyLoader';
|
||||||
import { DashboardSrv, setDashboardSrv } from '../services/DashboardSrv';
|
import { DashboardSrv, setDashboardSrv } from '../services/DashboardSrv';
|
||||||
import { DashboardModel } from '../state';
|
import { DashboardModel } from '../state';
|
||||||
@ -103,7 +99,6 @@ function setup(propOverrides?: Partial<Props>) {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const store = configureStore();
|
|
||||||
const props: Props = {
|
const props: Props = {
|
||||||
...getRouteComponentProps({
|
...getRouteComponentProps({
|
||||||
match: { params: { slug: 'my-dash', uid: '11' } } as unknown as match,
|
match: { params: { slug: 'my-dash', uid: '11' } } as unknown as match,
|
||||||
@ -130,29 +125,11 @@ function setup(propOverrides?: Partial<Props>) {
|
|||||||
|
|
||||||
Object.assign(props, propOverrides);
|
Object.assign(props, propOverrides);
|
||||||
|
|
||||||
const context = getGrafanaContextMock();
|
const { unmount, rerender } = render(<UnthemedDashboardPage {...props} />);
|
||||||
|
|
||||||
const { unmount, rerender } = render(
|
|
||||||
<GrafanaContext.Provider value={context}>
|
|
||||||
<Provider store={store}>
|
|
||||||
<Router history={locationService.getHistory()}>
|
|
||||||
<UnthemedDashboardPage {...props} />
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
</GrafanaContext.Provider>
|
|
||||||
);
|
|
||||||
|
|
||||||
const wrappedRerender = (newProps: Partial<Props>) => {
|
const wrappedRerender = (newProps: Partial<Props>) => {
|
||||||
Object.assign(props, newProps);
|
Object.assign(props, newProps);
|
||||||
return rerender(
|
return rerender(<UnthemedDashboardPage {...props} />);
|
||||||
<GrafanaContext.Provider value={context}>
|
|
||||||
<Provider store={store}>
|
|
||||||
<Router history={locationService.getHistory()}>
|
|
||||||
<UnthemedDashboardPage {...props} />
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
</GrafanaContext.Provider>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return { rerender: wrappedRerender, unmount };
|
return { rerender: wrappedRerender, unmount };
|
||||||
@ -190,7 +167,7 @@ describe('DashboardPage', () => {
|
|||||||
it('only calls initDashboard once when wrapped in AppChrome', async () => {
|
it('only calls initDashboard once when wrapped in AppChrome', async () => {
|
||||||
const props: Props = {
|
const props: Props = {
|
||||||
...getRouteComponentProps({
|
...getRouteComponentProps({
|
||||||
match: { params: { slug: 'my-dash', uid: '11' } } as unknown as match,
|
match: { params: { slug: 'my-dash', uid: '11' }, isExact: true, path: '', url: '' },
|
||||||
route: { routeName: DashboardRoutes.Normal } as RouteDescriptor,
|
route: { routeName: DashboardRoutes.Normal } as RouteDescriptor,
|
||||||
}),
|
}),
|
||||||
navIndex: {
|
navIndex: {
|
||||||
@ -214,11 +191,9 @@ describe('DashboardPage', () => {
|
|||||||
|
|
||||||
render(
|
render(
|
||||||
<KBarProvider>
|
<KBarProvider>
|
||||||
<TestProvider>
|
<AppChrome>
|
||||||
<AppChrome>
|
<UnthemedDashboardPage {...props} />
|
||||||
<UnthemedDashboardPage {...props} />
|
</AppChrome>
|
||||||
</AppChrome>
|
|
||||||
</TestProvider>
|
|
||||||
</KBarProvider>
|
</KBarProvider>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
import { act, render, screen, waitFor } from '@testing-library/react';
|
import { act, screen, waitFor } from '@testing-library/react';
|
||||||
import { Provider } from 'react-redux';
|
|
||||||
import { Router } from 'react-router-dom';
|
|
||||||
import { Props } from 'react-virtualized-auto-sizer';
|
import { Props } from 'react-virtualized-auto-sizer';
|
||||||
import { getGrafanaContextMock } from 'test/mocks/getGrafanaContextMock';
|
import { render } from 'test/test-utils';
|
||||||
|
|
||||||
import { config, locationService } from '@grafana/runtime';
|
import { config, locationService } from '@grafana/runtime';
|
||||||
import { GrafanaContext } from 'app/core/context/GrafanaContext';
|
|
||||||
import {
|
import {
|
||||||
HOME_DASHBOARD_CACHE_KEY,
|
HOME_DASHBOARD_CACHE_KEY,
|
||||||
getDashboardScenePageStateManager,
|
getDashboardScenePageStateManager,
|
||||||
} from 'app/features/dashboard-scene/pages/DashboardScenePageStateManager';
|
} from 'app/features/dashboard-scene/pages/DashboardScenePageStateManager';
|
||||||
import { configureStore } from 'app/store/configureStore';
|
|
||||||
import { DashboardDTO, DashboardRoutes } from 'app/types';
|
import { DashboardDTO, DashboardRoutes } from 'app/types';
|
||||||
|
|
||||||
import DashboardPageProxy, { DashboardPageProxyProps } from './DashboardPageProxy';
|
import DashboardPageProxy, { DashboardPageProxyProps } from './DashboardPageProxy';
|
||||||
@ -84,24 +80,15 @@ jest.mock('app/features/dashboard/api/dashboard_api', () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
function setup(props: Partial<DashboardPageProxyProps>) {
|
function setup(props: Partial<DashboardPageProxyProps>) {
|
||||||
const context = getGrafanaContextMock();
|
|
||||||
const store = configureStore({});
|
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
<GrafanaContext.Provider value={context}>
|
<DashboardPageProxy
|
||||||
<Provider store={store}>
|
location={locationService.getLocation()}
|
||||||
<Router history={locationService.getHistory()}>
|
history={locationService.getHistory()}
|
||||||
<DashboardPageProxy
|
queryParams={{}}
|
||||||
location={locationService.getLocation()}
|
route={{ routeName: DashboardRoutes.Home, component: () => null, path: '/' }}
|
||||||
history={locationService.getHistory()}
|
match={{ params: {}, isExact: true, path: '/', url: '/' }}
|
||||||
queryParams={{}}
|
{...props}
|
||||||
route={{ routeName: DashboardRoutes.Home, component: () => null, path: '/' }}
|
/>
|
||||||
match={{ params: {}, isExact: true, path: '/', url: '/' }}
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
</GrafanaContext.Provider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,30 +1,20 @@
|
|||||||
import { render, screen } from '@testing-library/react';
|
import { screen } from '@testing-library/react';
|
||||||
import { Provider } from 'react-redux';
|
import { render } from 'test/test-utils';
|
||||||
import { Router } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { locationService } from '@grafana/runtime';
|
|
||||||
import { configureStore } from 'app/store/configureStore';
|
|
||||||
|
|
||||||
import { getMockDataSources } from '../__mocks__';
|
import { getMockDataSources } from '../__mocks__';
|
||||||
|
|
||||||
import { DataSourcesListView } from './DataSourcesList';
|
import { DataSourcesListView } from './DataSourcesList';
|
||||||
|
|
||||||
const setup = () => {
|
const setup = () => {
|
||||||
const store = configureStore();
|
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
<Provider store={store}>
|
<DataSourcesListView
|
||||||
<Router history={locationService.getHistory()}>
|
dataSources={getMockDataSources(3)}
|
||||||
<DataSourcesListView
|
dataSourcesCount={3}
|
||||||
dataSources={getMockDataSources(3)}
|
isLoading={false}
|
||||||
dataSourcesCount={3}
|
hasCreateRights={true}
|
||||||
isLoading={false}
|
hasWriteRights={true}
|
||||||
hasCreateRights={true}
|
hasExploreRights={true}
|
||||||
hasWriteRights={true}
|
/>
|
||||||
hasExploreRights={true}
|
|
||||||
/>
|
|
||||||
</Router>
|
|
||||||
</Provider>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { DataSourceSettings, GrafanaTheme2 } from '@grafana/data';
|
import { DataSourceSettings, GrafanaTheme2 } from '@grafana/data';
|
||||||
import { config } from '@grafana/runtime';
|
import { config } from '@grafana/runtime';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { AppEvents } from '@grafana/data';
|
import { AppEvents } from '@grafana/data';
|
||||||
import { config, locationService } from '@grafana/runtime';
|
import { config, locationService } from '@grafana/runtime';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
import { GrafanaTheme2, NavModelItem } from '@grafana/data';
|
||||||
import { config } from '@grafana/runtime';
|
import { config } from '@grafana/runtime';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { config } from '@grafana/runtime';
|
import { config } from '@grafana/runtime';
|
||||||
import { EmptyState, Grid } from '@grafana/ui';
|
import { EmptyState, Grid } from '@grafana/ui';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { GrafanaPlugin, NavModelItem, PluginIncludeType, PluginType } from '@grafana/data';
|
import { GrafanaPlugin, NavModelItem, PluginIncludeType, PluginType } from '@grafana/data';
|
||||||
import { config } from '@grafana/runtime';
|
import { config } from '@grafana/runtime';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import { ReactElement } from 'react';
|
import { ReactElement } from 'react';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom-v5-compat';
|
||||||
|
|
||||||
import { SelectableValue, GrafanaTheme2, PluginType } from '@grafana/data';
|
import { SelectableValue, GrafanaTheme2, PluginType } from '@grafana/data';
|
||||||
import { locationSearchToObject } from '@grafana/runtime';
|
import { locationSearchToObject } from '@grafana/runtime';
|
||||||
|
Loading…
Reference in New Issue
Block a user