diff --git a/src/components/Duel/DuelOngoing/DuelOngoing.spec.tsx b/src/components/Duel/DuelOngoing/DuelOngoing.spec.tsx index 2f9eb9c8db8afaa204d5f76f903226a6592ed7e4..caadee189cd8e0b9668787c3b9b32c6a82407cc5 100644 --- a/src/components/Duel/DuelOngoing/DuelOngoing.spec.tsx +++ b/src/components/Duel/DuelOngoing/DuelOngoing.spec.tsx @@ -1,13 +1,11 @@ +import { render, screen, waitFor } from '@testing-library/react' import { UserChallengeState } from 'enums' -import { mount } from 'enzyme' import { DateTime } from 'luxon' import { UserChallenge } from 'models' import React from 'react' import { Provider } from 'react-redux' import { createMockEcolyoStore } from 'tests/__mocks__/store' -import { waitForComponentToPaint } from 'tests/__mocks__/testUtils' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' -import DuelResultModal from '../DuelResultModal/DuelResultModal' import DuelOngoing from './DuelOngoing' const mockUserChallengeUpdateFlag = jest.fn() @@ -20,10 +18,6 @@ jest.mock('services/challenge.service', () => { }) jest.mock('components/Duel/DuelChart/DuelChart', () => 'mock-duelchart') -jest.mock( - 'components/Duel/DuelResultModal/DuelResultModal', - () => 'mock-duelModal' -) describe('DuelOngoing component', () => { const store = createMockEcolyoStore() @@ -33,19 +27,15 @@ describe('DuelOngoing component', () => { isWin: false, isEmpty: false, }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelOngoing userChallenge={userChallengeData[0]} /> </Provider> ) - await waitForComponentToPaint(wrapper) - expect(wrapper.find('.duel-title').text()).toEqual( - userChallengeData[1].duel.title - ) - expect(wrapper.find('.duel-goal').exists()).toBeTruthy() - expect(wrapper.find('.duel-consumption').exists()).toBeTruthy() - expect(wrapper.find('.duel-chart').exists()).toBeTruthy() - expect(wrapper.find('.caption-icon').exists()).toBeTruthy() + expect(container).toMatchSnapshot() + expect( + screen.getByText(userChallengeData[1].duel.title) + ).toBeInTheDocument() }) it('should display the result Modal when duel is done', async () => { @@ -59,12 +49,12 @@ describe('DuelOngoing component', () => { isWin: true, }) mockUserChallengeUpdateFlag.mockResolvedValue(updatedUserChallenge) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelOngoing userChallenge={updatedUserChallenge} /> </Provider> ) - await waitForComponentToPaint(wrapper) - expect(wrapper.find(DuelResultModal).exists()).toBeTruthy() + await waitFor(() => null, { container }) + expect(screen.getByRole('dialog')).toBeInTheDocument() }) }) diff --git a/src/components/Duel/DuelOngoing/__snapshots__/DuelOngoing.spec.tsx.snap b/src/components/Duel/DuelOngoing/__snapshots__/DuelOngoing.spec.tsx.snap new file mode 100644 index 0000000000000000000000000000000000000000..f04488e4ae9cba174bae61d3bdba4812ef221d0d --- /dev/null +++ b/src/components/Duel/DuelOngoing/__snapshots__/DuelOngoing.spec.tsx.snap @@ -0,0 +1,104 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`DuelOngoing component should be rendered correctly 1`] = ` +<div> + <div + class="duel-ongoing-container" + > + <div + class="duel-title text-16-normal" + > + Title DUEL001 + </div> + <div + class="duel-goal text-18-normal" + > + duel.goal1 + <span> + + </span> + duel.goal2 + </div> + <div + class="duel-consumption text-28-normal" + > + <span + class="consumption" + > + 0,00 + </span> + / 0,00 € + </div> + <div + class="duel-chart fs-root" + > + <mock-duelchart + height="300" + userchallenge="[object Object]" + width="940" + /> + </div> + <div + class="duel-chart-caption text-15-normal" + > + <div + class="duel-caption" + > + <svg + aria-hidden="true" + class="caption-icon styles__icon___23x3R" + height="25" + width="25" + > + <use + xlink:href="#test-file-stub" + /> + </svg> + <div + class="caption-label" + > + duel.caption_average + </div> + </div> + <div + class="duel-caption" + > + <svg + aria-hidden="true" + class="caption-icon styles__icon___23x3R" + height="25" + width="25" + > + <use + xlink:href="#test-file-stub" + /> + </svg> + <div + class="caption-label" + > + duel.caption_consumption + </div> + </div> + <div + class="duel-caption" + > + <svg + aria-hidden="true" + class="caption-icon styles__icon___23x3R" + height="25" + width="25" + > + <use + xlink:href="#test-file-stub" + /> + </svg> + <div + class="caption-label" + > + duel.caption_incoming + </div> + </div> + </div> + </div> +</div> +`; diff --git a/src/components/Duel/DuelResultModal/DuelResultModal.spec.tsx b/src/components/Duel/DuelResultModal/DuelResultModal.spec.tsx index e107a11882ffe40520dafa7e02130f7cf1a23952..199878a12050aecaccad580936213290144de33a 100644 --- a/src/components/Duel/DuelResultModal/DuelResultModal.spec.tsx +++ b/src/components/Duel/DuelResultModal/DuelResultModal.spec.tsx @@ -1,7 +1,5 @@ -import { render } from '@testing-library/react' -import { mount } from 'enzyme' +import { render, screen } from '@testing-library/react' import React from 'react' -import { waitForComponentToPaint } from 'tests/__mocks__/testUtils' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' import DuelResultModal from './DuelResultModal' @@ -18,7 +16,7 @@ describe('DuelResultModal component', () => { expect(baseElement).toMatchSnapshot() }) it('should render a loss modal', async () => { - const wrapper = mount( + render( <DuelResultModal open={true} handleCloseClick={jest.fn()} @@ -26,7 +24,6 @@ describe('DuelResultModal component', () => { win={false} /> ) - await waitForComponentToPaint(wrapper) - expect(wrapper.find('.title').text()).toBe('duel_result_modal.lost.title') + expect(screen.getByText('duel_result_modal.lost.title')).toBeInTheDocument() }) }) diff --git a/src/components/Duel/DuelUnlocked/DuelUnlocked.spec.tsx b/src/components/Duel/DuelUnlocked/DuelUnlocked.spec.tsx index 822eff26b405e9e7c99bc755697de2a10d4f7583..d1835e74fdd1ee74d2612e44db56a6e8bfa932e7 100644 --- a/src/components/Duel/DuelUnlocked/DuelUnlocked.spec.tsx +++ b/src/components/Duel/DuelUnlocked/DuelUnlocked.spec.tsx @@ -1,7 +1,6 @@ -import Button from '@material-ui/core/Button' -import StyledIcon from 'components/CommonKit/Icon/StyledIcon' +import { render, screen } from '@testing-library/react' +import { userEvent } from '@testing-library/user-event' import { FluidType, UserChallengeUpdateFlag } from 'enums' -import { mount } from 'enzyme' import React from 'react' import { Provider } from 'react-redux' import { createMockEcolyoStore, mockGlobalState } from 'tests/__mocks__/store' @@ -24,40 +23,39 @@ describe('DuelUnlocked component', () => { const store = createMockEcolyoStore() it('should be rendered correctly', () => { - const average: string = formatNumberValues( + const average = formatNumberValues( userChallengeData[1].duel.threshold ).toString() - const description: string = + const description = '"' + userChallengeData[1].duel.description.replace('#CONSUMPTION', average) + '"' - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelUnlocked userChallenge={userChallengeData[0]} /> </Provider> ) - expect(wrapper.find('.duel-title').text()).toEqual( - userChallengeData[1].duel.title - ) - expect(wrapper.find(StyledIcon).exists()).toBeTruthy() - expect(wrapper.find('.duel-description').text()).toEqual(description) - expect(wrapper.find('.duel-average-info').exists()).toBeTruthy() - expect(wrapper.find('.button-start').exists()).toBeTruthy() + expect(container).toMatchSnapshot() + expect( + screen.getByText(userChallengeData[1].duel.title) + ).toBeInTheDocument() + expect(screen.getByText(description)).toBeInTheDocument() + expect(screen.getByRole('button')).toBeInTheDocument() }) - it('should update userChallenge when launching duel with configured fluid', () => { + it('should update userChallenge when launching duel with configured fluid', async () => { const store = createMockEcolyoStore({ global: { ...mockGlobalState, fluidTypes: [FluidType.ELECTRICITY], }, }) - const wrapper = mount( + render( <Provider store={store}> <DuelUnlocked userChallenge={userChallengeData[0]} /> </Provider> ) - wrapper.find('.button-start').find(Button).simulate('click') + await userEvent.click(screen.getByRole('button')) expect(mockUserChallengeUpdateFlag).toHaveBeenCalledWith( userChallengeData[0], UserChallengeUpdateFlag.DUEL_START diff --git a/src/components/Duel/DuelUnlocked/__snapshots__/DuelUnlocked.spec.tsx.snap b/src/components/Duel/DuelUnlocked/__snapshots__/DuelUnlocked.spec.tsx.snap new file mode 100644 index 0000000000000000000000000000000000000000..3713f41953be338f9a5890b7717f731e2670516e --- /dev/null +++ b/src/components/Duel/DuelUnlocked/__snapshots__/DuelUnlocked.spec.tsx.snap @@ -0,0 +1,54 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`DuelUnlocked component should be rendered correctly 1`] = ` +<div> + <div + class="duel-unlocked-container" + > + <svg + aria-hidden="true" + class="duel-icon styles__icon___23x3R" + height="219" + width="219" + > + <use + xlink:href="#test-file-stub" + /> + </svg> + <div + class="duel-description text-20-italic" + > + "Je parie un ours polaire que vous ne pouvez pas consommer moins que 0,00 € en 1 semaine" + </div> + <div + class="duel-title text-16-normal" + > + Title DUEL001 + </div> + <div + class="duel-average-info text-18-normal" + > + duel.average_info + </div> + <div + class="button-start" + > + <button + aria-label="duel.accessibility.button_start_duel" + class="MuiButtonBase-root MuiButton-root MuiButton-text btnSecondary" + tabindex="0" + type="button" + > + <span + class="MuiButton-label" + > + duel.button_start + </span> + <span + class="MuiTouchRipple-root" + /> + </button> + </div> + </div> +</div> +`; diff --git a/src/components/Duel/DuelView.spec.tsx b/src/components/Duel/DuelView.spec.tsx index 9908eb501c43b047fdac9f60389f55d9c344847e..65d11f79f881276aba6fb8bd843f170cb11f2faa 100644 --- a/src/components/Duel/DuelView.spec.tsx +++ b/src/components/Duel/DuelView.spec.tsx @@ -1,14 +1,11 @@ +import { render, waitFor } from '@testing-library/react' import DuelView from 'components/Duel/DuelView' import { UserChallengeState, UserDuelState } from 'enums' -import { mount } from 'enzyme' import React from 'react' import { Provider } from 'react-redux' import { challengeStateData } from 'tests/__mocks__/challengeStateData.mock' import { createMockEcolyoStore, mockChartState } from 'tests/__mocks__/store' import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock' -import DuelError from './DuelError/DuelError' -import DuelOngoing from './DuelOngoing/DuelOngoing' -import DuelUnlocked from './DuelUnlocked/DuelUnlocked' jest.mock('components/Header/CozyBar', () => 'mock-cozybar') jest.mock('components/Header/Header', () => 'mock-header') @@ -22,17 +19,19 @@ jest.mock('react-router-dom', () => ({ })) describe('DuelView component', () => { - it('should be rendered with DuelError component when no current challenge', () => { + it('should be rendered with DuelError component with no current challenge', () => { const store = createMockEcolyoStore({ challenge: challengeStateData }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelError).exists()).toBeTruthy() + expect( + container.getElementsByClassName('duel-error-container').length + ).toBeTruthy() }) - it('should be rendered with DuelOngoing component when current challenge with state = duel and duel state = done', () => { + it('should be rendered with DuelOngoing component when current challenge with state = duel and duel state = done', async () => { const updatedUserChallenge = { ...userChallengeData[1], state: UserChallengeState.DUEL, @@ -48,12 +47,15 @@ describe('DuelView component', () => { challenge: updatedChallengeState, chart: mockChartState, }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelOngoing).exists()).toBeTruthy() + await waitFor(() => null, { container }) + expect( + container.getElementsByClassName('duel-ongoing-container').length + ).toBeTruthy() }) it('should be rendered with DuelError component when current challenge with state = duel and duel state = locked', () => { @@ -69,12 +71,14 @@ describe('DuelView component', () => { } updatedChallengeState.userChallengeList[1] = updatedUserChallenge const store = createMockEcolyoStore({ challenge: updatedChallengeState }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelError).exists()).toBeTruthy() + expect( + container.getElementsByClassName('duel-error-container').length + ).toBeTruthy() }) it('should be rendered with DuelError component when current challenge with state != duel', () => { @@ -89,12 +93,14 @@ describe('DuelView component', () => { } updatedChallengeState.userChallengeList[1] = updatedUserChallenge const store = createMockEcolyoStore({ challenge: updatedChallengeState }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelError).exists()).toBeTruthy() + expect( + container.getElementsByClassName('duel-error-container').length + ).toBeTruthy() }) it('should be rendered with DuelUnlocked component when current challenge with state = duel and duel state = unlocked', () => { @@ -110,12 +116,14 @@ describe('DuelView component', () => { } updatedChallengeState.userChallengeList[1] = updatedUserChallenge const store = createMockEcolyoStore({ challenge: updatedChallengeState }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelUnlocked).exists()).toBeTruthy() + expect( + container.getElementsByClassName('duel-unlocked-container').length + ).toBeTruthy() }) it('should be rendered with DuelOngoing component when current challenge with state = duel and duel state = ongoing', () => { @@ -134,11 +142,13 @@ describe('DuelView component', () => { challenge: updatedChallengeState, chart: mockChartState, }) - const wrapper = mount( + const { container } = render( <Provider store={store}> <DuelView /> </Provider> ) - expect(wrapper.find(DuelOngoing).exists()).toBeTruthy() + expect( + container.getElementsByClassName('duel-ongoing-container').length + ).toBeTruthy() }) }) diff --git a/src/components/Ecogesture/EcogestureTabsView.spec.tsx b/src/components/Ecogesture/EcogestureTabsView.spec.tsx index 4f90bd9c3dc01bab95999eebcce39cf63909699a..e0b184d524c1f7ee70872291c75a57b33f828434 100644 --- a/src/components/Ecogesture/EcogestureTabsView.spec.tsx +++ b/src/components/Ecogesture/EcogestureTabsView.spec.tsx @@ -12,21 +12,17 @@ import EcogestureEmptyList from './EcogestureEmptyList/EcogestureEmptyList' import EcogestureInitModal from './EcogestureInitModal/EcogestureInitModal' const mockGetAllEcogestures = jest.fn() -const mockGetEcogestureListByProfile = jest.fn().mockResolvedValue([]) -const mockInitEcogesture = jest.fn().mockResolvedValue(mockedEcogesturesData) jest.mock('services/ecogesture.service', () => { return jest.fn(() => ({ getAllEcogestures: mockGetAllEcogestures, - getEcogestureListByProfile: mockGetEcogestureListByProfile, - initEcogesture: mockInitEcogesture, + getEcogestureListByProfile: jest.fn().mockResolvedValue([]), + initEcogesture: jest.fn().mockResolvedValue(mockedEcogesturesData), })) }) -const mockGetProfile = jest.fn() -const mockUpdateProfile = jest.fn() jest.mock('services/profile.service', () => { return jest.fn(() => ({ - getProfile: mockGetProfile, - updateProfile: mockUpdateProfile, + getProfile: jest.fn(), + updateProfile: jest.fn(), })) }) diff --git a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx index 98fd1a4772a1e78c1d384f53d8ec9f24bc1f8da8..5b2b12e46d94f301c01a33087a0e0826b4fcbe0a 100644 --- a/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx +++ b/src/components/EcogestureSelection/EcogestureSelectionDetail/EcogestureSelectionDetail.spec.tsx @@ -17,7 +17,6 @@ describe('EcogestureSelectionDetail component', () => { /> ) await waitFor(() => null, { container }) - // await waitForComponentToPaint(wrapper) expect(container).toMatchSnapshot() })