You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { AnimatePresence, MotionGlobalConfig } from 'framer-motion';
|
|
import { isArray, isEqual, unset } from 'lodash';
|
|
import { ElementType, ReactElement, ReactNode } from 'react';
|
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
import TestRenderer from 'react-test-renderer';
|
|
import { SessionTheme } from '../../themes/SessionTheme';
|
|
|
|
const Providers = ({ children }: { children: ReactNode }) => {
|
|
MotionGlobalConfig.skipAnimations = false;
|
|
|
|
return (
|
|
<SessionTheme>
|
|
<AnimatePresence>
|
|
<ErrorBoundary
|
|
fallback={<>{`Failed to render a component!\n\t${JSON.stringify(children)}`}</>}
|
|
>
|
|
{children}
|
|
</ErrorBoundary>
|
|
</AnimatePresence>
|
|
</SessionTheme>
|
|
);
|
|
};
|
|
|
|
function renderComponent(children: ReactElement): TestRenderer.ReactTestRenderer {
|
|
return TestRenderer.create(<Providers>{children}</Providers>);
|
|
}
|
|
|
|
function getComponentTree(
|
|
result: TestRenderer.ReactTestRenderer
|
|
): Array<TestRenderer.ReactTestRendererTree> {
|
|
const trees = result.toTree();
|
|
return !trees ? [] : isArray(trees) ? trees : [trees];
|
|
}
|
|
|
|
function findByDataTestId(
|
|
renderResult: TestRenderer.ReactTestRenderer,
|
|
dataTestId: string
|
|
): TestRenderer.ReactTestInstance {
|
|
return renderResult.root.findByProps({ 'data-testid': dataTestId });
|
|
}
|
|
|
|
function findAllByElementType(
|
|
renderResult: TestRenderer.ReactTestRenderer,
|
|
elementType: ElementType
|
|
): Array<TestRenderer.ReactTestInstance> {
|
|
return renderResult.root.findAllByType(elementType);
|
|
}
|
|
|
|
function areResultsEqual(
|
|
renderResult: TestRenderer.ReactTestRenderer,
|
|
renderResult2: TestRenderer.ReactTestRenderer,
|
|
ignoreDataTestIds?: boolean
|
|
): boolean {
|
|
if (ignoreDataTestIds) {
|
|
const obj = renderResult.toJSON();
|
|
const obj2 = renderResult2.toJSON();
|
|
unset(obj, "props['data-testid']");
|
|
unset(obj2, "props['data-testid']");
|
|
return isEqual(obj, obj2);
|
|
}
|
|
|
|
return isEqual(renderResult.toJSON(), renderResult2.toJSON());
|
|
}
|
|
|
|
export {
|
|
areResultsEqual,
|
|
findAllByElementType,
|
|
findByDataTestId,
|
|
getComponentTree,
|
|
renderComponent,
|
|
};
|