Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CONSOLE-3735: React router migration #13216

Merged
merged 1 commit into from Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions dynamic-demo-plugin/src/components/Nav.tsx
@@ -1,5 +1,4 @@
import * as React from 'react';
import { RouteComponentProps } from 'react-router';
import { HorizontalNav } from '@openshift-console/dynamic-plugin-sdk';

const Thor: React.FC = () => (
Expand All @@ -14,7 +13,7 @@ const Loki: React.FC = () => (
</div>
);

const Asgard: React.FC<RouteComponentProps> = () => {
const Asgard: React.FC = () => {
const pages = [
{
href: '',
Expand Down
31 changes: 18 additions & 13 deletions dynamic-demo-plugin/src/components/ProjectOverview/Inventory.tsx
@@ -1,45 +1,50 @@
import * as React from 'react';
import {
K8sResourceCommon,
useK8sWatchResource,
InventoryItem,
InventoryItemTitle,
InventoryItemLoading,
} from '@openshift-console/dynamic-plugin-sdk';
K8sResourceCommon,
useK8sWatchResource,
InventoryItem,
InventoryItemTitle,
InventoryItemLoading,
} from '@openshift-console/dynamic-plugin-sdk';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';

const getCronJobsLink = (namespace: string) => `/k8s/ns/${namespace}/cronjobs`;
const getCronJobsLink = (namespace: string) => `/k8s/ns/${namespace}/cronjobs`;

type ProjectInventoryItemProps = {
projectName: string;
}
};

const ProjectInventoryItem = ({ projectName }: ProjectInventoryItemProps) => {
const { t } = useTranslation("plugin__console-demo-plugin");
const { t } = useTranslation('plugin__console-demo-plugin');
const [cronjobs, loaded, loadError] = useK8sWatchResource<K8sResourceCommon[]>({
groupVersionKind: {
group: 'batch',
version: 'v1',
kind: 'CronJob'
kind: 'CronJob',
},
namespace: projectName,
isList: true
isList: true,
});

const cronJobsLink = getCronJobsLink(projectName);
let title = <Link to={cronJobsLink}>{t('{{count}} Cron Job', { count: cronjobs.length })}</Link>;
if (loadError) {
title = <Link to={cronJobsLink}>{t('Cron Jobs')}</Link>;
} else if (!loaded) {
title = <><InventoryItemLoading /><Link to={cronJobsLink}>{t('Cron Jobs')}</Link></>;
title = (
<>
<InventoryItemLoading />
<Link to={cronJobsLink}>{t('Cron Jobs')}</Link>
</>
);
}

return (
<InventoryItem>
<InventoryItemTitle>{title}</InventoryItemTitle>
</InventoryItem>
);
}
};

export default ProjectInventoryItem;
@@ -1,8 +1,7 @@
import * as React from 'react';
import { RouteComponentProps } from 'react-router';
import { PageSection } from '@patternfly/react-core';

const ProjectTabExtensionContent: React.FC<RouteComponentProps> = () => {
const ProjectTabExtensionContent: React.FC = () => {
return <PageSection>This is the demo plugin addition for the project model.</PageSection>;
};

Expand Down
8 changes: 1 addition & 7 deletions frontend/__tests__/actions/ui.spec.ts
Expand Up @@ -4,7 +4,6 @@ import { formatNamespacedRouteForResource } from '@console/shared/src/utils/name
import '../../__mocks__/localStorage';
import store from '../../public/redux';
import * as UIActions from '../../public/actions/ui';
import * as router from '../../public/components/utils/router';
import { getActiveNamespace } from '@console/internal/reducers/ui';

const setActiveNamespace = (ns) => store.dispatch(UIActions.setActiveNamespace(ns));
Expand Down Expand Up @@ -79,12 +78,7 @@ describe('ui-actions', () => {
expect(getActiveNamespace(store.getState())).toEqual('dessert-topping');
});

it('should redirect to list view if current path is "new" and setting to "all-namespaces"', () => {
const spy = spyOn(router.history, 'push');
window.location.pathname = '/k8s/ns/floorwax/pods/~new';
setActiveNamespace(ALL_NAMESPACES_KEY);
expect(spy.calls.argsFor(0)[0]).toEqual('/k8s/all-namespaces/pods');
});
// removed 'should redirect to list view if current path is "new" and setting to "all-namespaces"' test because setActiveNamespace no longer navigates
});

describe('getNamespacedRoute', () => {
Expand Down
3 changes: 1 addition & 2 deletions frontend/__tests__/components/cluster-settings.spec.tsx
Expand Up @@ -61,10 +61,9 @@ jest.mock('@console/shared/src/hooks/useCanClusterUpgrade', () => ({

describe('Cluster Settings page', () => {
let wrapper: ShallowWrapper<any>;
const match = { url: '/settings/cluster', params: {}, isExact: true, path: '/settings/cluster' };

beforeEach(() => {
wrapper = shallow(<ClusterSettingsPage match={match} />);
wrapper = shallow(<ClusterSettingsPage />);
(useK8sWatchResource as jest.Mock).mockReturnValueOnce([[], true]);
});

Expand Down
@@ -1,6 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { Button } from '@patternfly/react-core';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { ButtonBar } from '../../../public/components/utils';
import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
Expand All @@ -10,16 +12,22 @@ import {
DroppableFileInput as BasicDroppableInput,
} from '../../../public/components/cluster-settings/basicauth-idp-form';

export const controlButtonTest = (wrapper: ShallowWrapper) => {
export const controlButtonTest = (wrapper) => {
expect(wrapper.find(ButtonBar).exists()).toBe(true);
expect(wrapper.find(Button).at(0).childAt(0).text()).toEqual('Add');
expect(wrapper.find(Button).at(1).childAt(0).text()).toEqual('Cancel');
expect(wrapper.find('Button[type="submit"]').at(0).text()).toEqual('Add');
expect(wrapper.find('Button[variant="secondary"]').at(0).text()).toEqual('Cancel');
};

describe('Add Identity Provider: BasicAuthentication', () => {
let wrapper: ShallowWrapper<any>;
let wrapper;
beforeEach(() => {
wrapper = shallow(<AddBasicAuthPage />);
wrapper = mount(
<Provider store={store}>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just seeing this. I think it would have been better to set up a reusable test render function for this instead of repeating, right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, we could do it as a follow up 👍

<BrowserRouter>
<AddBasicAuthPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddBasicAuthPage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { ListInput } from '../../../public/components/utils';
import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
Expand All @@ -8,10 +11,15 @@ import { AddGitHubPage } from '../../../public/components/cluster-settings/githu
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: GitHub', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddGitHubPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddGitHubPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddGitHubPage component', () => {
Expand Down
@@ -1,16 +1,24 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
import { IDPCAFileInput } from '../../../public/components/cluster-settings/idp-cafile-input';
import { AddGitLabPage } from '../../../public/components/cluster-settings/gitlab-idp-form';
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: GitLab', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddGitLabPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddGitLabPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddGitLabPage component', () => {
Expand Down
@@ -1,15 +1,23 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
import { AddGooglePage } from '../../../public/components/cluster-settings/google-idp-form';
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: Google', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddGooglePage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddGooglePage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddGooglePage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
import {
Expand All @@ -9,10 +12,15 @@ import {
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: HTPasswd', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddHTPasswdPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddHTPasswdPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddHTPasswdPage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
import { IDPCAFileInput } from '../../../public/components/cluster-settings/idp-cafile-input';
Expand All @@ -10,10 +13,15 @@ import {
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: Keystone', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddKeystonePage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddKeystonePage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddKeystonePage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { ListInput } from '../../../public/components/utils';
import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
Expand All @@ -8,10 +11,15 @@ import { AddLDAPPage } from '../../../public/components/cluster-settings/ldap-id
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: LDAP', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddLDAPPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddLDAPPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddLDAPPage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { ListInput } from '../../../public/components/utils';
import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
Expand All @@ -8,10 +11,15 @@ import { AddOpenIDIDPPage } from '../../../public/components/cluster-settings/op
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: OpenID Connect', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddOpenIDIDPPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddOpenIDIDPPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddOpenIDIDPPage component', () => {
Expand Down
@@ -1,5 +1,8 @@
import * as React from 'react';
import { shallow, ShallowWrapper } from 'enzyme';
import { mount } from 'enzyme';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom-v5-compat';
import store from '@console/internal/redux';

import { ListInput } from '../../../public/components/utils';
import { IDPNameInput } from '../../../public/components/cluster-settings/idp-name-input';
Expand All @@ -8,10 +11,15 @@ import { AddRequestHeaderPage } from '../../../public/components/cluster-setting
import { controlButtonTest } from './basicauth-idp-form.spec';

describe('Add Identity Provider: Request Header', () => {
let wrapper: ShallowWrapper<any>;

let wrapper;
beforeEach(() => {
wrapper = shallow(<AddRequestHeaderPage />);
wrapper = mount(
<Provider store={store}>
<BrowserRouter>
<AddRequestHeaderPage />
</BrowserRouter>
</Provider>,
);
});

it('should render AddRequestHeaderPage component', () => {
Expand Down