Skip to content

Commit

Permalink
disallow sokopath tile types in pathology
Browse files Browse the repository at this point in the history
  • Loading branch information
sspenst committed Jun 13, 2024
1 parent c9db745 commit 1f5328e
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion constants/Games.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { GameState } from '@root/helpers/gameStateHelpers';
import { isCompletePathology, isCompleteSokopath } from '@root/helpers/validators/isComplete';
import validatePathologySolution, { validatePathologyLevelValid as validatePathologyLevel } from '@root/helpers/validators/validatePathology';
import validatePathologySolution, { validatePathologyLevel } from '@root/helpers/validators/validatePathology';
import validateSokopathSolution, { validateSokopathLevel } from '@root/helpers/validators/validateSokopath';
import Level from '@root/models/db/level';
import AchievementCategory from './achievements/achievementCategory';
Expand Down
6 changes: 5 additions & 1 deletion helpers/validators/validatePathology.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export default function validatePathologySolution(directions: Direction[], level
return endIndices.includes(pos.y * level.width + pos.x);
}

export function validatePathologyLevelValid(data: string): { valid: boolean, reasons: string[] } {
export function validatePathologyLevel(data: string): { valid: boolean, reasons: string[] } {
// data must have at least ONE start and ONE end
const reasons = [];
const dataSplit = data.split('\n');
Expand All @@ -95,6 +95,10 @@ export function validatePathologyLevelValid(data: string): { valid: boolean, rea
endCount++;
}
}

if (TileTypeHelper.isOnExit(tileType)) {
reasons.push(`Invalid tile type: ${tileType}`);
}
}
}

Expand Down
12 changes: 7 additions & 5 deletions tests/helpers/helpers.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import TileType from '@root/constants/tileType';
import { generatePassword } from '@root/helpers/generatePassword';
import { parseHostname, parseSubdomain } from '@root/helpers/parseUrl';
import { validatePathologyLevelValid } from '@root/helpers/validators/validatePathology';
import { validatePathologyLevel } from '@root/helpers/validators/validatePathology';
import { validateSokopathLevel } from '@root/helpers/validators/validateSokopath';
import TestId from '../../constants/testId';
import getDifficultyEstimate from '../../helpers/getDifficultyEstimate';
Expand Down Expand Up @@ -136,14 +136,16 @@ describe('helpers/*.ts', () => {
expect(parseHostname('localhost')).toBe('localhost');
expect(parseHostname('')).toBe(null);
});
test('validatePathologyLevelValid', async () => {
test('validatePathologyLevel', async () => {
const emptyGrid = '000';
const gridWithOnlyOneStart = '00' + TileType.Player;
const gridWithOneStartAndOneEnd = '00' + TileType.Player + TileType.Exit;
const gridWithInvalidTile = '0' + TileType.PlayerOnExit + TileType.Player + TileType.Exit;

expect(validatePathologyLevelValid(emptyGrid).reasons).toMatchObject(['Must have exactly one player', 'Must have at least one exit']);
expect(validatePathologyLevelValid(gridWithOnlyOneStart).reasons).toMatchObject(['Must have at least one exit']);
expect(validatePathologyLevelValid(gridWithOneStartAndOneEnd).valid).toBe(true);
expect(validatePathologyLevel(emptyGrid).reasons).toMatchObject(['Must have exactly one player', 'Must have at least one exit']);
expect(validatePathologyLevel(gridWithOnlyOneStart).reasons).toMatchObject(['Must have at least one exit']);
expect(validatePathologyLevel(gridWithOneStartAndOneEnd).valid).toBe(true);
expect(validatePathologyLevel(gridWithInvalidTile).reasons).toMatchObject([`Invalid tile type: ${TileType.PlayerOnExit}`]);
});
test('validiateSokopathLevelValid', async () => {
const emptyGrid = '000';
Expand Down

0 comments on commit 1f5328e

Please sign in to comment.