import React from 'react'; import { shallow } from 'enzyme'; import LoadingSkeleton from './LoadingSkeleton'; describe('LoadingSkeleton.tsx', () => { const props: any = { isLoading: false, children: {}, className: 'classNameTest', style: {}, width: 100, height: 100, header: undefined, isPanel: false, hasOverlay: false, numRows: 1, numColumns: 1, Skeleton: {}, }; const fakeSkeleton = {}; describe('isLoading === false', () => { const testProps = { ...props, isLoading: false }; it('renders children only', () => { const component = shallow(); expect( component.find('[data-test-id="loadingSkeleton-Children"]').exists() ).toEqual(true); }); it('passes className to children', () => { let testProps = { ...props, isLoading: false }; const component = shallow(); expect( component .find('[data-test-id="loadingSkeleton-Children"]') .prop('className') ).toEqual('classNameTest'); testProps = { ...props, className: 'component1ClassName' }; const component1 = shallow(); expect( component1 .find('[data-test-id="loadingSkeleton-Children"]') .prop('className') ).toEqual('component1ClassName'); }); }); describe('isLoading === true, Skeleton is falsy', () => { describe('renders LoadingIndicator with overlay', () => { it('renders LoadingIndicator with overlay if hasOverlay is true', () => { const testProps = { ...props, hasOverlay: true }; const component = shallow( ); expect( component.find('[data-test-id="loadingSkeleton-Children"]').exists() ).toEqual(false); expect( component.find('[data-test-id="loadingSkeleton-Skeleton"]').exists() ).toEqual(false); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .exists() ).toEqual(true); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .prop('hasOverlay') ).toEqual(true); }); it('renders LoadingIndicator without overlay if hasOverlay is false', () => { const component = shallow( ); expect( component.find('[data-test-id="loadingSkeleton-Children"]').exists() ).toEqual(false); expect( component.find('[data-test-id="loadingSkeleton-Skeleton"]').exists() ).toEqual(false); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .exists() ).toEqual(true); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .prop('hasOverlay') ).toEqual(false); }); }); }); describe('isLoading === true, Skeleton is truthy', () => { const testProps = { ...props, isLoading: true, Skeleton: fakeSkeleton }; describe('Skeleton based on numRows and numColumns', () => { it('renders single Skeleton if numRows: null, numColumns: null,', () => { const component = shallow(); expect( component.find('[data-test-id="loadingSkeleton-Children"]').exists() ).toEqual(false); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .exists() ).toEqual(false); expect( component.find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .length ).toEqual(1); expect( component .find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .prop('className') ).toEqual('lucid-LoadingSkeleton-animatedSkeleton ' + props.className); }); it('renders single Skeleton if numRows: 1, numColumns: 1,', () => { const testPropsRowsAndNumbers = { ...testProps, numRows: 1, numColumns: 1, }; const component = shallow( ); expect( component.find('[data-test-id="loadingSkeleton-Children"]').exists() ).toEqual(false); expect( component .find('[data-test-id="loadingSkeleton-LoadingIndicator"]') .exists() ).toEqual(false); expect( component.find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .length ).toEqual(1); expect( component .find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .prop('className') ).toEqual('lucid-LoadingSkeleton-animatedSkeleton ' + props.className); }); it('renders Skeletons matrix', () => { const rows = Math.floor(Math.random() * 100 + 1); const columns = Math.floor(Math.random() * 100 + 1); const testPropsMatrix = { ...testProps, numRows: rows, numColumns: columns, }; const component = shallow(); expect( component.find('[data-test-id="loadingSkeleton-SkeletonColumn"]') .length ).toEqual(columns); expect( component.find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .length ).toEqual(columns * rows); }); }); describe('Skeleton use of Panel', () => { it('renders Panel if isPanel is true', () => { const testPropsPanel = { ...testProps, numRows: 1, numColumns: 1, isPanel: true, }; const component = shallow(); expect( component.find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .length ).toEqual(1); expect( component.find('[data-test-id="loadingSkeleton-Panel"]').length ).toEqual(1); }); it('does not render Panel if isPanel is false', () => { const testPropsPanel = { ...testProps, numRows: 1, numColumns: 1, isPanel: false, }; const component = shallow(); expect( component.find('[data-test-id="loadingSkeleton-ReactPlaceholder"]') .length ).toEqual(1); expect( component.find('[data-test-id="loadingSkeleton-Panel"]').length ).toEqual(0); }); }); }); });