Skip to content

Commit e5ab4f9

Browse files
committed
Fixed event exclusion
1 parent cf85252 commit e5ab4f9

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

src/init-dependencies/event-store/exclude-event.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@ import {v4 as uuidv4} from 'uuid';
99
import {Client} from '@libsql/client';
1010
import {dbExecute} from '../../util';
1111

12-
const insertEventRow = `
12+
const insertEventExclusionRow = `
1313
INSERT INTO events_exclusions
1414
(id, event_id, reverted_by_number, revert_reason)
15-
SELECT ?, ?, ?, ?, ?, ?
16-
WHERE NOT EXISTS (
17-
SELECT * FROM events
18-
WHERE resource_id = ?
19-
AND resource_type = ?
20-
AND resource_version = ?
21-
);
15+
VALUES (?, ?, ?, ?);
2216
`;
17+
18+
// This should only be used where an event needs to be 'deleted'.
19+
// This should not be used to 'undo' something. Its expected that there will only be a few
20+
// cases where this is used.
2321
export const excludeEvent =
2422
(
2523
eventDB: Client,
@@ -32,7 +30,7 @@ export const excludeEvent =
3230
() =>
3331
dbExecute(
3432
eventDB,
35-
insertEventRow,
33+
insertEventExclusionRow,
3634
[
3735
uuidv4(),
3836
event_id,

tests/init-dependencies/event-store/get-all-events.test.ts

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
import {arbitraryActor, getRightOrFail} from '../../helpers';
1919
import { UUID } from 'io-ts-types';
2020
import { EventName } from '../../../src/types/domain-event';
21+
import { excludeEvent } from '../../../src/init-dependencies/event-store/exclude-event';
2122

2223
const arbitraryMemberNumberLinkedToEmailEvent = () =>
2324
constructEvent('MemberNumberLinkedToEmail')({
@@ -51,6 +52,7 @@ describe('get all events', () => {
5152

5253
let dbClient: libsqlClient.Client;
5354
let persistEvent: (event: DomainEvent) => Promise<void>;
55+
let unPersistEvent: (event_id: string, reverted_by_number: number, revert_reason: string) => Promise<void>;
5456
let initalisedGetAllEvents: () => Promise<ReadonlyArray<DomainEvent>>;
5557
let initalisedGetAllEventsByType: (type: EventName) => Promise<ReadonlyArray<DomainEvent>>;
5658
let initalisedGetAllEventsByTypes: (type1: EventName, type2: EventName) => Promise<ReadonlyArray<DomainEvent>>;
@@ -67,6 +69,15 @@ describe('get all events', () => {
6769
)(arbitraryResource(), 'no-such-resource')(event)()
6870
)
6971
};
72+
unPersistEvent = async (
73+
event_id: string, reverted_by_number: number, revert_reason: string
74+
) => {
75+
getRightOrFail(
76+
await excludeEvent(
77+
dbClient
78+
)(event_id, reverted_by_number, revert_reason)()
79+
)
80+
};
7081
initalisedGetAllEvents = async () => getRightOrFail(await getAllEvents(dbClient)()());
7182
initalisedGetAllEventsByType = async (type: EventName) => getRightOrFail(await getAllEventsByType(dbClient)(type)());
7283
initalisedGetAllEventsByTypes = async (type1: EventName, type2: EventName) => getRightOrFail(await getAllEventsByTypes(dbClient)(type1, type2)());
@@ -77,21 +88,35 @@ describe('get all events', () => {
7788
});
7889

7990
describe('getAllEvents', () => {
80-
it('returns all persisted events except EquipmentTrainingQuizResult', async () => {
81-
const memberNumberLinkedToEmail =
82-
arbitraryMemberNumberLinkedToEmailEvent();
83-
const equipmentTrainingQuizResult =
84-
arbitraryEquipmentTrainingQuizResultEvent();
85-
const equipmentTrainingSheetRegistered =
86-
arbitraryEquipmentTrainingSheetRegisteredEvent();
91+
const memberNumberLinkedToEmail = arbitraryMemberNumberLinkedToEmailEvent();
92+
const equipmentTrainingQuizResult = arbitraryEquipmentTrainingQuizResultEvent();
93+
const equipmentTrainingSheetRegistered = arbitraryEquipmentTrainingSheetRegisteredEvent();
94+
beforeEach(async () => {
8795
await persistEvent(memberNumberLinkedToEmail);
8896
await persistEvent(equipmentTrainingQuizResult);
8997
await persistEvent(equipmentTrainingSheetRegistered);
98+
});
99+
it('returns all persisted events except EquipmentTrainingQuizResult', async () => {
90100
expect(await initalisedGetAllEvents()).toStrictEqual([
91101
memberNumberLinkedToEmail,
92102
equipmentTrainingSheetRegistered,
93103
]);
94104
});
105+
106+
describe('exclude an event', () => {
107+
const excludedBy: number = faker.number.int();
108+
const excludedByReason: string = faker.company.catchPhrase();
109+
110+
beforeEach(async () => {
111+
const eventId = (await dbClient.execute('SELECT id FROM events WHERE event_type = ?', [memberNumberLinkedToEmail.type])).rows[0]['id']! as string;
112+
await unPersistEvent(eventId, excludedBy, excludedByReason)
113+
});
114+
it('returns all persisted events except EquipmentTrainingQuizResult and the excluded event', async () => {
115+
expect(await initalisedGetAllEvents()).toStrictEqual([
116+
equipmentTrainingSheetRegistered,
117+
]);
118+
});
119+
});
95120
});
96121

97122
describe('getAllEventsByType', () => {

0 commit comments

Comments
 (0)