import { shallow } from 'enzyme'; import * as React from 'react'; import { getWelcomeTour, WelcomeTour, } from '../../../src/renderer/components/tour-welcome'; import { ipcRendererManager } from '../../../src/renderer/ipc'; import { StateMock } from '../../mocks/mocks'; describe('Header component', () => { let store: StateMock; beforeEach(() => { ({ state: store } = (window as any).ElectronFiddle.app); store.isTourShowing = true; ipcRendererManager.removeAllListeners(); }); it('renders', () => { const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); it('renders null if the tour is not showing', () => { store.isTourShowing = false; const wrapper = shallow(); expect(wrapper.html()).toBe(null); }); it('renders the tour once started', () => { const wrapper = shallow(); const instance: WelcomeTour = wrapper.instance() as any; instance.startTour(); expect(wrapper.state('isTourStarted')).toBe(true); expect(wrapper).toMatchSnapshot(); }); it('stops the tour on stopTour()', () => { const wrapper = shallow(); const instance: WelcomeTour = wrapper.instance() as any; instance.stopTour(); expect(wrapper.state('isTourStarted')).toBe(false); expect(store.disableTour).toHaveBeenCalled(); }); describe('getWelcomeTour()', () => { it('offers custom buttons for the Electron step', () => { const tourSteps = [...getWelcomeTour()]; const electronStep = tourSteps.find( ({ name }) => name === 'first-time-electron', ); const mockParam = { stop: jest.fn(), advance: jest.fn() }; const buttons = electronStep!.getButtons!(mockParam); shallow(buttons[0]).simulate('click'); expect(mockParam.stop).toHaveBeenCalled(); shallow(buttons[1]).simulate('click'); expect(mockParam.advance).toHaveBeenCalled(); }); }); });