Skip to content
Snippets Groups Projects
challenge.slice.spec.ts 3.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { DataloadState, UserChallengeState } from 'enums'
    
    import { DateTime } from 'luxon'
    import { ChallengeState, Dataload, UserChallenge } from 'models'
    
    import { mockChallengeState } from 'tests/__mocks__/store'
    
    import {
      userChallengeData,
      userChallengeDefault,
    
    } from 'tests/__mocks__/userChallengeData.mock'
    
    import {
      challengeSlice,
      setChallengeConsumption,
      setUserChallengeList,
      unlockNextUserChallenge,
      updateUserChallengeList,
    } from './challenge.slice'
    
    describe('challenge reducer', () => {
      it('should return the initial state', () => {
        const state = challengeSlice.reducer(undefined, { type: undefined })
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
        expect(state).toEqual(mockChallengeState)
    
      })
    
      it('should handle setUserChallengeList', () => {
        const state = challengeSlice.reducer(
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
          mockChallengeState,
    
          setUserChallengeList(userChallengeData)
        )
        const expectedResult: ChallengeState = {
          userChallengeList: userChallengeData,
          currentChallenge: userChallengeData[2],
          currentDataload: [],
        }
        expect(state).toEqual(expectedResult)
      })
    
    
      it('should handle updateUserChallengeList', () => {
    
        const updatedMockInitialChallengeState = {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
          ...mockChallengeState,
    
          userChallengeList: userChallengeDefault,
        }
        const updatedUserChallenge: UserChallenge = {
          ...userChallengeDefault[0],
          state: UserChallengeState.ONGOING,
        }
        const state = challengeSlice.reducer(
          updatedMockInitialChallengeState,
          updateUserChallengeList(updatedUserChallenge)
        )
        const expectedResult: ChallengeState = {
          userChallengeList: [
            updatedUserChallenge,
            ...userChallengeDefault.slice(1),
          ],
          currentChallenge: updatedUserChallenge,
          currentDataload: [],
        }
        expect(state).toEqual(expectedResult)
      })
    
    
      it('should handle unlockNextUserChallenge', () => {
    
        const updatedMockInitialChallengeState = {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
          ...mockChallengeState,
    
          userChallengeList: userChallengeDefault,
        }
        const updatedUserChallenge: UserChallenge = {
          ...userChallengeDefault[0],
          state: UserChallengeState.DONE,
        }
        const unlockedUserChallenge: UserChallenge = {
          ...userChallengeDefault[1],
          state: UserChallengeState.UNLOCKED,
        }
        const state = challengeSlice.reducer(
          updatedMockInitialChallengeState,
          unlockNextUserChallenge(updatedUserChallenge)
        )
    
        const expectedResult: ChallengeState = {
          userChallengeList: [
            updatedUserChallenge,
            unlockedUserChallenge,
            ...userChallengeDefault.slice(2, 6),
          ],
          currentChallenge: null,
          currentDataload: [],
        }
        expect(state).toEqual(expectedResult)
      })
    
    
      it('should handle SET_CHALLENGE_CONSUMPTION', () => {
    
        const updatedMockInitialChallengeState = {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
          ...mockChallengeState,
    
          userChallengeList: userChallengeDefault,
        }
        const dataload: Dataload[] = [
          {
            date: DateTime.fromISO('2020-10-01T00:00:00.000Z', {
              zone: 'utc',
            }),
            value: 20,
            valueDetail: [
              { state: DataloadState.VALID, value: 5.0 },
              { state: DataloadState.VALID, value: 10.0 },
              { state: DataloadState.VALID, value: 5.0 },
            ],
            state: DataloadState.VALID,
          },
        ]
        const updatedUserChallenge: UserChallenge = {
          ...userChallengeDefault[0],
          duel: {
            ...userChallengeDefault[0].duel,
            userConsumption: 20,
          },
        }
        const expectedResult: ChallengeState = {
          userChallengeList: [
            updatedUserChallenge,
            ...userChallengeDefault.slice(1, 6),
          ],
          currentChallenge: null,
          currentDataload: dataload,
        }
        const state = challengeSlice.reducer(
          updatedMockInitialChallengeState,
          setChallengeConsumption({
            userChallenge: updatedUserChallenge,
            currentDataload: dataload,
          })
        )
        expect(state).toEqual(expectedResult)
      })
    })