diff --git a/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.test.ts b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.test.ts new file mode 100644 index 000000000..6ab998f0f --- /dev/null +++ b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.test.ts @@ -0,0 +1,32 @@ +import t from "tap"; +import expMiddlewareMock from "express-request-mock"; +import { ValidateKaiType } from "./middleware"; + +t.test("#ValidateKaiType", (t) => { + const k = async (k: string) => { + const { res } = await expMiddlewareMock(ValidateKaiType, { params: { kaiType: k } }); + + return res.statusCode; + }; + + t.test("Should allow flo, eag or min, case insensitively.", async (t) => { + t.equal(await k("flo"), 200); + t.equal(await k("eag"), 200); + t.equal(await k("min"), 200); + t.equal(await k("FLO"), 200); + t.equal(await k("EAG"), 200); + t.equal(await k("MIN"), 200); + t.equal(await k("FlO"), 200); + t.equal(await k("EaG"), 200); + t.equal(await k("MiN"), 200); + t.equal(await k("nonsense"), 400); + t.equal(await k("bad"), 400); + t.equal(await k(""), 400); + t.equal(await k("FLO2"), 400); + t.equal(await k("2FLO"), 400); + + t.end(); + }); + + t.end(); +}); diff --git a/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.ts b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.ts index 704a5a10b..34f1b9253 100644 --- a/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.ts +++ b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/middleware.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; export const ValidateKaiType: RequestHandler = (req, res, next) => { - if (!["min", "flo", "eag"].includes(req.params.kaiType)) { + if (!["min", "flo", "eag"].includes(req.params.kaiType.toLowerCase())) { return res.status(400).json({ success: false, description: `Invalid kaiType - Expected min, flo or eag.`, diff --git a/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.test.ts b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.test.ts new file mode 100644 index 000000000..83fae9216 --- /dev/null +++ b/server/src/server/router/api/v1/users/_userID/integrations/kai/_kaiType/router.test.ts @@ -0,0 +1,68 @@ +import db from "external/mongo/db"; +import t from "tap"; +import { CloseAllConnections } from "test-utils/close-connections"; +import { CreateFakeAuthCookie } from "test-utils/fake-auth"; +import mockApi from "test-utils/mock-api"; +import ResetDBState from "test-utils/resets"; + +t.test("GET /api/v1/users/:userID/integrations/kai/:kaiType", async (t) => { + t.beforeEach(ResetDBState); + + const cookie = await CreateFakeAuthCookie(mockApi); + + t.test("Should return false if unauthed with this kaiType", async (t) => { + const res = await mockApi.get("/api/v1/users/1/integrations/kai/flo").set("Cookie", cookie); + + t.equal(res.statusCode, 200); + t.equal(res.body.body.authStatus, false); + + t.end(); + }); + + t.test("Should return true if authed with this kaiType", async (t) => { + await db["kai-auth-tokens"].insert({ + refreshToken: "refresh", + service: "FLO", + token: "bar", + userID: 1, + }); + + const res = await mockApi.get("/api/v1/users/1/integrations/kai/flo").set("Cookie", cookie); + + t.equal(res.statusCode, 200); + t.equal(res.body.body.authStatus, true); + + t.end(); + }); + + t.test("Should return the auth status of this user specifically.", async (t) => { + await db["kai-auth-tokens"].insert([ + { + refreshToken: "refresh", + service: "EAG", + token: "bar", + userID: 1, + }, + { + refreshToken: "refresh", + service: "FLO", + token: "baz", + userID: 2, + }, + ]); + + const res = await mockApi.get("/api/v1/users/1/integrations/kai/flo").set("Cookie", cookie); + + t.equal(res.statusCode, 200); + t.equal(res.body.body.authStatus, false); + + t.end(); + }); + + t.end(); +}); + +// test is currently undoable due to issues with mocking out real Fetch calls. +t.todo("PATCH /api/v1/userse/:userID/integrations/kai/:kaiType/oauth2callback"); + +t.teardown(CloseAllConnections); diff --git a/server/src/test-utils/mock-db/kai-auth-tokens.json b/server/src/test-utils/mock-db/kai-auth-tokens.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/server/src/test-utils/mock-db/kai-auth-tokens.json @@ -0,0 +1 @@ +[] \ No newline at end of file