From 6fa46444dcc4324a6020fac5c7affc29cfcbeb27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Latzarus?= Date: Tue, 4 Mar 2025 11:39:37 +0100 Subject: [PATCH] feat(api): add passage-event-repository with record method Co-authored-by: Diane Cordier Co-authored-by: Eric Lim --- .../repositories/passage-event-repository.js | 13 +++++++ .../passage-event-repository_test.js | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 api/src/devcomp/infrastructure/repositories/passage-event-repository.js create mode 100644 api/tests/devcomp/integration/repositories/passage-event-repository_test.js diff --git a/api/src/devcomp/infrastructure/repositories/passage-event-repository.js b/api/src/devcomp/infrastructure/repositories/passage-event-repository.js new file mode 100644 index 00000000000..c964e3e762c --- /dev/null +++ b/api/src/devcomp/infrastructure/repositories/passage-event-repository.js @@ -0,0 +1,13 @@ +import { DomainTransaction } from '../../../shared/domain/DomainTransaction.js'; + +async function record(event) { + const knexConn = DomainTransaction.getConnection(); + await knexConn('passage-events').insert({ + passageId: event.passageId, + occurredAt: event.occurredAt, + type: event.type, + data: event.data, + }); +} + +export { record }; diff --git a/api/tests/devcomp/integration/repositories/passage-event-repository_test.js b/api/tests/devcomp/integration/repositories/passage-event-repository_test.js new file mode 100644 index 00000000000..bf0e1903ba3 --- /dev/null +++ b/api/tests/devcomp/integration/repositories/passage-event-repository_test.js @@ -0,0 +1,38 @@ +import { PassageStartedEvent } from '../../../../src/devcomp/domain/models/passage-events/passage-events.js'; +import * as passageEventRepository from '../../../../src/devcomp/infrastructure/repositories/passage-event-repository.js'; +import { databaseBuilder, expect, knex, sinon } from '../../../test-helper.js'; + +describe('Integration | DevComp | Repositories | PassageEventRepository', function () { + describe('#record', function () { + let clock; + + beforeEach(function () { + clock = sinon.useFakeTimers(new Date('2023-12-31'), 'Date'); + }); + + afterEach(function () { + clock.restore(); + }); + + it('should record a passage event', async function () { + // given + const passage = databaseBuilder.factory.buildPassage(); + await databaseBuilder.commit(); + const event = new PassageStartedEvent({ + occurredAt: new Date('2019-04-28'), + passageId: passage.id, + contentHash: 'abcd1234', + }); + + // when + await passageEventRepository.record(event); + + // then + const recordedEvent = await knex('passage-events') + .where({ type: 'PASSAGE_STARTED', passageId: passage.id }) + .first(); + expect(recordedEvent.data.contentHash).to.equal('abcd1234'); + expect(recordedEvent.occurredAt).to.deep.equal(new Date('2019-04-28')); + }); + }); +});