From 9477a806734156ece27ff9c19ffa772abda67855 Mon Sep 17 00:00:00 2001 From: zkldi Date: Fri, 28 May 2021 12:03:57 +0100 Subject: [PATCH] Fervidex Class/Submit tests Fixes #108 --- .../server/router/ir/fervidex/router.test.ts | 108 ++++++++++++++++++ .../src/server/router/ir/fervidex/router.ts | 9 +- 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/server/src/server/router/ir/fervidex/router.test.ts b/server/src/server/router/ir/fervidex/router.test.ts index bd9727453..32f44e8d7 100644 --- a/server/src/server/router/ir/fervidex/router.test.ts +++ b/server/src/server/router/ir/fervidex/router.test.ts @@ -108,6 +108,114 @@ t.test("POST /ir/fervidex/class/submit", async (t) => { // @todo #108 TestHeaders("/ir/fervidex/class/submit", cookie, {}); + t.test("Should update a users class.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: 18, play_style: 0 }); + + t.equal(res.status, 200); + t.equal(res.body.success, true); + t.equal(res.body.description, "Dan changed!"); + + const ugs = await db["game-stats"].findOne({ userID: 1, game: "iidx", playtype: "SP" }); + + t.equal(ugs?.classes.dan, 18); + + t.end(); + }); + + t.test("Should update a users class for DP.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: 17, play_style: 1 }); + + t.equal(res.status, 200); + t.equal(res.body.success, true); + t.equal(res.body.description, "Dan changed!"); + + const ugs = await db["game-stats"].findOne({ userID: 1, game: "iidx", playtype: "DP" }); + + t.equal(ugs?.classes.dan, 17); + + t.end(); + }); + + t.test("Should ignore dans that weren't cleared.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: false, course_id: 17, play_style: 1 }); + + t.equal(res.status, 200); + t.equal(res.body.description, "No Update Made."); + + t.end(); + }); + + t.test("Should reject invalid dans.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: null, play_style: 1 }); + + t.equal(res.status, 400); + t.match(res.body.description, /Invalid course_id/u); + + t.end(); + }); + + t.test("Should reject invalid numerical dans.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: 20, play_style: 1 }); + + t.equal(res.status, 400); + t.match(res.body.description, /Invalid course_id 20/u); + + t.end(); + }); + + t.test("Should reject invalid negative dans.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: -1, play_style: 1 }); + + t.equal(res.status, 400); + t.match(res.body.description, /Invalid course_id -1/u); + + t.end(); + }); + + t.test("Should reject invalid play_styles.", async (t) => { + const res = await mockApi + .post("/ir/fervidex/class/submit") + .set("Cookie", cookie) + .set("User-Agent", "fervidex/1.3.0") + .set("X-Software-Model", "LDJ:J:B:A:2020092900") + .send({ cleared: true, course_id: 16, play_style: null }); + + t.equal(res.status, 400); + t.match(res.body.description, /Invalid play_style/u); + + t.end(); + }); + t.beforeEach(ResetDBState); t.end(); diff --git a/server/src/server/router/ir/fervidex/router.ts b/server/src/server/router/ir/fervidex/router.ts index a71fd4ab5..dc8defbda 100644 --- a/server/src/server/router/ir/fervidex/router.ts +++ b/server/src/server/router/ir/fervidex/router.ts @@ -232,8 +232,15 @@ router.post("/class/submit", ValidateModelHeader, async (req, res) => { }); } + if (req.body.play_style !== 0 && req.body.play_style !== 1) { + return res.status(400).json({ + success: false, + description: `Invalid play_style ${req.body.playstyle}`, + }); + } + // is 0 or 1. - const playtype: Playtypes["iidx"] = req.body.playstyle ? "SP" : "DP"; + const playtype: Playtypes["iidx"] = req.body.play_style === 0 ? "SP" : "DP"; const r = await UpdateClassIfGreater( req.session.ktchi!.userID,