import { connectScreenSizeActions, getWindowDimensions, initScreenSize, } from './screen-size-store.connect'; import { initScreenSizeReducer, setScreenSize, } from './screen-size-store.actions'; import { initMockStore as storeBuilder, } from './../../test-utils/index'; const initMockStore = storeBuilder(jest); describe('getWindowDimensions', () => { test('Gets the innerHeight from the window for the height', () => { const result = getWindowDimensions({innerHeight: 100} as Window); expect(result.height).toBe(100); }); test('Gets the innerWidth from the window for the width', () => { const result = getWindowDimensions({innerWidth: 100} as Window); expect(result.width).toBe(100); }); }); describe('initScreenSize', () => { test('Dispatches an initScreenSizeReducer action to the store', () => { const store = initMockStore({}); const window = { innerHeight: 10, innerWidth: 15, } as Window; initScreenSize( window, store, '100px', '200px', ); expect(store.dispatch).toHaveBeenCalledWith( initScreenSizeReducer({ desktopCutoffWidth: 200, screenSize: { height: 10, width: 15, }, tabletCutoffWidth: 100, }), ); }); }); describe('connectScreenSizeActions', () => { const initConnectScreenSizeActionsData = () => { const mockWindow = { ...window, innerHeight: 10, innerWidth: 15, } as Window; const store = initMockStore({}); return { mockWindow, store, }; }; test('Runs successfully after the time has expired' , () => { const { mockWindow, store, } = initConnectScreenSizeActionsData(); jest.useFakeTimers(); connectScreenSizeActions(mockWindow, store); mockWindow.dispatchEvent(new Event('resize')); jest.runTimersToTime(500); expect(store.dispatch).toHaveBeenCalledWith( setScreenSize({ height: mockWindow.innerHeight, width: mockWindow.innerWidth, }), ); }); test('Does not run before the debounceTime' , () => { const { mockWindow, store, } = initConnectScreenSizeActionsData(); jest.useFakeTimers(); connectScreenSizeActions(mockWindow, store); mockWindow.dispatchEvent(new Event('resize')); jest.runTimersToTime(499); expect(store.dispatch).not.toHaveBeenCalled(); }); });