Skip to content

Commit cb56efb

Browse files
committed
make assert more generic
1 parent c3d4690 commit cb56efb

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed
Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
import { logger } from '../logger.js';
2-
import { getConfigValue } from '../config.js';
2+
import { getAllPuzzlesForYear } from '../validation/validatePuzzle.js';
33

44
/**
55
* Asserts that the days puzzle has the level.
66
* All days have two levels except for the last day which has one.
77
*/
8-
export const assertPuzzleHasLevel = ({ day, level } = {}) => {
9-
// no need to validate if not the last day.
10-
if (day !== getConfigValue('aoc.validation.days').at(-1)) {
11-
return true;
8+
export const assertPuzzleHasLevel = ({ year, day, level } = {}) => {
9+
const hasLevel = getAllPuzzlesForYear(year).some(
10+
(x) => x.level === level && x.day === day
11+
);
12+
if (!hasLevel) {
13+
logger.error(`Day ${day} does not have level ${level}.`);
1214
}
13-
14-
// only level one is valid on the last day.
15-
if (level !== 1) {
16-
logger.error('Day 25 only has one level.');
17-
return false;
18-
}
19-
20-
return true;
15+
return hasLevel;
2116
};

tests/actions/assertPuzzleHasLevel.test.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ import { mockConfig, mockLogger } from '../mocks.js';
33

44
// setup mocks
55
mockLogger();
6-
const { getConfigValue } = mockConfig();
6+
jest.unstable_mockModule('src/validation/validatePuzzle.js', () => ({
7+
getAllPuzzlesForYear: jest.fn(),
8+
}));
79

810
// import after mocks set up
11+
const { getAllPuzzlesForYear } = await import('../../src/validation/validatePuzzle.js');
912
const { assertPuzzleHasLevel } = await import(
1013
'../../src/actions/assertPuzzleHasLevel.js'
1114
);
@@ -15,26 +18,28 @@ describe('assertPuzzleHasLevel()', () => {
1518
jest.resetAllMocks();
1619
});
1720

18-
test('returns true if not last day', () => {
19-
const days = [1, 2, 3, 4, 5];
20-
getConfigValue.mockReturnValue(days);
21-
for (let i = 0; i < days.length - 1; i++) {
22-
const result = assertPuzzleHasLevel({ year: 2022, day: days[i], level: 1 });
21+
test('returns true if puzzle has level', () => {
22+
const puzzles = [
23+
{ year: 2022, day: 1, level: 1 },
24+
{ year: 2022, day: 1, level: 2 },
25+
{ year: 2022, day: 1, level: 3 },
26+
{ year: 2022, day: 2, level: 1 },
27+
];
28+
getAllPuzzlesForYear.mockReturnValue(puzzles);
29+
for (const puzzle of puzzles) {
30+
const result = assertPuzzleHasLevel(puzzle);
2331
expect(result).toBe(true);
2432
}
2533
});
2634

27-
test('returns false if last day and level is two', () => {
28-
const days = [1, 2, 3, 4, 5];
29-
getConfigValue.mockReturnValue(days);
30-
const result = assertPuzzleHasLevel({ year: 2022, day: days.at(-1), level: 2 });
35+
test('returns false if puzzle does not have level', () => {
36+
getAllPuzzlesForYear.mockReturnValue([
37+
{ year: 2022, day: 1, level: 1 },
38+
{ year: 2022, day: 1, level: 2 },
39+
{ year: 2022, day: 1, level: 3 },
40+
{ year: 2022, day: 2, level: 1 },
41+
]);
42+
const result = assertPuzzleHasLevel({ year: 2022, day: 1, level: 4 });
3143
expect(result).toBe(false);
3244
});
33-
34-
test('returns true if last day and level is one', () => {
35-
const days = [1, 2, 3, 4, 5];
36-
getConfigValue.mockReturnValue(days);
37-
const result = assertPuzzleHasLevel({ year: 2022, day: days.at(-1), level: 1 });
38-
expect(result).toBe(true);
39-
});
4045
});

0 commit comments

Comments
 (0)