Skip to content
Snippets Groups Projects
ChallengeCardUnlocked.spec.tsx 3.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { act, render, screen } from '@testing-library/react'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import { userEvent } from '@testing-library/user-event'
    
    import { FluidState, FluidType } from 'enums'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import React from 'react'
    
    import { Provider } from 'react-redux'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import {
      createMockEcolyoStore,
    
      mockChallengeState,
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      mockGlobalState,
    
    } from 'tests/__mocks__/store'
    import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import ChallengeCardUnlocked from './ChallengeCardUnlocked'
    
    const mockStartUserChallenge = jest.fn()
    
    jest.mock('services/challenge.service', () => {
    
      return jest.fn(() => ({
        startUserChallenge: mockStartUserChallenge,
      }))
    
    describe('ChallengeCardUnlocked component', () => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      const store = createMockEcolyoStore()
    
      it('should be rendered correctly', () => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        render(
    
          <Provider store={store}>
    
            <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
    
          </Provider>
        )
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(screen.getByText('Simone VEILLE')).toBeInTheDocument()
    
        expect(
          screen.getByText('challenge.card_unlocked.button_launch')
        ).toBeInTheDocument()
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(screen.queryAllByRole('dialog').length).toBeFalsy()
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      it('should display ChallengeNoFluidModal when launching challenge without configured fluid', async () => {
        render(
    
          <Provider store={store}>
    
            <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
    
          </Provider>
        )
    
        await act(async () => {
          await userEvent.click(
            screen.getByText('challenge.card_unlocked.button_launch')
          )
        })
    
        expect(screen.queryAllByRole('dialog').length).toBeTruthy()
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      it('should not display ChallengeNoFluidModal and update userChallenge when launching challenge with configured fluid', async () => {
    
        mockStartUserChallenge.mockResolvedValue(userChallengeData[0])
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        const store = createMockEcolyoStore({
          global: {
    
            ...mockGlobalState,
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
            fluidTypes: [FluidType.ELECTRICITY],
    
            fluidStatus: [
              { ...mockGlobalState.fluidStatus[0], status: FluidState.DONE },
            ],
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          },
    
          challenge: mockChallengeState,
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        render(
    
          <Provider store={store}>
    
            <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
    
          </Provider>
    
        await act(async () => {
          await userEvent.click(
            screen.getByText('challenge.card_unlocked.button_launch')
          )
        })
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(screen.queryAllByRole('dialog').length).toBeFalsy()
    
        expect(mockStartUserChallenge).toHaveBeenCalledWith(userChallengeData[0])
    
      it('should not be able to launch challenge if another one is active', () => {
    
        mockStartUserChallenge.mockResolvedValue(userChallengeData[0])
    
        const store = createMockEcolyoStore({
          global: mockGlobalState,
          challenge: {
            ...mockChallengeState,
            currentChallenge: userChallengeData[1],
          },
        })
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        render(
    
          <Provider store={store}>
            <ChallengeCardUnlocked userChallenge={userChallengeData[0]} />
          </Provider>
        )
    
        const launchBtn = screen.getByLabelText(
          'challenge.accessibility.button_launch'
        )
        expect(launchBtn).toHaveAttribute('disabled')