import { Button } from '@material-ui/core' import { mount } from 'enzyme' import toJson from 'enzyme-to-json' import React from 'react' import { Provider } from 'react-redux' import UsageEventService from 'services/usageEvent.service' import * as challengeActions from 'store/challenge/challenge.slice' import { defaultEcogestureData } from 'tests/__mocks__/actionData.mock' import { createMockEcolyoStore } from 'tests/__mocks__/store' import { waitForComponentToPaint } from 'tests/__mocks__/testUtils' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' import ActionModal from './ActionModal' const mockUpdateUserChallenge = jest.fn() jest.mock('services/challenge.service', () => { return jest.fn(() => ({ updateUserChallenge: mockUpdateUserChallenge, })) }) jest.mock('services/usageEvent.service') const mockAddEvent = jest.fn() UsageEventService.addEvent = mockAddEvent describe('ActionModal component', () => { const store = createMockEcolyoStore() it('should render correctly', async () => { const wrapper = mount( <Provider store={store}> <ActionModal open={true} handleCloseClick={jest.fn()} action={defaultEcogestureData[1]} userChallenge={userChallengeData[1]} /> </Provider> ) await waitForComponentToPaint(wrapper) expect(toJson(wrapper)).toMatchSnapshot() }) it('should click on button and update action to ongoing', async () => { const updateChallengeSpy = jest.spyOn( challengeActions, 'updateUserChallengeList' ) mockUpdateUserChallenge.mockResolvedValueOnce(userChallengeData[1]) const wrapper = mount( <Provider store={store}> <ActionModal open={true} handleCloseClick={jest.fn()} action={defaultEcogestureData[1]} userChallenge={userChallengeData[1]} /> </Provider> ) wrapper.find(Button).first().simulate('click') await waitForComponentToPaint(wrapper) expect(updateChallengeSpy).toHaveBeenCalledTimes(1) }) })