Skip to content

Commit ed6c65d

Browse files
committed
Make sure the in mem tests run in browser and node
1 parent 6e392f1 commit ed6c65d

File tree

2 files changed

+187
-184
lines changed

2 files changed

+187
-184
lines changed

src/storage/Storage-nodespec.ts

Lines changed: 2 additions & 184 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
import { IEvent } from '../models/IEvent';
2-
import { IStorage } from './IStorage';
3-
import { IStorageItem } from './IStorageItem';
4-
5-
import { InMemoryStorage } from './InMemoryStorage';
61
import { NodeFileStorage } from './NodeFileStorage';
72

8-
import { expect } from 'chai';
3+
import { describeStorage } from './Storage-spec';
4+
95
import * as mockFs from 'mock-fs';
106

117
let mockedFs;
@@ -25,181 +21,3 @@ describeStorage('NodeFileStorage',
2521
nodeFileStorageInitializer,
2622
true
2723
);
28-
29-
describeStorage('InMemoryStorage', (maxItems = 250) => {
30-
return new InMemoryStorage(maxItems);
31-
});
32-
33-
function describeStorage(name: string,
34-
storageFactory: (maxItems?: number) => IStorage,
35-
beforeEachCallback?: () => void,
36-
recreateStorage: boolean = false) {
37-
38-
describe(name, () => {
39-
40-
if (beforeEachCallback) {
41-
beforeEach(beforeEachCallback);
42-
}
43-
44-
it('should save events', () => {
45-
let storage = storageFactory();
46-
let key = 'ex-q-';
47-
let event1: IEvent = { type: 'log', reference_id: key + '123454321' };
48-
let event2: IEvent = { type: 'log', reference_id: key + '098765432' };
49-
expect(storage.get().length).to.equal(0);
50-
storage.save(event1);
51-
expect(storage.get().length).to.equal(1);
52-
53-
if (recreateStorage) {
54-
storage = storageFactory();
55-
}
56-
57-
storage.save(event2);
58-
expect(storage.get().length).to.equal(2);
59-
});
60-
61-
it('should get saved events', () => {
62-
let storage = storageFactory();
63-
let key = 'ex-q-';
64-
let event1: IEvent = { type: 'log', reference_id: key + '11' };
65-
let event2: IEvent = { type: 'log', reference_id: key + '12' };
66-
let event3: IEvent = { type: 'log', reference_id: key + '13' };
67-
let event4: IEvent = { type: 'log', reference_id: key + '14' };
68-
let event5: IEvent = { type: 'log', reference_id: key + '15' };
69-
let event6: IEvent = { type: 'log', reference_id: key + '16' };
70-
expect(storage.get().length).to.equal(0);
71-
72-
let ts1 = storage.save(event1);
73-
let ts2 = storage.save(event2);
74-
storage.save(event3);
75-
storage.save(event4);
76-
storage.save(event5);
77-
storage.save(event6);
78-
expect(storage.get().length).to.equal(6);
79-
80-
if (recreateStorage) {
81-
storage = storageFactory();
82-
}
83-
84-
expect(storage.get().length).to.equal(6);
85-
storage.remove(ts1);
86-
expect(storage.get().length).to.equal(5);
87-
88-
expect(storage.get()[0].value).to.eql(event2);
89-
storage.remove(ts2);
90-
expect(storage.get().length).to.equal(4);
91-
92-
let events = storage.get(2);
93-
expect(events.length).to.equal(2);
94-
expect(events[0].value).not.to.equal(events[1].value);
95-
storage.remove(events[0].timestamp);
96-
storage.remove(events[1].timestamp);
97-
expect(storage.get().length).to.equal(2);
98-
99-
events = storage.get();
100-
expect(events.length).to.equal(2);
101-
expect(events[0].value).not.to.equal(events[1].value);
102-
});
103-
104-
it('should clear all events', () => {
105-
let storage = storageFactory();
106-
let key = 'ex-q-';
107-
let event1: IEvent = { type: 'log', reference_id: key + '11' };
108-
let event2: IEvent = { type: 'log', reference_id: key + '12' };
109-
let event3: IEvent = { type: 'log', reference_id: key + '13' };
110-
let event4: IEvent = { type: 'log', reference_id: key + '14' };
111-
let event5: IEvent = { type: 'log', reference_id: key + '15' };
112-
let event6: IEvent = { type: 'log', reference_id: key + '16' };
113-
expect(storage.get().length).to.equal(0);
114-
115-
let ts1 = storage.save(event1);
116-
storage.save(event2);
117-
storage.save(event3);
118-
storage.save(event4);
119-
storage.save(event5);
120-
storage.save(event6);
121-
expect(storage.get().length).to.equal(6);
122-
123-
if (recreateStorage) {
124-
storage = storageFactory();
125-
}
126-
127-
storage.remove(ts1);
128-
expect(storage.get().length).to.equal(5);
129-
130-
storage.clear();
131-
132-
expect(storage.get().length).to.equal(0);
133-
});
134-
135-
it('should get with limit', () => {
136-
let storage = storageFactory(250);
137-
for (let index: number = 0; index < 260; index++) {
138-
storage.save({ type: 'log', reference_id: index.toString() });
139-
}
140-
141-
if (recreateStorage) {
142-
storage = storageFactory(250);
143-
}
144-
145-
expect(storage.get().length).to.equal(250);
146-
expect(storage.get(1).length).to.equal(1);
147-
});
148-
149-
it('should get the oldest events', () => {
150-
function getDate(baseDate: Date, offset: number) {
151-
return new Date(baseDate.getTime() + (offset * 60000));
152-
}
153-
154-
const DATE: Date = new Date();
155-
let storage = storageFactory();
156-
for (let index: number = 0; index < 10; index++) {
157-
storage.save({
158-
date: getDate(DATE, index),
159-
type: 'log',
160-
reference_id: index.toString()
161-
});
162-
163-
expect(storage.get().length).to.equal(index + 1);
164-
}
165-
166-
if (recreateStorage) {
167-
storage = storageFactory();
168-
}
169-
170-
let offset: number = 0;
171-
let events: IStorageItem[] = storage.get(2);
172-
while (events && events.length > 0) {
173-
expect(2).to.equal(events.length);
174-
for (let ei = 0; ei < 2; ei++) {
175-
expect(getDate(DATE, offset++)).to.eql(events[ei].value.date);
176-
storage.remove(events[ei].timestamp);
177-
}
178-
179-
events = storage.get(2);
180-
}
181-
});
182-
183-
it('should respect max items limit', () => {
184-
let storage = storageFactory(5);
185-
let timestamps = [];
186-
for (let index: number = 0; index < 5; index++) {
187-
timestamps.push(storage.save({ type: 'log', reference_id: index.toString() }));
188-
}
189-
190-
let events: IStorageItem[] = storage.get();
191-
expect(events.length).to.equal(5);
192-
expect(events[0].timestamp).to.equal(timestamps[0]);
193-
storage.save({ type: 'log', reference_id: '6' });
194-
195-
if (recreateStorage) {
196-
storage = storageFactory(5);
197-
}
198-
199-
events = storage.get();
200-
expect(events.length).to.equal(5);
201-
expect(events[0].timestamp).to.equal(timestamps[1]);
202-
});
203-
204-
});
205-
}

src/storage/Storage-spec.ts

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
import { IEvent } from '../models/IEvent';
2+
import { IStorage } from './IStorage';
3+
import { IStorageItem } from './IStorageItem';
4+
5+
import { InMemoryStorage } from './InMemoryStorage';
6+
7+
import { expect } from 'chai';
8+
9+
describeStorage('InMemoryStorage', (maxItems = 250) => {
10+
return new InMemoryStorage(maxItems);
11+
});
12+
13+
export function describeStorage(name: string,
14+
storageFactory: (maxItems?: number) => IStorage,
15+
beforeEachCallback?: () => void,
16+
recreateStorage: boolean = false) {
17+
18+
describe(name, () => {
19+
20+
if (beforeEachCallback) {
21+
beforeEach(beforeEachCallback);
22+
}
23+
24+
it('should save events', () => {
25+
let storage = storageFactory();
26+
let key = 'ex-q-';
27+
let event1: IEvent = { type: 'log', reference_id: key + '123454321' };
28+
let event2: IEvent = { type: 'log', reference_id: key + '098765432' };
29+
expect(storage.get().length).to.equal(0);
30+
storage.save(event1);
31+
expect(storage.get().length).to.equal(1);
32+
33+
if (recreateStorage) {
34+
storage = storageFactory();
35+
}
36+
37+
storage.save(event2);
38+
expect(storage.get().length).to.equal(2);
39+
});
40+
41+
it('should get saved events', () => {
42+
let storage = storageFactory();
43+
let key = 'ex-q-';
44+
let event1: IEvent = { type: 'log', reference_id: key + '11' };
45+
let event2: IEvent = { type: 'log', reference_id: key + '12' };
46+
let event3: IEvent = { type: 'log', reference_id: key + '13' };
47+
let event4: IEvent = { type: 'log', reference_id: key + '14' };
48+
let event5: IEvent = { type: 'log', reference_id: key + '15' };
49+
let event6: IEvent = { type: 'log', reference_id: key + '16' };
50+
expect(storage.get().length).to.equal(0);
51+
52+
let ts1 = storage.save(event1);
53+
let ts2 = storage.save(event2);
54+
storage.save(event3);
55+
storage.save(event4);
56+
storage.save(event5);
57+
storage.save(event6);
58+
expect(storage.get().length).to.equal(6);
59+
60+
if (recreateStorage) {
61+
storage = storageFactory();
62+
}
63+
64+
expect(storage.get().length).to.equal(6);
65+
storage.remove(ts1);
66+
expect(storage.get().length).to.equal(5);
67+
68+
expect(storage.get()[0].value).to.eql(event2);
69+
storage.remove(ts2);
70+
expect(storage.get().length).to.equal(4);
71+
72+
let events = storage.get(2);
73+
expect(events.length).to.equal(2);
74+
expect(events[0].value).not.to.equal(events[1].value);
75+
storage.remove(events[0].timestamp);
76+
storage.remove(events[1].timestamp);
77+
expect(storage.get().length).to.equal(2);
78+
79+
events = storage.get();
80+
expect(events.length).to.equal(2);
81+
expect(events[0].value).not.to.equal(events[1].value);
82+
});
83+
84+
it('should clear all events', () => {
85+
let storage = storageFactory();
86+
let key = 'ex-q-';
87+
let event1: IEvent = { type: 'log', reference_id: key + '11' };
88+
let event2: IEvent = { type: 'log', reference_id: key + '12' };
89+
let event3: IEvent = { type: 'log', reference_id: key + '13' };
90+
let event4: IEvent = { type: 'log', reference_id: key + '14' };
91+
let event5: IEvent = { type: 'log', reference_id: key + '15' };
92+
let event6: IEvent = { type: 'log', reference_id: key + '16' };
93+
expect(storage.get().length).to.equal(0);
94+
95+
let ts1 = storage.save(event1);
96+
storage.save(event2);
97+
storage.save(event3);
98+
storage.save(event4);
99+
storage.save(event5);
100+
storage.save(event6);
101+
expect(storage.get().length).to.equal(6);
102+
103+
if (recreateStorage) {
104+
storage = storageFactory();
105+
}
106+
107+
storage.remove(ts1);
108+
expect(storage.get().length).to.equal(5);
109+
110+
storage.clear();
111+
112+
expect(storage.get().length).to.equal(0);
113+
});
114+
115+
it('should get with limit', () => {
116+
let storage = storageFactory(250);
117+
for (let index: number = 0; index < 260; index++) {
118+
storage.save({ type: 'log', reference_id: index.toString() });
119+
}
120+
121+
if (recreateStorage) {
122+
storage = storageFactory(250);
123+
}
124+
125+
expect(storage.get().length).to.equal(250);
126+
expect(storage.get(1).length).to.equal(1);
127+
});
128+
129+
it('should get the oldest events', () => {
130+
function getDate(baseDate: Date, offset: number) {
131+
return new Date(baseDate.getTime() + (offset * 60000));
132+
}
133+
134+
const DATE: Date = new Date();
135+
let storage = storageFactory();
136+
for (let index: number = 0; index < 10; index++) {
137+
storage.save({
138+
date: getDate(DATE, index),
139+
type: 'log',
140+
reference_id: index.toString()
141+
});
142+
143+
expect(storage.get().length).to.equal(index + 1);
144+
}
145+
146+
if (recreateStorage) {
147+
storage = storageFactory();
148+
}
149+
150+
let offset: number = 0;
151+
let events: IStorageItem[] = storage.get(2);
152+
while (events && events.length > 0) {
153+
expect(2).to.equal(events.length);
154+
for (let ei = 0; ei < 2; ei++) {
155+
expect(getDate(DATE, offset++)).to.eql(events[ei].value.date);
156+
storage.remove(events[ei].timestamp);
157+
}
158+
159+
events = storage.get(2);
160+
}
161+
});
162+
163+
it('should respect max items limit', () => {
164+
let storage = storageFactory(5);
165+
let timestamps = [];
166+
for (let index: number = 0; index < 5; index++) {
167+
timestamps.push(storage.save({ type: 'log', reference_id: index.toString() }));
168+
}
169+
170+
let events: IStorageItem[] = storage.get();
171+
expect(events.length).to.equal(5);
172+
expect(events[0].timestamp).to.equal(timestamps[0]);
173+
storage.save({ type: 'log', reference_id: '6' });
174+
175+
if (recreateStorage) {
176+
storage = storageFactory(5);
177+
}
178+
179+
events = storage.get();
180+
expect(events.length).to.equal(5);
181+
expect(events[0].timestamp).to.equal(timestamps[1]);
182+
});
183+
184+
});
185+
}

0 commit comments

Comments
 (0)