import { mount, shallow } from 'enzyme';
import * as React from 'react';
import { Tour } from '../../../src/renderer/components/tour';
import { overridePlatform, resetPlatform } from '../../utils';
describe('VersionChooser component', () => {
const oldQuerySelector = document.querySelector;
const mockTour = new Set([
{
name: 'mock-step-1',
selector: 'div.mock-1',
title: 'Step 1',
content: mock-step-1,
},
{
name: 'mock-step-2',
selector: 'div.mock-2',
title: 'Step 2',
content: mock-step-2,
},
]);
beforeAll(() => {
overridePlatform('darwin');
});
afterAll(() => {
resetPlatform();
});
beforeEach(() => {
document.querySelector = jest.fn(() => ({
getBoundingClientRect: jest.fn(() => ({
top: 20,
left: 25,
height: 120,
width: 130,
})),
}));
});
afterEach(() => {
document.querySelector = oldQuerySelector;
});
it('renders', () => {
const mockStop = jest.fn();
const wrapper = shallow();
expect(wrapper).toMatchSnapshot();
});
it('renders supplied buttons', () => {
mockTour.forEach((item) => {
(item as any).getButtons = () => [];
});
const mockStop = jest.fn();
const wrapper = shallow();
expect(wrapper.find('button').text()).toBe('Hello');
});
it('renders "Finish Tour" at the end', () => {
const singleItemTour = new Set([
{
name: 'mock-step-1',
selector: 'div.mock-1',
title: 'Step 1',
content: mock-step-1,
},
]);
const mockStop = jest.fn();
const wrapper = mount();
expect(wrapper.find('button').text()).toBe('tick-circleFinish Tour');
});
it('handles a missing target', () => {
(document.querySelector as jest.Mock).mockReturnValueOnce(null);
const mockStop = jest.fn();
const wrapper = shallow();
expect(wrapper.find('svg').length).toBe(1);
});
it('stops on stop()', () => {
const mockStop = jest.fn();
const wrapper = shallow();
const instance: any = wrapper.instance();
instance.stop();
expect(mockStop).toHaveBeenCalled();
});
it('advances on advance()', () => {
const mockStop = jest.fn();
const wrapper = shallow();
const instance: any = wrapper.instance();
instance.advance();
expect((wrapper.state('step') as any).name).toBe('mock-step-2');
instance.advance();
expect(wrapper.state('step')).toBe(null);
});
it('handles a resize', () => {
jest.useFakeTimers();
const mockStop = jest.fn();
const wrapper = shallow();
const instance: any = wrapper.instance();
instance.forceUpdate = jest.fn();
instance.onResize();
expect(instance.resizeHandle).toBeTruthy();
jest.runAllTimers();
expect(instance.forceUpdate).toHaveBeenCalled();
});
it('removes the resize listener', () => {
const oldRemove = window.removeEventListener;
window.removeEventListener = jest.fn();
const mockStop = jest.fn();
const wrapper = shallow();
const instance: Tour = wrapper.instance() as any;
instance.componentWillUnmount();
expect(window.removeEventListener).toHaveBeenCalled();
window.removeEventListener = oldRemove;
});
});