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 ( {`Failed to render a component!\n\t${JSON.stringify(children)}`}} > {children} ); }; function renderComponent(children: ReactElement): TestRenderer.ReactTestRenderer { return TestRenderer.create({children}); } function getComponentTree( result: TestRenderer.ReactTestRenderer ): Array { 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 { 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, };