From 48ac8d1136c24376248cdece3d4bfdda1fd003c8 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Thu, 2 Dec 2021 23:12:48 -0500 Subject: [PATCH] Add test for get bulk rating --- src/app.ts | 1 + src/utils/queryCacher.ts | 1 + test/cases/ratings/getRating.ts | 39 +++++++++++++++++++++++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/app.ts b/src/app.ts index ee0ab8c..cb0f2c6 100644 --- a/src/app.ts +++ b/src/app.ts @@ -193,6 +193,7 @@ function setupRoutes(router: Router) { // ratings router.get("/api/ratings/rate/:prefix", getRating); + router.get("/api/ratings/rate", getRating); router.post("/api/ratings/rate", postRateEndpoints); router.post("/api/ratings/clearCache", ratingPostClearCache); diff --git a/src/utils/queryCacher.ts b/src/utils/queryCacher.ts index be7c21d..34fc1a0 100644 --- a/src/utils/queryCacher.ts +++ b/src/utils/queryCacher.ts @@ -20,6 +20,7 @@ async function get(fetchFromDB: () => Promise, key: string): Promise { const data = await fetchFromDB(); redis.setAsync(key, JSON.stringify(data)); + return data; } diff --git a/test/cases/ratings/getRating.ts b/test/cases/ratings/getRating.ts index ee82f23..3ba3909 100644 --- a/test/cases/ratings/getRating.ts +++ b/test/cases/ratings/getRating.ts @@ -5,18 +5,25 @@ import { client } from "../../utils/httpClient"; import { AxiosResponse } from "axios"; import { partialDeepEquals } from "../../utils/partialDeepEquals"; -const endpoint = "/api/ratings/rate/"; -const getRating = (hash: string, params?: unknown): Promise => client.get(endpoint + hash, { params }); +const endpoint = "/api/ratings/rate"; +const getRating = (hash: string, params?: unknown): Promise => client.get(`${endpoint}/${hash}`, { params }); +const getBulkRating = (hashes: string[], params?: any): Promise => client.get(endpoint, { params: { ...params, prefix: hashes } }); const videoOneID = "some-likes-and-dislikes"; const videoOneIDHash = getHash(videoOneID, 1); const videoOnePartialHash = videoOneIDHash.substr(0, 4); +const videoTwoID = "some-likes-and-dislikes-2"; +const videoTwoIDHash = getHash(videoTwoID, 1); +const videoTwoPartialHash = videoTwoIDHash.substr(0, 4); describe("getRating", () => { before(async () => { const insertUserNameQuery = 'INSERT INTO "ratings" ("videoID", "service", "type", "count", "hashedVideoID") VALUES (?, ?, ?, ?, ?)'; await db.prepare("run", insertUserNameQuery, [videoOneID, "YouTube", 0, 5, videoOneIDHash]); await db.prepare("run", insertUserNameQuery, [videoOneID, "YouTube", 1, 10, videoOneIDHash]); + + await db.prepare("run", insertUserNameQuery, [videoTwoID, "YouTube", 0, 20, videoTwoIDHash]); + await db.prepare("run", insertUserNameQuery, [videoTwoID, "YouTube", 1, 30, videoTwoIDHash]); }); it("Should be able to get dislikes and likes by default", (done) => { @@ -51,6 +58,34 @@ describe("getRating", () => { .catch(err => done(err)); }); + it("Should be able to bulk fetch", (done) => { + getBulkRating([videoOnePartialHash, videoTwoPartialHash]) + .then(res => { + assert.strictEqual(res.status, 200); + const expected = [{ + type: 0, + count: 20, + hash: videoTwoIDHash, + }, + { + type: 1, + count: 30, + hash: videoTwoIDHash, + }, { + type: 0, + count: 5, + hash: videoOneIDHash, + }, { + type: 1, + count: 10, + hash: videoOneIDHash, + }]; + assert.ok(partialDeepEquals(res.data, expected)); + done(); + }) + .catch(err => done(err)); + }); + it("Should return 400 for invalid hash", (done) => { getRating("a") .then(res => {