diff --git a/src/lib/db/event-store.test.ts b/src/lib/db/event-store.test.ts index 72891ea9b9..9f6e42d127 100644 --- a/src/lib/db/event-store.test.ts +++ b/src/lib/db/event-store.test.ts @@ -1,6 +1,8 @@ import knex from 'knex'; import EventStore from './event-store'; import getLogger from '../../test/fixtures/no-logger'; +import { subHours, formatRFC3339 } from 'date-fns'; +import dbInit from '../../test/e2e/helpers/database-init'; beforeAll(() => { getLogger.setMuteError(true); @@ -28,3 +30,38 @@ test('Trying to get events by name if db fails should yield empty list', async ( expect(events).toBeTruthy(); expect(events.length).toBe(0); }); + +test.each([ + { + createdAt: formatRFC3339(subHours(new Date(), 1)), + expectedCount: 1, + }, + { + createdAt: formatRFC3339(subHours(new Date(), 23)), + expectedCount: 1, + }, + { + createdAt: formatRFC3339(subHours(new Date(), 25)), + expectedCount: 0, + }, +])( + 'Find unnanounced events is capped to last 24hs', + async ({ createdAt, expectedCount }) => { + const db = await dbInit('events_test', getLogger); + const type = 'application-created' as const; + const insertQuery = db.rawDatabase('events'); + await insertQuery + .insert({ + type, + created_at: createdAt, + created_by: 'a test', + data: { name: 'test', createdAt }, + }) + .returning(['id']); + + const store = new EventStore(db.rawDatabase, getLogger); + const events = await store.setUnannouncedToAnnounced(); + expect(events).toBeTruthy(); + expect(events.length).toBe(expectedCount); + }, +); diff --git a/src/lib/db/event-store.ts b/src/lib/db/event-store.ts index 767f3a519d..bafe604a4b 100644 --- a/src/lib/db/event-store.ts +++ b/src/lib/db/event-store.ts @@ -12,6 +12,7 @@ import { sharedEventEmitter } from '../util/anyEventEmitter'; import { Db } from './db'; import { Knex } from 'knex'; import EventEmitter from 'events'; +import { subDays } from 'date-fns'; const EVENT_COLUMNS = [ 'id', @@ -407,12 +408,14 @@ class EventStore implements IEventStore { return this.eventEmitter.off(eventName, listener); } - private async setUnannouncedToAnnounced(): Promise { + async setUnannouncedToAnnounced(): Promise { const rows = await this.db(TABLE) .update({ announced: true }) .where('announced', false) .whereNotNull('announced') - .returning(EVENT_COLUMNS); + .where('created_at', '>', subDays(Date.now(), 1)) + .returning(EVENT_COLUMNS) + .limit(500); return rows.map(this.rowToEvent); }