/
fake-event-store.ts
94 lines (77 loc) · 2.49 KB
/
fake-event-store.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import { IEventStore } from '../../lib/types/stores/event-store';
import { IEvent } from '../../lib/types/events';
import { AnyEventEmitter } from '../../lib/util/anyEventEmitter';
import { IQueryOperations } from 'lib/db/event-store';
import { SearchEventsSchema } from '../../lib/openapi';
class FakeEventStore extends AnyEventEmitter implements IEventStore {
events: IEvent[];
constructor() {
super();
this.setMaxListeners(0);
this.events = [];
}
store(event: IEvent): Promise<void> {
this.events.push(event);
this.emit(event.type, event);
return Promise.resolve();
}
batchStore(events: IEvent[]): Promise<void> {
events.forEach((event) => {
this.events.push(event);
this.emit(event.type, event);
});
return Promise.resolve();
}
async getEvents(): Promise<IEvent[]> {
return this.events;
}
async delete(key: number): Promise<void> {
this.events.splice(
this.events.findIndex((t) => t.id === key),
1,
);
}
async deleteAll(): Promise<void> {
this.events = [];
}
async count(): Promise<number> {
return Promise.resolve(this.events.length);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
filteredCount(search: SearchEventsSchema): Promise<number> {
return Promise.resolve(0);
}
destroy(): void {}
async exists(key: number): Promise<boolean> {
return this.events.some((e) => e.id === key);
}
async get(key: number): Promise<IEvent> {
return this.events.find((e) => e.id === key);
}
async getAll(): Promise<IEvent[]> {
return this.events;
}
async searchEvents(): Promise<IEvent[]> {
throw new Error('Method not implemented.');
}
async getForFeatures(
features: string[],
environments: string[],
query: { type: string; projectId: string },
): Promise<IEvent[]> {
return this.events.filter((event) => {
return (
event.type === query.type &&
event.project === query.projectId &&
features.includes(event.data.featureName) &&
environments.includes(event.data.environment)
);
});
}
async query(operations: IQueryOperations[]): Promise<IEvent[]> {
if (operations) return [];
return [];
}
}
module.exports = FakeEventStore;
export default FakeEventStore;