From fd47a0b9d51492b2c0a2ba91be7fb806d82a73a1 Mon Sep 17 00:00:00 2001
From: Peter Hooper <diversemix@gmail.com>
Date: Thu, 2 Jan 2020 16:49:09 +0000
Subject: [PATCH] Add missing files for definition of Event

---
 src/event-bus/event.test.ts | 24 ++++++++++++++++++++++++
 src/event-bus/event.ts      | 17 +++++++++++++++++
 2 files changed, 41 insertions(+)
 create mode 100644 src/event-bus/event.test.ts
 create mode 100644 src/event-bus/event.ts

diff --git a/src/event-bus/event.test.ts b/src/event-bus/event.test.ts
new file mode 100644
index 0000000..9b14384
--- /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 0000000..c0e66f4
--- /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();
+    }
+}
-- 
GitLab