Skip to content

Commit 162e3b4

Browse files
committed
comments
1 parent 432dcfa commit 162e3b4

File tree

2 files changed

+44
-39
lines changed

2 files changed

+44
-39
lines changed

src/services/puzzle/puzzle-router.test.ts

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
import { describe, expect, it } from "@jest/globals"; // , jest
1+
import { describe, expect, it, beforeEach } from "@jest/globals"; // , jest
22
import { StatusCode } from "status-code-enum";
33
import Models from "../../common/models";
4-
import { getAsUser, post, postAsUser } from "../../common/testTools"; // TESTER, getAsAdmin, postAsUser
4+
import { getAsUser, post, postAsUser, TESTER } from "../../common/testTools"; // TESTER, getAsAdmin, postAsUser
55
import { PuzzleAnswer, PuzzleItem } from "./puzzle-schemas";
66

77
const TESTER_PUZZLE_ITEM = {
8-
userId: "bob-the-tester101010101011",
8+
userId: TESTER.id,
99
lastCorrect: 1708812000,
1010
problemComplete: [false, false, false, false, false, false, false, false, false, false],
1111
score: 0,
1212
teamName: "tester team 1",
1313
} satisfies PuzzleItem;
1414

1515
const TESTER_CREATED_PUZZLE_ITEM = {
16-
userId: "bob-the-tester101010101011",
16+
userId: TESTER.id,
1717
problemComplete: [false, false, false, false, false, false, false, false, false, false],
1818
score: 0,
19-
teamName: "tester team 1",
19+
teamName: TESTER_PUZZLE_ITEM.teamName,
2020
};
2121

2222
const UPDATED_TESTER_PUZZLE_ITEM = {
23-
userId: "bob-the-tester101010101011",
23+
userId: TESTER.id,
2424
problemComplete: [false, true, false, false, false, false, false, false, false, false],
2525
score: 1,
26-
teamName: "tester team 1",
26+
teamName: TESTER_PUZZLE_ITEM.teamName,
2727
};
2828

2929
const TESTER_PUZZLE_ANSWER = {
@@ -44,49 +44,57 @@ describe("GET /status/", () => {
4444
});
4545

4646
describe("POST /submit/:qid/", () => {
47-
it("works for registered user, correct answer", async () => {
47+
beforeEach(async () => {
4848
await Models.PuzzleItem.create(TESTER_PUZZLE_ITEM);
4949
await Models.PuzzleAnswer.create(TESTER_PUZZLE_ANSWER);
50+
});
51+
52+
it("works for registered user, correct answer", async () => {
53+
const response = await postAsUser("/puzzle/submit/1/").send({ answer: "correct_answer" }).expect(StatusCode.SuccessOK);
54+
expect(JSON.parse(response.text)).toMatchObject(UPDATED_TESTER_PUZZLE_ITEM);
55+
});
56+
57+
it("works for registered user, already completed", async () => {
58+
await Models.PuzzleItem.updateOne(
59+
{ userId: TESTER.id },
60+
{
61+
$set: {
62+
problemComplete: UPDATED_TESTER_PUZZLE_ITEM.problemComplete,
63+
score: UPDATED_TESTER_PUZZLE_ITEM.score,
64+
},
65+
},
66+
);
5067
const response = await postAsUser("/puzzle/submit/1/").send({ answer: "correct_answer" }).expect(StatusCode.SuccessOK);
5168
expect(JSON.parse(response.text)).toMatchObject(UPDATED_TESTER_PUZZLE_ITEM);
5269
});
5370

5471
it("returns bad request error for registered user, incorrect answer", async () => {
55-
await Models.PuzzleItem.create(TESTER_PUZZLE_ITEM);
56-
await Models.PuzzleAnswer.create(TESTER_PUZZLE_ANSWER);
57-
const response = await postAsUser("/puzzle/submit/1/")
58-
.send({ answer: "incorrect_answer" })
59-
.expect(StatusCode.ClientErrorBadRequest);
60-
expect(JSON.parse(response.text)).toHaveProperty("message", "Your answer was incorrect!");
72+
await postAsUser("/puzzle/submit/1/").send({ answer: "incorrect_answer" }).expect(StatusCode.ClientErrorBadRequest);
6173
});
6274

6375
it("returns not found error for registered user, nonexistent question", async () => {
64-
await Models.PuzzleItem.create(TESTER_PUZZLE_ITEM);
65-
const response = await postAsUser("/puzzle/submit/33/")
66-
.send({ answer: "filler_answer" })
67-
.expect(StatusCode.ClientErrorNotFound);
68-
expect(JSON.parse(response.text)).toHaveProperty("message", "That question doesn't exist!");
76+
await postAsUser("/puzzle/submit/33/").send({ answer: "filler_answer" }).expect(StatusCode.ClientErrorNotFound);
77+
await postAsUser("/puzzle/submit/asdf/").send({ answer: "filler_answer" }).expect(StatusCode.ClientErrorNotFound);
6978
});
7079

7180
it("returns not found error for unregistered user", async () => {
72-
const response = await postAsUser("/puzzle/submit/1")
73-
.send({ answer: "filler_answer" })
74-
.expect(StatusCode.ClientErrorNotFound);
75-
expect(JSON.parse(response.text)).toHaveProperty("message", "That question doesn't exist!");
81+
await Models.PuzzleItem.findOneAndDelete({ userId: TESTER.id });
82+
await postAsUser("/puzzle/submit/1").send({ answer: "filler_answer" }).expect(StatusCode.ClientErrorNotFound);
7683
});
7784
});
7885

7986
describe("POST /puzzle/create/", () => {
8087
it("creates a new puzzle for authenticated user", async () => {
81-
const response = await postAsUser("/puzzle/create/").send({ teamName: "tester team 1" }).expect(StatusCode.SuccessOK);
88+
const response = await postAsUser("/puzzle/create/")
89+
.send({ teamName: TESTER_PUZZLE_ITEM.teamName })
90+
.expect(StatusCode.SuccessOK);
8291
expect(JSON.parse(response.text)).toMatchObject(TESTER_CREATED_PUZZLE_ITEM);
8392
});
8493

8594
it("returns unauthorized error for unauthenticated user", async () => {
86-
const response = await post("/puzzle/create/", undefined)
87-
.send({ teamName: "tester team 1" })
95+
await post("/puzzle/create/", undefined)
96+
.send({ teamName: TESTER_PUZZLE_ITEM.teamName })
8897
.expect(StatusCode.ClientErrorUnauthorized);
89-
expect(JSON.parse(response.text)).toHaveProperty("message", "A authorization token must be sent for this request");
9098
});
9199

92100
it("returns validation error for missing team name", async () => {

src/services/puzzle/puzzle-router.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,27 +95,24 @@ puzzleRouter.post(
9595
const qidString = req.params.qid;
9696
const { answer } = req.body;
9797

98+
const puzzle = await Models.PuzzleItem.findOne({ userId });
99+
100+
// Not yet created
101+
if (!puzzle) {
102+
return res.status(StatusCode.ClientErrorNotFound).send(PuzzleNotCreatedError);
103+
}
104+
98105
// Invalid question
99-
let qid;
100-
try {
101-
qid = parseInt(qidString, 10);
102-
} catch {
106+
const qid = parseInt(qidString, 10);
107+
if (isNaN(qid)) {
103108
return res.status(StatusCode.ClientErrorNotFound).send(PuzzleQuestionNotFoundError);
104109
}
105-
106110
const puzzleAnswer = await Models.PuzzleAnswer.findOne({ qid });
107111
if (!puzzleAnswer) {
108112
return res.status(StatusCode.ClientErrorNotFound).send(PuzzleQuestionNotFoundError);
109113
}
110114
const correctAnswer = puzzleAnswer.answer;
111115

112-
const puzzle = await Models.PuzzleItem.findOne({ userId });
113-
114-
// Not yet created
115-
if (!puzzle) {
116-
return res.status(StatusCode.ClientErrorNotFound).send(PuzzleNotCreatedError);
117-
}
118-
119116
// Already completed, good to go
120117
if (puzzle.problemComplete[qid]) {
121118
return res.status(StatusCode.SuccessOK).send(puzzle);

0 commit comments

Comments
 (0)