From feec343d5a5d180f3d18bf0b3fea0eb839843c5c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 13 Oct 2024 16:22:03 -0500 Subject: [PATCH 1/2] EventsDB: fix plaintext search queries --- src/storages/EventsDB.test.ts | 23 +++++++++++++++++++++++ src/storages/EventsDB.ts | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/storages/EventsDB.test.ts b/src/storages/EventsDB.test.ts index e19fe775..6872c1a6 100644 --- a/src/storages/EventsDB.test.ts +++ b/src/storages/EventsDB.test.ts @@ -221,3 +221,26 @@ Deno.test("throws a RelayError when querying an event with a large 'kind'", asyn 'kind filter too far into the future', ); }); + +Deno.test('NPostgres.query with search', async (t) => { + await using db = await createTestDB({ pure: true }); + const { store } = db; + + const eventA = genEvent({ kind: 1, content: 'Fediverse is vegan' }); + const eventB = genEvent({ kind: 1, content: 'Im vegan btw' }); + + await store.event(eventA); + await store.event(eventB); + + await t.step('match single event', async () => { + assertEquals(await store.query([{ search: 'Fediverse' }]), [eventA]); + }); + + await t.step('match multiple events', async () => { + assertEquals(await store.query([{ search: 'vegan' }]), [eventA, eventB]); + }); + + await t.step("don't match nonsense queries", async () => { + assertEquals(await store.query([{ search: "this shouldn't match" }]), []); + }); +}); diff --git a/src/storages/EventsDB.ts b/src/storages/EventsDB.ts index b303dad0..591a1376 100644 --- a/src/storages/EventsDB.ts +++ b/src/storages/EventsDB.ts @@ -337,7 +337,7 @@ class EventsDB extends NPostgres { // Re-serialize the search string without the domain key. :facepalm: filter.search = tokens - .filter((t) => typeof t === 'object' && t.key !== 'domain') + .filter((t) => typeof t === 'string' || typeof t === 'object' && t.key !== 'domain') .map((t) => typeof t === 'object' ? `${t.key}:${t.value}` : t) .join(' '); } From 260340c58ef1d93ba42ba11d9e14c65c4a2683a7 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 13 Oct 2024 16:41:20 -0500 Subject: [PATCH 2/2] Fix EventsDB test --- src/storages/EventsDB.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/storages/EventsDB.test.ts b/src/storages/EventsDB.test.ts index 6872c1a6..44937e41 100644 --- a/src/storages/EventsDB.test.ts +++ b/src/storages/EventsDB.test.ts @@ -226,8 +226,8 @@ Deno.test('NPostgres.query with search', async (t) => { await using db = await createTestDB({ pure: true }); const { store } = db; - const eventA = genEvent({ kind: 1, content: 'Fediverse is vegan' }); - const eventB = genEvent({ kind: 1, content: 'Im vegan btw' }); + const eventA = genEvent({ kind: 1, content: 'Fediverse is vegan', created_at: 0 }); + const eventB = genEvent({ kind: 1, content: 'Im vegan btw', created_at: 1 }); await store.event(eventA); await store.event(eventB); @@ -237,7 +237,7 @@ Deno.test('NPostgres.query with search', async (t) => { }); await t.step('match multiple events', async () => { - assertEquals(await store.query([{ search: 'vegan' }]), [eventA, eventB]); + assertEquals(await store.query([{ search: 'vegan' }]), [eventB, eventA]); }); await t.step("don't match nonsense queries", async () => {