import { render, screen } from '@testing-library/react' import { userEvent } from '@testing-library/user-event' import React from 'react' import { Provider } from 'react-redux' import * as challengeActions from 'store/challenge/challenge.slice' import { createMockEcolyoStore } from 'tests/__mocks__/store' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' import ActionDone from './ActionDone' const mockUpdateUserChallenge = jest.fn() jest.mock('services/challenge.service', () => { return jest.fn(() => ({ updateUserChallenge: mockUpdateUserChallenge, })) }) describe('ActionDone component', () => { const store = createMockEcolyoStore() it('should be rendered correctly', () => { const { container } = render( <Provider store={store}> <ActionDone currentChallenge={userChallengeData[1]} /> </Provider> ) expect(container).toMatchSnapshot() }) it('should click on button and update action to done', async () => { const updateChallengeSpy = jest.spyOn( challengeActions, 'updateUserChallengeList' ) mockUpdateUserChallenge.mockResolvedValueOnce(userChallengeData[1]) render( <Provider store={store}> <ActionDone currentChallenge={userChallengeData[1]} /> </Provider> ) await userEvent.click(screen.getByText('action.ok')) expect(updateChallengeSpy).toHaveBeenCalledTimes(1) }) })