diff --git a/src/event-bus/event.test.ts b/src/event-bus/event.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b14384da0efc8d9782ce7758da3db43958cc3b0 --- /dev/null +++ b/src/event-bus/event.test.ts @@ -0,0 +1,24 @@ +import { Event } from './event'; + +describe('Event class', () => { + const create = (T, type, payload): Event => new T(type, payload); + + it('initialises members', () => { + const x = create(Event, 'test', 'some-payload'); + + expect(x.id).toHaveLength(41); + expect(x.created instanceof Date).toBeTruthy(); + expect(x.created.toISOString()).toHaveLength(24); + expect(x.eventType).toBe('test'); + expect(x.payload).toBe('some-payload'); + }); + + it('has correct members', () => { + const keys = Object.keys(create(Event, 'test', 'payload')); + expect(keys).toHaveLength(4); + expect(keys).toContain('id'); + expect(keys).toContain('created'); + expect(keys).toContain('eventType'); + expect(keys).toContain('payload'); + }); +}); diff --git a/src/event-bus/event.ts b/src/event-bus/event.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0e66f42d4c5f17d095447befcd8e5abc74a2c47 --- /dev/null +++ b/src/event-bus/event.ts @@ -0,0 +1,17 @@ +import { v4 as uuid } from 'uuid'; +import { EventType } from './types'; + +/** + * Event - Used in this abstract form throughout this library. + * It is abstract so you cannot create an instance of it - derived Event types + * and their associated Payload types are the responsibility of the caller. + */ +export abstract class Event { + readonly id: string; + readonly created: Date; + + constructor(readonly eventType: EventType, readonly payload: object) { + this.id = eventType.toString() + '_' + uuid(); + this.created = new Date(); + } +}