import { render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import React from 'react' import { Provider } from 'react-redux' import { AllEcogestureData } from 'tests/__mocks__/actionData.mock' import { createMockEcolyoStore, mockChallengeState, mockGlobalState, mockProfileState, } from 'tests/__mocks__/store' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' import ActionChoose from './ActionChoose' jest.mock('components/Action/ActionList/ActionList', () => 'mock-ActionList') jest.mock('services/ecogesture.service', () => { return jest.fn(() => ({ getEcogesturesByIds: jest.fn(() => []), })) }) const mockGetDefaultActions = jest.fn() jest.mock('services/action.service', () => { return jest.fn(() => ({ getCustomActions: jest.fn(), getDefaultActions: mockGetDefaultActions, })) }) describe('ActionChoose component', () => { const store = createMockEcolyoStore({ global: { ...mockGlobalState, fluidTypes: [0, 1, 2] }, profile: mockProfileState, }) it('should render correctly', async () => { mockGetDefaultActions.mockResolvedValue([ AllEcogestureData[0], AllEcogestureData[5], AllEcogestureData[2], ]) const { container } = render( <Provider store={store}> <ActionChoose userChallenge={userChallengeData[1]} setFocus={jest.fn()} /> </Provider> ) await waitFor(() => null, { container }) expect(container).toMatchSnapshot() }) it('should go to the Action list', async () => { const store = createMockEcolyoStore({ challenge: mockChallengeState, global: { ...mockGlobalState, fluidTypes: [0, 1, 2] }, profile: mockProfileState, }) mockGetDefaultActions.mockResolvedValue([ AllEcogestureData[0], AllEcogestureData[5], AllEcogestureData[2], ]) const { container } = render( <Provider store={store}> <ActionChoose userChallenge={userChallengeData[1]} setFocus={jest.fn()} /> </Provider> ) await waitFor(() => null, { container }) await userEvent.click(await screen.findByText('action.other')) const list = container.getElementsByTagName('mock-ActionList')[0] expect(list).toBeInTheDocument() }) })