import React from 'react';
import configureStore from 'redux-mock-store';
import {mount} from 'enzyme';
import HashParserHOC from '../../../src/lib/hash-parser-hoc.jsx';
jest.mock('react-ga');
describe('HashParserHOC', () => {
const mockStore = configureStore();
let store;
beforeEach(() => {
store = mockStore({
scratchGui: {
projectState: {}
}
});
});
test('when there is a hash, it passes the hash as projectId', () => {
const Component = ({projectId}) =>
{projectId}
;
const WrappedComponent = HashParserHOC(Component);
window.location.hash = '#1234567';
const mockSetProjectIdFunc = jest.fn();
mount(
);
expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('1234567');
});
test('when there is no hash, it passes 0 as the projectId', () => {
const Component = ({projectId}) => {projectId}
;
const WrappedComponent = HashParserHOC(Component);
window.location.hash = '';
const mockSetProjectIdFunc = jest.fn();
mount(
);
expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0');
});
test('when the hash is not a number, it passes 0 as projectId', () => {
const Component = ({projectId}) => {projectId}
;
const WrappedComponent = HashParserHOC(Component);
window.location.hash = '#winning';
const mockSetProjectIdFunc = jest.fn();
mount(
);
expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0');
});
test('when hash change happens, the projectId state is changed', () => {
const Component = ({projectId}) => {projectId}
;
const WrappedComponent = HashParserHOC(Component);
window.location.hash = '';
const mockSetProjectIdFunc = jest.fn();
const mounted = mount(
);
window.location.hash = '#1234567';
mounted
.childAt(0)
.instance()
.handleHashChange();
expect(mockSetProjectIdFunc.mock.calls.length).toBe(2);
});
});