From dd74dd3b1b0812eade52dd4a7dbe795a1e123a48 Mon Sep 17 00:00:00 2001 From: Michael C Date: Mon, 21 Jun 2021 00:33:48 -0400 Subject: [PATCH 1/2] parse repeated parameters --- src/routes/getSegmentInfo.ts | 10 ++++++---- src/routes/getSkipSegments.ts | 4 +++- test/cases/getSegmentInfo.ts | 18 ++++++++++++++++++ test/cases/getSkipSegments.ts | 29 +++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/routes/getSegmentInfo.ts b/src/routes/getSegmentInfo.ts index 354102d..b9e03ea 100644 --- a/src/routes/getSegmentInfo.ts +++ b/src/routes/getSegmentInfo.ts @@ -29,10 +29,12 @@ async function getSegmentsByUUID(UUIDs: SegmentUUID[]): Promise { async function handleGetSegmentInfo(req: Request, res: Response) { // If using params instead of JSON, only one UUID can be pulled let UUIDs = req.query.UUIDs - ? JSON.parse(req.query.UUIDs as string) - : req.query.UUID - ? [req.query.UUID] - : null; + ? JSON.parse(req.query.UUIDs as string) + : req.query.UUID + ? Array.isArray(req.query.UUID) + ? req.query.UUID + : [req.query.UUID] + : null; // deduplicate with set UUIDs = [ ...new Set(UUIDs)]; // if more than 10 entries, slice diff --git a/src/routes/getSkipSegments.ts b/src/routes/getSkipSegments.ts index 0af3470..a672a4d 100644 --- a/src/routes/getSkipSegments.ts +++ b/src/routes/getSkipSegments.ts @@ -268,7 +268,9 @@ async function handleGetSegments(req: Request, res: Response): Promise { }) .catch(err => ("couldn't call endpoint")); }); + + it('Should be able to retreive multiple segments with multiple parameters', (done: Done) => { + fetch(getbaseURL() + `/api/segmentInfo?UUID=${upvotedID}&UUID=${downvotedID}`) + .then(async res => { + if (res.status !== 200) done("Status code was: " + res.status); + else { + const data = await res.json(); + if (data.length === 2 && + (data[0].videoID === "upvoted" && data[0].votes === 2) && + (data[1].videoID === "downvoted" && data[1].votes === -2)) { + done(); + } else { + done("Received incorrect body: " + (await res.text())); + } + } + }) + .catch(err => "Couldn't call endpoint"); + }); }); diff --git a/test/cases/getSkipSegments.ts b/test/cases/getSkipSegments.ts index d7e914f..839e0db 100644 --- a/test/cases/getSkipSegments.ts +++ b/test/cases/getSkipSegments.ts @@ -264,4 +264,33 @@ describe('getSkipSegments', () => { .catch(err => ("Couldn't call endpoint")); }); + it('Should be able to get multiple categories with repeating parameters', (done: Done) => { + fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&category=sponsor&category=intro") + .then(async res => { + if (res.status !== 200) done("Status code was: " + res.status); + else { + const body = await res.text(); + const data = JSON.parse(body); + if (data.length === 2) { + + let success = true; + for (const segment of data) { + if ((segment.segment[0] !== 20 || segment.segment[1] !== 33 + || segment.category !== "intro" || segment.UUID !== "1-uuid-2") && + (segment.segment[0] !== 1 || segment.segment[1] !== 11 + || segment.category !== "sponsor" || segment.UUID !== "1-uuid-0")) { + success = false; + break; + } + } + + if (success) done(); + else done("Received incorrect body: " + body); + } else { + done("Received incorrect body: " + body); + } + } + }) + .catch(err => ("Couldn't call endpoint")); + }); }); From 0b248714157775696f258a79571b1b5e8f4cd9a5 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 21 Jun 2021 18:42:54 -0400 Subject: [PATCH 2/2] Fix comment in reputation test --- test/cases/reputation.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cases/reputation.ts b/test/cases/reputation.ts index 77b4179..6c1e861 100644 --- a/test/cases/reputation.ts +++ b/test/cases/reputation.ts @@ -31,7 +31,7 @@ describe('reputation', () => { await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-1-uuid-6', '${getHash(userIDHighDownvotes)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`); await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-1-uuid-7', '${getHash(userIDHighDownvotes)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`); - // Each downvote is on a different video (ie. they didn't resubmit to fix their downvote) + // First video is considered a normal downvote, second is considered a self-downvote (ie. they didn't resubmit to fix their downvote) await db.prepare("run", startOfQuery + `('${videoID}A', 1, 11, 2, 0, 'reputation-1-1-uuid-0', '${getHash(userIDHighNonSelfDownvotes)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`); // Different category, same video await db.prepare("run", startOfQuery + `('${videoID}A', 1, 11, -2, 0, 'reputation-1-1-uuid-1', '${getHash(userIDHighNonSelfDownvotes)}', 1606240000000, 50, 'intro', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`); @@ -120,4 +120,4 @@ describe('reputation', () => { assert.strictEqual(await getReputation(getHash(userIDHighRepAndLocked)), 1.8413793103448277); }); -}); \ No newline at end of file +});