feat: guard against empty terms in createGameSession

This commit is contained in:
lila 2026-04-28 15:08:06 +02:00
parent 1e30f04e81
commit 3d16ab0fff
4 changed files with 62 additions and 0 deletions

View file

@ -110,6 +110,15 @@ describe("POST /api/v1/game/start", () => {
expect(res.status).toBe(400);
expect(body.success).toBe(false);
});
it("returns 404 when no terms are found for the given filters", async () => {
mockGetGameTerms.mockResolvedValue([]);
const res = await request(app).post("/api/v1/game/start").send(validBody);
const body = res.body as ErrorResponse;
expect(res.status).toBe(404);
expect(body.success).toBe(false);
});
});
describe("POST /api/v1/game/answer", () => {

View file

@ -273,4 +273,12 @@ describe("evaluateAnswer", () => {
),
).rejects.toThrow("Game session not found");
});
it("throws NotFoundError when getGameTerms returns no terms", async () => {
mockGetGameTerms.mockResolvedValue([]);
await expect(
createGameSession(validRequest, store, "user-1"),
).rejects.toThrow("No terms found");
});
});

View file

@ -25,6 +25,10 @@ export const createGameSession = async (
request.rounds,
);
if (terms.length === 0) {
throw new NotFoundError("No terms found for the given filters");
}
const answerKey = new Map<string, number>();
const questions: GameQuestion[] = await Promise.all(