feat: add TTL to GameSessionStore, replay protection and session cleanup to evaluateAnswer
This commit is contained in:
parent
54705943fa
commit
fdeb769640
6 changed files with 218 additions and 7 deletions
|
|
@ -219,4 +219,55 @@ describe("evaluateAnswer", () => {
|
|||
"Question not found",
|
||||
);
|
||||
});
|
||||
|
||||
it("throws NotFoundError when the same question is submitted twice", async () => {
|
||||
const session = await createGameSession(validRequest, store);
|
||||
const question = session.questions[0]!;
|
||||
|
||||
await evaluateAnswer(
|
||||
{
|
||||
sessionId: session.sessionId,
|
||||
questionId: question.questionId,
|
||||
selectedOptionId: 0,
|
||||
},
|
||||
store,
|
||||
);
|
||||
|
||||
await expect(
|
||||
evaluateAnswer(
|
||||
{
|
||||
sessionId: session.sessionId,
|
||||
questionId: question.questionId,
|
||||
selectedOptionId: 0,
|
||||
},
|
||||
store,
|
||||
),
|
||||
).rejects.toThrow("Question not found");
|
||||
});
|
||||
|
||||
it("deletes the session after the last question is answered", async () => {
|
||||
const session = await createGameSession(validRequest, store);
|
||||
|
||||
for (const question of session.questions) {
|
||||
await evaluateAnswer(
|
||||
{
|
||||
sessionId: session.sessionId,
|
||||
questionId: question.questionId,
|
||||
selectedOptionId: 0,
|
||||
},
|
||||
store,
|
||||
);
|
||||
}
|
||||
|
||||
await expect(
|
||||
evaluateAnswer(
|
||||
{
|
||||
sessionId: session.sessionId,
|
||||
questionId: session.questions[0]!.questionId,
|
||||
selectedOptionId: 0,
|
||||
},
|
||||
store,
|
||||
),
|
||||
).rejects.toThrow("Game session not found");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue