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(' '); }