Skip to content

Commit 638e4a3

Browse files
authored
#1 Use scoreOverride in calculateMatchResultWinner() (#2)
1 parent 24511b1 commit 638e4a3

3 files changed

Lines changed: 60 additions & 0 deletions

File tree

src/battlefront/_shared/helpers/calculateMatchResultWinner.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,41 @@ describe('calculateMatchResultWinner', () => {
109109

110110
expect(result).toBeUndefined();
111111
});
112+
113+
describe('when a score override is provided', () => {
114+
const mission = {
115+
attacker: 'battle_plan' as const,
116+
firstTurn: 'attacker' as const,
117+
victoryConditions: [],
118+
} as MissionData;
119+
const attacker = 0;
120+
const outcomeType = MatchOutcomeType.ForceBroken;
121+
122+
it('should return 0 when player 0 has the higher-scoring player.', () => {
123+
const result = calculateMatchResultWinner(mission, attacker, outcomeType, {
124+
player0Score: 9,
125+
player1Score: 0,
126+
});
127+
128+
expect(result).toEqual(0);
129+
});
130+
131+
it('should return 1 when player 1 has the higher-scoring player.', () => {
132+
const result = calculateMatchResultWinner(mission, attacker, outcomeType, {
133+
player0Score: 1,
134+
player1Score: 9,
135+
});
136+
137+
expect(result).toEqual(1);
138+
});
139+
140+
it('should return -1 (none) when players are tied.', () => {
141+
const result = calculateMatchResultWinner(mission, attacker, outcomeType, {
142+
player0Score: 3,
143+
player1Score: 3,
144+
});
145+
146+
expect(result).toEqual(-1);
147+
});
148+
});
112149
});

src/battlefront/_shared/helpers/calculateMatchResultWinner.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
1+
import { ScoreOverride } from '../schema/scoreOverride';
12
import { MatchOutcomeType } from '../static/matchOutcomeTypes';
23
import { MissionData } from '../types';
34

45
export const calculateMatchResultWinner = (
56
mission: MissionData | null,
67
attacker?: 0 | 1,
78
outcomeType?: MatchOutcomeType,
9+
scoreOverride?: ScoreOverride,
810
): -1 | 0 | 1 | undefined => {
11+
if (scoreOverride) {
12+
if (scoreOverride.player0Score > scoreOverride.player1Score) {
13+
return 0;
14+
}
15+
if (scoreOverride.player0Score < scoreOverride.player1Score) {
16+
return 1;
17+
}
18+
return -1;
19+
}
920
if (!mission || attacker === undefined || !outcomeType) {
1021
return undefined;
1122
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { z } from 'zod';
2+
3+
export const scoreOverride = z.object({
4+
player0Score: z.coerce.number({
5+
message: 'Please enter a score.',
6+
}).min(0),
7+
player1Score: z.coerce.number({
8+
message: 'Please enter a score.',
9+
}).min(0),
10+
});
11+
12+
export type ScoreOverride = z.infer<typeof scoreOverride>;

0 commit comments

Comments
 (0)