Skip to content
Snippets Groups Projects
Commit 6ca162c5 authored by Yoan VALLET's avatar Yoan VALLET
Browse files

feat: add setSeasonConsumption in season reducer

parent f6920695
Branches
Tags
1 merge request!147Features/init duel progress
import { UserSeasonState, UserSeasonSuccess } from 'enum/userSeason.enum'
import { Boss, BossEntity } from 'models/boss.model'
import { DateTime } from 'luxon'
import { Dataload } from 'models'
export interface SeasonState {
userSeasonList: UserSeason[]
currentSeason: UserSeason | null
currentDataload: Dataload[]
}
export interface SeasonEntity {
id: string
......
......@@ -2,11 +2,15 @@ import {
SET_USER_SEASON_LIST,
UPDATE_USER_SEASON_LIST,
UNLOCK_NEXT_USER_SEASON,
SET_SEASON_CONSUMPTION,
setUserSeasonList,
updateUserSeasonList,
unlockNextUserSeason,
setSeasonConsumption,
} from './season.actions'
import { userSeasonData } from '../../../test/__mocks__/userSeasonData.mock'
import { Dataload } from 'models'
import { DateTime } from 'luxon'
describe('season actions', () => {
it('should create an action to set userSeasonList', () => {
......@@ -32,4 +36,12 @@ describe('season actions', () => {
}
expect(unlockNextUserSeason(userSeasonData[0])).toEqual(expectedAction)
})
it('should create an action to update season with consumption in the list and set current data load', () => {
const expectedAction = {
type: SET_SEASON_CONSUMPTION,
payload: { userSeason: userSeasonData[0], currentDataload: [] },
}
expect(setSeasonConsumption(userSeasonData[0], [])).toEqual(expectedAction)
})
})
import { UserSeason } from 'models'
import { Dataload, UserSeason } from 'models'
export const SET_USER_SEASON_LIST = 'SET_USER_SEASON_LIST'
export const UPDATE_USER_SEASON_LIST = 'UPDATE_USER_SEASON_LIST'
export const UNLOCK_NEXT_USER_SEASON = 'UNLOCK_NEXT_USER_SEASON'
export const SET_SEASON_CONSUMPTION = 'SET_SEASON_CONSUMPTION'
interface SetUserSeasonList {
type: typeof SET_USER_SEASON_LIST
......@@ -19,10 +20,16 @@ interface UnlockNextUserSeason {
payload?: UserSeason
}
interface SetSeasonConsumption {
type: typeof SET_SEASON_CONSUMPTION
payload?: { userSeason: UserSeason; currentDataload: Dataload[] }
}
export type SeasonActionTypes =
| SetUserSeasonList
| UpdateUserSeason
| UnlockNextUserSeason
| SetSeasonConsumption
export function setUserSeasonList(
userSeasonList: UserSeason[]
......@@ -50,3 +57,13 @@ export function unlockNextUserSeason(
payload: userSeason,
}
}
export function setSeasonConsumption(
userSeason: UserSeason,
currentDataload: Dataload[]
): SeasonActionTypes {
return {
type: SET_SEASON_CONSUMPTION,
payload: { userSeason, currentDataload },
}
}
......@@ -3,14 +3,16 @@ import {
SET_USER_SEASON_LIST,
UPDATE_USER_SEASON_LIST,
UNLOCK_NEXT_USER_SEASON,
SET_SEASON_CONSUMPTION,
} from './season.actions'
import { SeasonState, UserSeason } from 'models'
import { Dataload, SeasonState, UserSeason } from 'models'
import { UserSeasonState } from 'enum/userSeason.enum'
import { seasonStateData } from '../../../test/__mocks__/seasonStateData.mock'
import {
userSeasonData,
userSeasonDefault,
} from '../../../test/__mocks__/userSeasonData.mock'
import { DateTime } from 'luxon'
describe('season reducer', () => {
it('should return the initial state', () => {
......@@ -27,6 +29,7 @@ describe('season reducer', () => {
const expectedResult: SeasonState = {
userSeasonList: userSeasonData,
currentSeason: userSeasonData[2],
currentDataload: [],
}
expect(result).toEqual(expectedResult)
})
......@@ -54,6 +57,7 @@ describe('season reducer', () => {
const expectedResult: SeasonState = {
userSeasonList: [updatedUserSeason, ...userSeasonDefault.slice(1)],
currentSeason: updatedUserSeason,
currentDataload: [],
}
expect(result).toEqual(expectedResult)
})
......@@ -89,6 +93,7 @@ describe('season reducer', () => {
...userSeasonDefault.slice(2, 6),
],
currentSeason: null,
currentDataload: [],
}
expect(result).toEqual(expectedResult)
})
......@@ -99,4 +104,42 @@ describe('season reducer', () => {
})
expect(result).toEqual(seasonStateData)
})
it('should handle SET_SEASON_CONSUMPTION with payload', () => {
const updatedSeasonStateData = {
...seasonStateData,
userSeasonList: userSeasonDefault,
}
const dataload: Dataload[] = [
{
date: DateTime.fromISO('2020-10-01T00:00:00.000'),
value: 20,
valueDetail: [5.0, 10.0, 5.0],
},
]
const updatedUserSeason: UserSeason = {
...userSeasonDefault[0],
boss: {
...userSeasonDefault[0].boss,
userConsumption: 20,
},
}
const expectedResult: SeasonState = {
userSeasonList: [updatedUserSeason, ...userSeasonDefault.slice(1, 6)],
currentSeason: null,
currentDataload: dataload,
}
const result = seasonReducer(updatedSeasonStateData, {
type: SET_SEASON_CONSUMPTION,
payload: { userSeason: updatedUserSeason, currentDataload: dataload },
})
expect(result).toEqual(expectedResult)
})
it('should handle SET_SEASON_CONSUMPTION without payload', () => {
const result = seasonReducer(seasonStateData, {
type: SET_SEASON_CONSUMPTION,
})
expect(result).toEqual(seasonStateData)
})
})
......@@ -3,6 +3,7 @@ import {
SET_USER_SEASON_LIST,
UPDATE_USER_SEASON_LIST,
UNLOCK_NEXT_USER_SEASON,
SET_SEASON_CONSUMPTION,
SeasonActionTypes,
} from './season.actions'
import { SeasonState } from 'models'
......@@ -11,6 +12,7 @@ import { UserSeasonState } from 'enum/userSeason.enum'
const initialState: SeasonState = {
userSeasonList: [],
currentSeason: null,
currentDataload: [],
}
export const seasonReducer: Reducer<SeasonState> = (
......@@ -75,6 +77,20 @@ export const seasonReducer: Reducer<SeasonState> = (
} else {
return state
}
case SET_SEASON_CONSUMPTION:
if (action.payload !== undefined) {
const id = action.payload.userSeason.id
const updatedList = [...state.userSeasonList]
const findIndex = updatedList.findIndex(season => season.id === id)
updatedList[findIndex] = action.payload.userSeason
return {
...state,
userSeasonList: updatedList,
currentDataload: action.payload.currentDataload,
}
} else {
return state
}
default:
return state
}
......
......@@ -4,9 +4,11 @@ import { userSeasonData } from './userSeasonData.mock'
export const seasonStateData: SeasonState = {
userSeasonList: [],
currentSeason: null,
currentDataload: [],
}
export const seasonStateDataFull: SeasonState = {
userSeasonList: userSeasonData,
currentSeason: null,
currentDataload: [],
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment