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,
 | |
| };
 |