Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Allow adding Friend and Foe cards to turn order #527

Merged
merged 1 commit into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 48 additions & 6 deletions src/Redux/Store/TurnOrder/Configuration/__test__/helpers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import {

const mockConfiguration: State = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup: AERData.turnordersetups['fourPlayers'].variations['default'],
}
Expand All @@ -38,6 +40,46 @@ describe('adjustSetup()', () => {
const defaultVariation =
AERData.turnordersetups.twoPlayers.variations['default']

it('should add friend card', () => {
const expected = {
id: 'default',
name: 'Default',
turnOrderCards: [
AERData.turnordercards['player1-1'],
AERData.turnordercards['player1-2'],
AERData.turnordercards['player2-1'],
AERData.turnordercards['player2-2'],
AERData.turnordercards['nemesis-1'],
AERData.turnordercards['nemesis-2'],
AERData.turnordercards['friend'],
],
}

const result = adjustSetup('Default', true, false, defaultVariation)

expect(result).toEqual(expected)
})

it('should add foe card', () => {
const expected = {
id: 'default',
name: 'Default',
turnOrderCards: [
AERData.turnordercards['player1-1'],
AERData.turnordercards['player1-2'],
AERData.turnordercards['player2-1'],
AERData.turnordercards['player2-2'],
AERData.turnordercards['nemesis-1'],
AERData.turnordercards['nemesis-2'],
AERData.turnordercards['foe'],
],
}

const result = adjustSetup('Default', false, true, defaultVariation)

expect(result).toEqual(expected)
})

it('should return the default variation of tocs for 2 players', () => {
const expected = {
id: 'default',
Expand All @@ -52,7 +94,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Default', defaultVariation)
const result = adjustSetup('Default', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand All @@ -71,7 +113,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Maelstrom', defaultVariation)
const result = adjustSetup('Maelstrom', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand All @@ -90,7 +132,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Blitz', defaultVariation)
const result = adjustSetup('Blitz', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand All @@ -109,7 +151,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Blitz + Maelstrom', defaultVariation)
const result = adjustSetup('Blitz + Maelstrom', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand All @@ -128,7 +170,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Thief Of Dreams', defaultVariation)
const result = adjustSetup('Thief Of Dreams', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand All @@ -147,7 +189,7 @@ describe('adjustSetup()', () => {
],
}

const result = adjustSetup('Paradox of Myth and Bone', defaultVariation)
const result = adjustSetup('Paradox of Myth and Bone', false, false, defaultVariation)

expect(result).toEqual(expected)
})
Expand Down
42 changes: 42 additions & 0 deletions src/Redux/Store/TurnOrder/Configuration/__test__/reducer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import {

const mockConfiguration: State = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup: AERData.turnordersetups['fourPlayers'].variations['default'],
}
Expand All @@ -31,6 +33,8 @@ describe('TurnOrder | Configuration | reducer', () => {
it('should handle SET_MODE', () => {
const expected = {
Mode: 'Maelstrom',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
Expand All @@ -41,9 +45,41 @@ describe('TurnOrder | Configuration | reducer', () => {
expect(getModel(result)).toEqual(expected)
})

it('should handle SET_FRIEND', () => {
const expected = {
Mode: 'Blitz',
Friend: true,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
}

const result = Reducer(mockConfiguration, actions.setFriend(true))

expect(getModel(result)).toEqual(expected)
})

it('should handle SET_FOE', () => {
const expected = {
Mode: 'Blitz',
Friend: false,
Foe: true,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
}

const result = Reducer(mockConfiguration, actions.setFoe(true))

expect(getModel(result)).toEqual(expected)
})

it('should handle SELECT_PLAYER_COUNT', () => {
const expected = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['twoPlayers'],
SelectedSetup:
AERData.turnordersetups['twoPlayers'].variations['default'],
Expand All @@ -60,6 +96,8 @@ describe('TurnOrder | Configuration | reducer', () => {
it('should handle SELECT_PLAYER_COUNT when player count is undefined', () => {
const expected = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
Expand All @@ -77,6 +115,8 @@ describe('TurnOrder | Configuration | reducer', () => {
it('should handle SELECT_SETUP', () => {
const expected = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['splitPlayers'],
Expand All @@ -93,6 +133,8 @@ describe('TurnOrder | Configuration | reducer', () => {
it('should handle SELECT_SETUP when setup does not exist for player count', () => {
const expected = {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
Expand Down
46 changes: 46 additions & 0 deletions src/Redux/Store/TurnOrder/Configuration/__test__/selectors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@ import AERData from 'aer-data/src/index'

import {
ModeStateSlice,
FriendStateSlice,
FoeStateSlice,
SelectedPlayerCountStateSlice,
SelectedSetupStateSlice,
} from '../types'

import { selectors } from 'Redux/Store/TurnOrder/Configuration/selectors'

const mockConfiguration: ModeStateSlice &
FriendStateSlice &
FoeStateSlice &
SelectedPlayerCountStateSlice &
SelectedSetupStateSlice = {
TurnOrder: {
Configuration: {
Mode: 'Blitz',
Friend: false,
Foe: false,
SelectedPlayerCount: AERData.turnordersetups['fourPlayers'],
SelectedSetup:
AERData.turnordersetups['fourPlayers'].variations['default'],
Expand Down Expand Up @@ -103,6 +109,46 @@ describe('TurnOrder | Configuration | selectors', () => {
expect(result).toEqual(expected)
})

it('should add friend card with getConfiguration()', () => {
const expected = {
id: 'default',
name: 'Default',
turnOrderCards: [
AERData.turnordercards['player1-1'],
AERData.turnordercards['player2-1'],
AERData.turnordercards['player3-1'],
AERData.turnordercards['player4-1'],
AERData.turnordercards['blitz'],
AERData.turnordercards['nemesis-2'],
AERData.turnordercards['friend'],
],
}

const result = selectors.getConfiguration({TurnOrder: {Configuration: {...mockConfiguration.TurnOrder.Configuration, Friend: true}}})

expect(result).toEqual(expected)
})

it('should add foe card with getConfiguration()', () => {
const expected = {
id: 'default',
name: 'Default',
turnOrderCards: [
AERData.turnordercards['player1-1'],
AERData.turnordercards['player2-1'],
AERData.turnordercards['player3-1'],
AERData.turnordercards['player4-1'],
AERData.turnordercards['blitz'],
AERData.turnordercards['nemesis-2'],
AERData.turnordercards['foe'],
],
}

const result = selectors.getConfiguration({TurnOrder: {Configuration: {...mockConfiguration.TurnOrder.Configuration, Foe: true}}})

expect(result).toEqual(expected)
})

it('should get the available cards with getAvailableCards()', () => {
const expected = [
AERData.turnordercards['player1-1'],
Expand Down
2 changes: 2 additions & 0 deletions src/Redux/Store/TurnOrder/Configuration/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import { ActionTypes } from './types'
export const actions = {
noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'),
setMode: (mode: types.Mode) => createAction(ActionTypes.SET_MODE, mode),
setFriend: (friend: boolean) => createAction(ActionTypes.SET_FRIEND, friend),
setFoe: (foe: boolean) => createAction(ActionTypes.SET_FOE, foe),
selectPlayerCount: (playerCountId: types.PlayerCountId) =>
createAction(ActionTypes.SELECT_PLAYER_COUNT, playerCountId),
selectSetup: (setupId: types.TurnorderSetupVariationId) =>
Expand Down
23 changes: 18 additions & 5 deletions src/Redux/Store/TurnOrder/Configuration/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@ const newStateWithDBWrite = (newState: State) => {
)
}

const adjustSetup = (
mode: types.Mode,
setup: types.ITurnOrderSetup
): types.ITurnOrderSetup => {
const baseSetup = (mode: types.Mode, setup: types.ITurnOrderSetup): types.ITurnOrderSetup => {
switch (mode) {
case 'Maelstrom': {
return {
Expand Down Expand Up @@ -98,9 +95,25 @@ const adjustSetup = (

case 'Default':
default: {
return setup
return {...setup}
}
}
}

const adjustSetup = (
mode: types.Mode,
friend: boolean,
foe: boolean,
setup: types.ITurnOrderSetup
): types.ITurnOrderSetup => {
const rawSetup = baseSetup(mode, setup);
if (friend) {
rawSetup.turnOrderCards = [...rawSetup.turnOrderCards, AERData.turnordercards['friend']]
}
if (foe) {
rawSetup.turnOrderCards = [...rawSetup.turnOrderCards, AERData.turnordercards['foe']]
}
return rawSetup
}

export { newStateWithDBWrite, adjustSetup }
10 changes: 10 additions & 0 deletions src/Redux/Store/TurnOrder/Configuration/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import * as reducerHelpers from './reducerHelpers'

export const initialState: State = {
Mode: INITIAL_MODE,
Friend: false,
Foe: false,
SelectedPlayerCount: INITIAL_PLAYER_SETUP,
SelectedSetup: INITIAL_VARIATION,
}
Expand All @@ -19,6 +21,14 @@ export const Reducer = (state: State = initialState, action: Action) => {
return reducerHelpers.setMode(state, action)
}

case ActionTypes.SET_FRIEND: {
return reducerHelpers.setFriend(state, action)
}

case ActionTypes.SET_FOE: {
return reducerHelpers.setFoe(state, action)
}

case ActionTypes.SELECT_PLAYER_COUNT: {
return reducerHelpers.selectPlayerCount(state, action)
}
Expand Down
16 changes: 16 additions & 0 deletions src/Redux/Store/TurnOrder/Configuration/reducerHelpers/setMode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,19 @@ export const setMode = (
const newState = { ...state, Mode: action.payload }
return newStateWithDBWrite(newState)
}

export const setFriend = (
state: State,
action: ReturnType<typeof actions.setFriend>
) => {
const newState = { ...state, Friend: action.payload }
return newStateWithDBWrite(newState)
}

export const setFoe = (
state: State,
action: ReturnType<typeof actions.setFoe>
) => {
const newState = { ...state, Foe: action.payload }
return newStateWithDBWrite(newState)
}
Loading