1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 13:29:41 +02:00
portainer/app/react/test-utils/withRouter.tsx
Chaim Lev-Ari f8e3d75797
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
refactor(tests): wrap tests explicitly with provider [EE-6686] (#11090)
2024-03-10 14:22:01 +02:00

49 lines
1.3 KiB
TypeScript

import { ComponentType } from 'react';
import {
ReactStateDeclaration,
UIRouter,
UIRouterReact,
UIView,
hashLocationPlugin,
servicesPlugin,
} from '@uirouter/react';
/**
* A helper function to wrap a component with a UIRouter Provider.
*
* should only be used in tests
*/
export function withTestRouter<T>(
WrappedComponent: ComponentType<T>,
{
route = '/',
stateConfig = [],
}: { route?: string; stateConfig?: Array<ReactStateDeclaration> } = {}
): ComponentType<T> {
const router = new UIRouterReact();
// router.trace.enable(Category.TRANSITION);
router.plugin(servicesPlugin);
router.plugin(hashLocationPlugin);
// Set up your custom state configuration
stateConfig.forEach((state) => router.stateRegistry.register(state));
router.urlService.rules.initial({ state: route });
// Try to create a nice displayName for React Dev Tools.
const displayName =
WrappedComponent.displayName || WrappedComponent.name || 'Component';
function WrapperComponent(props: T & JSX.IntrinsicAttributes) {
return (
<UIRouter router={router}>
<UIView />
<WrappedComponent {...props} />
</UIRouter>
);
}
WrapperComponent.displayName = `withTestRouter(${displayName})`;
return WrapperComponent;
}