hash-project-loader-hoc.test.jsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React from 'react';
  2. import configureStore from 'redux-mock-store';
  3. import {mount} from 'enzyme';
  4. import HashParserHOC from '../../../src/lib/hash-parser-hoc.jsx';
  5. jest.mock('react-ga');
  6. describe('HashParserHOC', () => {
  7. const mockStore = configureStore();
  8. let store;
  9. beforeEach(() => {
  10. store = mockStore({
  11. scratchGui: {
  12. projectState: {}
  13. }
  14. });
  15. });
  16. test('when there is a hash, it passes the hash as projectId', () => {
  17. const Component = ({projectId}) => <div>{projectId}</div>;
  18. const WrappedComponent = HashParserHOC(Component);
  19. window.location.hash = '#1234567';
  20. const mockSetProjectIdFunc = jest.fn();
  21. mount(
  22. <WrappedComponent
  23. setProjectId={mockSetProjectIdFunc}
  24. store={store}
  25. />
  26. );
  27. expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('1234567');
  28. });
  29. test('when there is no hash, it passes 0 as the projectId', () => {
  30. const Component = ({projectId}) => <div>{projectId}</div>;
  31. const WrappedComponent = HashParserHOC(Component);
  32. window.location.hash = '';
  33. const mockSetProjectIdFunc = jest.fn();
  34. mount(
  35. <WrappedComponent
  36. setProjectId={mockSetProjectIdFunc}
  37. store={store}
  38. />
  39. );
  40. expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0');
  41. });
  42. test('when the hash is not a number, it passes 0 as projectId', () => {
  43. const Component = ({projectId}) => <div>{projectId}</div>;
  44. const WrappedComponent = HashParserHOC(Component);
  45. window.location.hash = '#winning';
  46. const mockSetProjectIdFunc = jest.fn();
  47. mount(
  48. <WrappedComponent
  49. setProjectId={mockSetProjectIdFunc}
  50. store={store}
  51. />
  52. );
  53. expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0');
  54. });
  55. test('when hash change happens, the projectId state is changed', () => {
  56. const Component = ({projectId}) => <div>{projectId}</div>;
  57. const WrappedComponent = HashParserHOC(Component);
  58. window.location.hash = '';
  59. const mockSetProjectIdFunc = jest.fn();
  60. const mounted = mount(
  61. <WrappedComponent
  62. setProjectId={mockSetProjectIdFunc}
  63. store={store}
  64. />
  65. );
  66. window.location.hash = '#1234567';
  67. mounted
  68. .childAt(0)
  69. .instance()
  70. .handleHashChange();
  71. expect(mockSetProjectIdFunc.mock.calls.length).toBe(2);
  72. });
  73. });