import React from 'react'; import API from 'foremanReact/API'; import { IntegrationTestHelper } from 'react-redux-test-utils'; import TaskDetails, { reducers } from '../index'; import { selectForemanTasks } from '../../../ForemanTasksSelectors'; jest.mock('../../../ForemanTasksSelectors'); jest.mock('foremanReact/API'); selectForemanTasks.mockImplementation(state => state); describe('TaskDetails integration test', () => { beforeEach(() => { jest.useFakeTimers(); const expectedIntervalId = 1; jest.useFakeTimers(); setInterval.mockImplementation(() => expectedIntervalId); }); it('should flow', async () => { window.location.reload = jest.fn(); API.get.mockImplementationOnce(); const integrationTestHelper = new IntegrationTestHelper(reducers); const component = integrationTestHelper.mount(); integrationTestHelper.takeStoreSnapshot('initial state'); const reloadButton = component.find('.reload-button').at(0); reloadButton.simulate('click'); await IntegrationTestHelper.flushAllPromises(); integrationTestHelper.takeActionsSnapshot( 'task details reload start with error' ); reloadButton.simulate('click'); await IntegrationTestHelper.flushAllPromises(); jest.advanceTimersByTime(1); integrationTestHelper.takeActionsSnapshot('task details reload stop'); jest.useRealTimers(); }); it('should change the data after reload', async () => { API.get.mockImplementationOnce(() => ({ data: { label: 'new-label' }, })); const integrationTestHelper = new IntegrationTestHelper(reducers); const component = integrationTestHelper.mount(); const reloadButton = component.find('.reload-button').at(0); reloadButton.simulate('click'); await IntegrationTestHelper.flushAllPromises(); integrationTestHelper.takeActionsSnapshot( 'task details reload start without error' ); integrationTestHelper.takeStoreAndLastActionSnapshot( 'task details data should change' ); jest.useRealTimers(); }); });