index.test.js (5189B)
1 import renderer from 'react-test-renderer'; 2 import {mount} from 'enzyme'; 3 import PreviewImport from '..'; 4 import {SingleItemProvider} from '../../../contexts/SingleItemContext'; 5 6 let templateMock = { 7 openSitePreviewModal: jest.fn(), 8 onImportTemplate: jest.fn(), 9 spinner: null 10 }; 11 let singleMock = { 12 data: {ID: 1, url: 'url'}, 13 index: 0, 14 pageData: null 15 }; 16 let useEffect; 17 const WrappedPreviewImport = (props) => { 18 const {templateValue, singleValue} = props; 19 return ( 20 <SingleItemProvider value={{...singleMock, ...singleValue}}> 21 <PreviewImport /> 22 </SingleItemProvider> 23 ); 24 } 25 26 27 describe('Preview Import buttons', () => { 28 it('1. renders correctly: snapshot testing', () => { 29 const component = renderer.create( 30 <WrappedPreviewImport /> 31 ); 32 const tree = component.toJSON(); 33 expect(tree).toMatchSnapshot(); 34 }); 35 36 describe('2. Testing props', () => { 37 it('does not display preview button when data.url is not set', () => { 38 const testRenderer = renderer.create( 39 <WrappedPreviewImport singleValue={{data: {url: null}}} /> 40 ); 41 const testInstance = testRenderer.root; 42 expect(testInstance.findAllByProps({className: 'redux-templates-button preview-button'}).length).toBe(0); 43 }); 44 45 it('displays preview button when data.url is set', () => { 46 const testRenderer = renderer.create( 47 <WrappedPreviewImport singleValue={{data: {url: 'url'}}} /> 48 ); 49 const testInstance = testRenderer.root; 50 expect(testInstance.findAllByProps({className: 'redux-templates-button preview-button'}).length).toBe(1); 51 }); 52 53 it('displays import button with download icon with default context value', () => { 54 const testRenderer = renderer.create( 55 <WrappedPreviewImport /> 56 ); 57 const testInstance = testRenderer.root; 58 expect(testInstance.findAllByProps({className: 'fas fa-download'}).length).toBeGreaterThan(0); 59 }); 60 61 it('displays import button with download icon with spinner null', () => { 62 const testRenderer = renderer.create( 63 <WrappedPreviewImport templateValue={{spinner: null}} /> 64 ); 65 const testInstance = testRenderer.root; 66 expect(testInstance.findAllByProps({className: 'fas fa-download'}).length).toBeGreaterThan(0); 67 }); 68 69 it('displays import button with spinner icon when spinner and data.ID match', () => { 70 const testRenderer = renderer.create( 71 <WrappedPreviewImport templateValue={{spinner: 1}} singleValue={{data: {ID: 1}}} /> 72 ); 73 const testInstance = testRenderer.root; 74 expect(testInstance.findAllByProps({className: 'fas fa-spinner fa-pulse'}).length).toBeGreaterThan(0); 75 }) 76 }); 77 78 describe('4. Testing Events', () => { 79 const mockUseEffect = () => { 80 useEffect.mockImplementationOnce(f => f()); 81 }; 82 83 beforeEach(() => { 84 useEffect = jest.spyOn(React, 'useEffect'); 85 }); 86 87 it('click preview to call openSitePreviewModal of template modal context', () => { 88 const component = mount(<WrappedPreviewImport />); 89 const previewButton = component.find('.preview-button'); 90 previewButton.simulate('click'); 91 expect(templateMock.openSitePreviewModal).toHaveBeenCalled(); 92 }); 93 94 it('click preview to call openSitePreviewModal of template modal context with right parameter', () => { 95 const component = mount(<WrappedPreviewImport singleValue={{index: 1, pageData: 'pagedata'}} />); 96 const previewButton = component.find('.preview-button'); 97 previewButton.simulate('click'); 98 expect(templateMock.openSitePreviewModal).toHaveBeenCalledWith(1,'pagedata'); 99 }); 100 101 it('click download not to call onImportTemplate when other operation is going on(spinner is not null)', () => { 102 const component = mount(<WrappedPreviewImport templateValue={{spinner: 1}} />); 103 const downloadButton = component.find('.download-button'); 104 downloadButton.simulate('click'); 105 expect(templateMock.onImportTemplate).not.toHaveBeenCalled(); 106 }); 107 108 it('click download to call onImportTemplate of template modal context', () => { 109 const component = mount(<WrappedPreviewImport />); 110 const downloadButton = component.find('.download-button'); 111 downloadButton.simulate('click'); 112 expect(templateMock.onImportTemplate).toHaveBeenCalled(); 113 }); 114 115 it('click download to call onImportTemplate of template modal context with right parameter', () => { 116 const component = mount(<WrappedPreviewImport singleValue={{data: {ID: 1}}} />); 117 const downloadButton = component.find('.download-button'); 118 downloadButton.simulate('click'); 119 expect(templateMock.onImportTemplate).toHaveBeenCalledWith({ID: 1}); 120 }); 121 122 }); 123 124 125 });