From 3f026409cdfffd2451361c708263cf38c34951e3 Mon Sep 17 00:00:00 2001 From: mini-bomba <55105495+mini-bomba@users.noreply.github.com> Date: Mon, 29 Jul 2024 02:11:30 +0200 Subject: [PATCH] Don't show completely unrelated chapter suggestions Chapter suggestions should be at least slightly related to what the user has already typed. This change stops the server from sending suggestions that postgresql deems to be "less than 10% similar" Also modified tests to reflect this change. --- src/routes/getChapterNames.ts | 3 ++- test/cases/getChapterNames.ts | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/routes/getChapterNames.ts b/src/routes/getChapterNames.ts index c40030a6..e78cc84e 100644 --- a/src/routes/getChapterNames.ts +++ b/src/routes/getChapterNames.ts @@ -27,10 +27,11 @@ export async function getChapterNames(req: Request, res: Response): Promise= 0.1 GROUP BY "description" ORDER BY SUM("votes"), similarity("description", ?) DESC LIMIT 5;` - , [channelID, description]) as { description: string }[]; + , [channelID, description, description]) as { description: string }[]; if (descriptions?.length > 0) { return res.status(200).json(descriptions.map(d => ({ diff --git a/test/cases/getChapterNames.ts b/test/cases/getChapterNames.ts index 01bb7c53..df386acb 100644 --- a/test/cases/getChapterNames.ts +++ b/test/cases/getChapterNames.ts @@ -16,17 +16,18 @@ describe("getChapterNames", function () { "Weird name", "A different one", "Something else", + "Weirder name", ]; - const nameSearch = (query: string, expected: string): Promise => { + const nameSearch = (query: string, expected: string | null, expectedResults: number): Promise => { const expectedData = [{ description: expected }]; return client.get(`${endpoint}?description=${query}&channelID=${chapterChannelID}`) .then(res => { - assert.strictEqual(res.status, 200); - assert.strictEqual(res.data.length, chapterNames.length); - assert.ok(partialDeepEquals(res.data, expectedData)); + assert.strictEqual(res.status, expectedResults == 0 ? 404 : 200); + assert.strictEqual(res.data.length, expectedResults); + if (expected != null) assert.ok(partialDeepEquals(res.data, expectedData)); }); }; @@ -35,11 +36,13 @@ describe("getChapterNames", function () { await insertChapter(db, chapterNames[0], { videoID: chapterNamesVid1, startTime: 60, endTime: 80 }); await insertChapter(db, chapterNames[1], { videoID: chapterNamesVid1, startTime: 70, endTime: 75 }); await insertChapter(db, chapterNames[2], { videoID: chapterNamesVid1, startTime: 71, endTime: 76 }); + await insertChapter(db, chapterNames[3], { videoID: chapterNamesVid1, startTime: 72, endTime: 77 }); await insertVideoInfo(db, chapterNamesVid1, chapterChannelID); }); - it("Search for 'weird'", () => nameSearch("weird", chapterNames[0])); - it("Search for 'different'", () => nameSearch("different", chapterNames[1])); - it("Search for 'something'", () => nameSearch("something", chapterNames[2])); -}); \ No newline at end of file + it("Search for 'weird' (2 results)", () => nameSearch("weird", chapterNames[0], 2)); + it("Search for 'different' (1 result)", () => nameSearch("different", chapterNames[1], 1)); + it("Search for 'something' (1 result)", () => nameSearch("something", chapterNames[2], 1)); + it("Search for 'unrelated' (0 result)", () => nameSearch("unrelated", null, 0)); +});