nestlens 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/core/storage/memory.storage.spec.d.ts +2 -0
- package/dist/__tests__/core/storage/memory.storage.spec.d.ts.map +1 -0
- package/dist/__tests__/core/storage/memory.storage.spec.js +450 -0
- package/dist/__tests__/core/storage/memory.storage.spec.js.map +1 -0
- package/dist/__tests__/core/storage/redis.storage.spec.d.ts +10 -0
- package/dist/__tests__/core/storage/redis.storage.spec.d.ts.map +1 -0
- package/dist/__tests__/core/storage/redis.storage.spec.js +660 -0
- package/dist/__tests__/core/storage/redis.storage.spec.js.map +1 -0
- package/dist/__tests__/core/storage/storage.factory.spec.d.ts +2 -0
- package/dist/__tests__/core/storage/storage.factory.spec.d.ts.map +1 -0
- package/dist/__tests__/core/storage/storage.factory.spec.js +151 -0
- package/dist/__tests__/core/storage/storage.factory.spec.js.map +1 -0
- package/dist/core/storage/index.d.ts +2 -1
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js +17 -1
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/memory.storage.d.ts +59 -0
- package/dist/core/storage/memory.storage.d.ts.map +1 -0
- package/dist/core/storage/memory.storage.js +629 -0
- package/dist/core/storage/memory.storage.js.map +1 -0
- package/dist/core/storage/redis.storage.d.ts +77 -0
- package/dist/core/storage/redis.storage.d.ts.map +1 -0
- package/dist/core/storage/redis.storage.js +595 -0
- package/dist/core/storage/redis.storage.js.map +1 -0
- package/dist/core/storage/storage.factory.d.ts +28 -0
- package/dist/core/storage/storage.factory.d.ts.map +1 -0
- package/dist/core/storage/storage.factory.js +169 -0
- package/dist/core/storage/storage.factory.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/nestlens.config.d.ts +54 -0
- package/dist/nestlens.config.d.ts.map +1 -1
- package/dist/nestlens.config.js +16 -2
- package/dist/nestlens.config.js.map +1 -1
- package/dist/nestlens.module.js +3 -3
- package/dist/nestlens.module.js.map +1 -1
- package/package.json +16 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.storage.spec.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/core/storage/memory.storage.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const memory_storage_1 = require("../../../core/storage/memory.storage");
|
|
4
|
+
describe('MemoryStorage', () => {
|
|
5
|
+
let storage;
|
|
6
|
+
beforeEach(async () => {
|
|
7
|
+
storage = new memory_storage_1.MemoryStorage({ maxEntries: 100 });
|
|
8
|
+
await storage.initialize();
|
|
9
|
+
});
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await storage.close();
|
|
12
|
+
});
|
|
13
|
+
// ==================== Helper Functions ====================
|
|
14
|
+
function createEntry(type, payload = {}) {
|
|
15
|
+
return {
|
|
16
|
+
type,
|
|
17
|
+
payload,
|
|
18
|
+
requestId: `req-${Date.now()}`,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// ==================== Core CRUD Tests ====================
|
|
22
|
+
describe('save', () => {
|
|
23
|
+
it('should save an entry and return it with id and createdAt', async () => {
|
|
24
|
+
// Arrange
|
|
25
|
+
const entry = createEntry('request', { method: 'GET', path: '/test' });
|
|
26
|
+
// Act
|
|
27
|
+
const saved = await storage.save(entry);
|
|
28
|
+
// Assert
|
|
29
|
+
expect(saved.id).toBeDefined();
|
|
30
|
+
expect(saved.id).toBeGreaterThan(0);
|
|
31
|
+
expect(saved.createdAt).toBeDefined();
|
|
32
|
+
expect(saved.type).toBe('request');
|
|
33
|
+
expect(saved.payload).toEqual({ method: 'GET', path: '/test' });
|
|
34
|
+
});
|
|
35
|
+
it('should assign incrementing IDs', async () => {
|
|
36
|
+
// Arrange & Act
|
|
37
|
+
const saved1 = await storage.save(createEntry('request'));
|
|
38
|
+
const saved2 = await storage.save(createEntry('query'));
|
|
39
|
+
const saved3 = await storage.save(createEntry('log'));
|
|
40
|
+
// Assert
|
|
41
|
+
expect(saved2.id).toBe(saved1.id + 1);
|
|
42
|
+
expect(saved3.id).toBe(saved2.id + 1);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('saveBatch', () => {
|
|
46
|
+
it('should save multiple entries at once', async () => {
|
|
47
|
+
// Arrange
|
|
48
|
+
const entries = [
|
|
49
|
+
createEntry('request', { path: '/1' }),
|
|
50
|
+
createEntry('request', { path: '/2' }),
|
|
51
|
+
createEntry('request', { path: '/3' }),
|
|
52
|
+
];
|
|
53
|
+
// Act
|
|
54
|
+
const saved = await storage.saveBatch(entries);
|
|
55
|
+
// Assert
|
|
56
|
+
expect(saved).toHaveLength(3);
|
|
57
|
+
expect(saved[0].id).toBeDefined();
|
|
58
|
+
expect(saved[1].id).toBe(saved[0].id + 1);
|
|
59
|
+
expect(saved[2].id).toBe(saved[1].id + 1);
|
|
60
|
+
});
|
|
61
|
+
it('should return empty array for empty input', async () => {
|
|
62
|
+
// Act
|
|
63
|
+
const saved = await storage.saveBatch([]);
|
|
64
|
+
// Assert
|
|
65
|
+
expect(saved).toEqual([]);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('find', () => {
|
|
69
|
+
beforeEach(async () => {
|
|
70
|
+
await storage.saveBatch([
|
|
71
|
+
createEntry('request', { path: '/a' }),
|
|
72
|
+
createEntry('query', { sql: 'SELECT 1' }),
|
|
73
|
+
createEntry('request', { path: '/b' }),
|
|
74
|
+
createEntry('exception', { name: 'Error' }),
|
|
75
|
+
]);
|
|
76
|
+
});
|
|
77
|
+
it('should find entries by type', async () => {
|
|
78
|
+
// Act
|
|
79
|
+
const requests = await storage.find({ type: 'request' });
|
|
80
|
+
// Assert
|
|
81
|
+
expect(requests).toHaveLength(2);
|
|
82
|
+
expect(requests.every((e) => e.type === 'request')).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
it('should return entries in descending order by createdAt', async () => {
|
|
85
|
+
// Act
|
|
86
|
+
const all = await storage.find({});
|
|
87
|
+
// Assert
|
|
88
|
+
expect(all).toHaveLength(4);
|
|
89
|
+
// Entries should be sorted (newest first based on createdAt, then by ID)
|
|
90
|
+
for (let i = 0; i < all.length - 1; i++) {
|
|
91
|
+
const current = new Date(all[i].createdAt).getTime();
|
|
92
|
+
const next = new Date(all[i + 1].createdAt).getTime();
|
|
93
|
+
// Either current is newer, or same time with higher ID
|
|
94
|
+
expect(current >= next).toBe(true);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
it('should apply limit', async () => {
|
|
98
|
+
// Act
|
|
99
|
+
const limited = await storage.find({ limit: 2 });
|
|
100
|
+
// Assert
|
|
101
|
+
expect(limited).toHaveLength(2);
|
|
102
|
+
});
|
|
103
|
+
it('should apply offset', async () => {
|
|
104
|
+
// Act
|
|
105
|
+
const all = await storage.find({});
|
|
106
|
+
const offset = await storage.find({ offset: 2 });
|
|
107
|
+
// Assert
|
|
108
|
+
expect(offset).toHaveLength(2);
|
|
109
|
+
expect(offset[0].id).toBe(all[2].id);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('findById', () => {
|
|
113
|
+
it('should find entry by id', async () => {
|
|
114
|
+
// Arrange
|
|
115
|
+
const saved = await storage.save(createEntry('log', { message: 'test' }));
|
|
116
|
+
// Act
|
|
117
|
+
const found = await storage.findById(saved.id);
|
|
118
|
+
// Assert
|
|
119
|
+
expect(found).not.toBeNull();
|
|
120
|
+
expect(found.id).toBe(saved.id);
|
|
121
|
+
expect(found.type).toBe('log');
|
|
122
|
+
});
|
|
123
|
+
it('should return null for non-existent id', async () => {
|
|
124
|
+
// Act
|
|
125
|
+
const found = await storage.findById(99999);
|
|
126
|
+
// Assert
|
|
127
|
+
expect(found).toBeNull();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('count', () => {
|
|
131
|
+
it('should count all entries', async () => {
|
|
132
|
+
// Arrange
|
|
133
|
+
await storage.saveBatch([
|
|
134
|
+
createEntry('request'),
|
|
135
|
+
createEntry('query'),
|
|
136
|
+
createEntry('exception'),
|
|
137
|
+
]);
|
|
138
|
+
// Act
|
|
139
|
+
const total = await storage.count();
|
|
140
|
+
// Assert
|
|
141
|
+
expect(total).toBe(3);
|
|
142
|
+
});
|
|
143
|
+
it('should count entries by type', async () => {
|
|
144
|
+
// Arrange
|
|
145
|
+
await storage.saveBatch([
|
|
146
|
+
createEntry('request'),
|
|
147
|
+
createEntry('request'),
|
|
148
|
+
createEntry('query'),
|
|
149
|
+
]);
|
|
150
|
+
// Act
|
|
151
|
+
const requestCount = await storage.count('request');
|
|
152
|
+
const queryCount = await storage.count('query');
|
|
153
|
+
// Assert
|
|
154
|
+
expect(requestCount).toBe(2);
|
|
155
|
+
expect(queryCount).toBe(1);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('clear', () => {
|
|
159
|
+
it('should remove all entries', async () => {
|
|
160
|
+
// Arrange
|
|
161
|
+
await storage.saveBatch([createEntry('request'), createEntry('query')]);
|
|
162
|
+
// Act
|
|
163
|
+
await storage.clear();
|
|
164
|
+
const count = await storage.count();
|
|
165
|
+
// Assert
|
|
166
|
+
expect(count).toBe(0);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
// ==================== Tag Tests ====================
|
|
170
|
+
describe('tags', () => {
|
|
171
|
+
let entryId;
|
|
172
|
+
beforeEach(async () => {
|
|
173
|
+
const saved = await storage.save(createEntry('exception', { name: 'Error' }));
|
|
174
|
+
entryId = saved.id;
|
|
175
|
+
});
|
|
176
|
+
it('should add and retrieve tags', async () => {
|
|
177
|
+
// Act
|
|
178
|
+
await storage.addTags(entryId, ['critical', 'production']);
|
|
179
|
+
const tags = await storage.getEntryTags(entryId);
|
|
180
|
+
// Assert
|
|
181
|
+
expect(tags).toContain('critical');
|
|
182
|
+
expect(tags).toContain('production');
|
|
183
|
+
});
|
|
184
|
+
it('should remove tags', async () => {
|
|
185
|
+
// Arrange
|
|
186
|
+
await storage.addTags(entryId, ['tag1', 'tag2', 'tag3']);
|
|
187
|
+
// Act
|
|
188
|
+
await storage.removeTags(entryId, ['tag2']);
|
|
189
|
+
const tags = await storage.getEntryTags(entryId);
|
|
190
|
+
// Assert
|
|
191
|
+
expect(tags).toContain('tag1');
|
|
192
|
+
expect(tags).toContain('tag3');
|
|
193
|
+
expect(tags).not.toContain('tag2');
|
|
194
|
+
});
|
|
195
|
+
it('should get all tags with counts', async () => {
|
|
196
|
+
// Arrange
|
|
197
|
+
const entry2 = await storage.save(createEntry('log'));
|
|
198
|
+
await storage.addTags(entryId, ['shared', 'unique1']);
|
|
199
|
+
await storage.addTags(entry2.id, ['shared', 'unique2']);
|
|
200
|
+
// Act
|
|
201
|
+
const allTags = await storage.getAllTags();
|
|
202
|
+
// Assert
|
|
203
|
+
const sharedTag = allTags.find((t) => t.tag === 'shared');
|
|
204
|
+
expect(sharedTag?.count).toBe(2);
|
|
205
|
+
});
|
|
206
|
+
it('should find entries by tags with OR logic', async () => {
|
|
207
|
+
// Arrange
|
|
208
|
+
const entry2 = await storage.save(createEntry('log'));
|
|
209
|
+
await storage.addTags(entryId, ['tag1']);
|
|
210
|
+
await storage.addTags(entry2.id, ['tag2']);
|
|
211
|
+
// Act
|
|
212
|
+
const found = await storage.findByTags(['tag1', 'tag2'], 'OR');
|
|
213
|
+
// Assert
|
|
214
|
+
expect(found).toHaveLength(2);
|
|
215
|
+
});
|
|
216
|
+
it('should find entries by tags with AND logic', async () => {
|
|
217
|
+
// Arrange
|
|
218
|
+
const entry2 = await storage.save(createEntry('log'));
|
|
219
|
+
await storage.addTags(entryId, ['tag1', 'tag2']);
|
|
220
|
+
await storage.addTags(entry2.id, ['tag1']);
|
|
221
|
+
// Act
|
|
222
|
+
const found = await storage.findByTags(['tag1', 'tag2'], 'AND');
|
|
223
|
+
// Assert
|
|
224
|
+
expect(found).toHaveLength(1);
|
|
225
|
+
expect(found[0].id).toBe(entryId);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
// ==================== Monitored Tags Tests ====================
|
|
229
|
+
describe('monitored tags', () => {
|
|
230
|
+
it('should add and retrieve monitored tags', async () => {
|
|
231
|
+
// Act
|
|
232
|
+
const monitored = await storage.addMonitoredTag('important');
|
|
233
|
+
const all = await storage.getMonitoredTags();
|
|
234
|
+
// Assert
|
|
235
|
+
expect(monitored.tag).toBe('important');
|
|
236
|
+
expect(monitored.id).toBeDefined();
|
|
237
|
+
expect(all).toHaveLength(1);
|
|
238
|
+
});
|
|
239
|
+
it('should not duplicate monitored tags', async () => {
|
|
240
|
+
// Act
|
|
241
|
+
await storage.addMonitoredTag('tag');
|
|
242
|
+
await storage.addMonitoredTag('tag');
|
|
243
|
+
const all = await storage.getMonitoredTags();
|
|
244
|
+
// Assert
|
|
245
|
+
expect(all).toHaveLength(1);
|
|
246
|
+
});
|
|
247
|
+
it('should remove monitored tags', async () => {
|
|
248
|
+
// Arrange
|
|
249
|
+
await storage.addMonitoredTag('tag');
|
|
250
|
+
// Act
|
|
251
|
+
await storage.removeMonitoredTag('tag');
|
|
252
|
+
const all = await storage.getMonitoredTags();
|
|
253
|
+
// Assert
|
|
254
|
+
expect(all).toHaveLength(0);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
// ==================== Resolution Tests ====================
|
|
258
|
+
describe('resolution', () => {
|
|
259
|
+
it('should resolve an entry', async () => {
|
|
260
|
+
// Arrange
|
|
261
|
+
const saved = await storage.save(createEntry('exception'));
|
|
262
|
+
// Act
|
|
263
|
+
await storage.resolveEntry(saved.id);
|
|
264
|
+
const found = await storage.findById(saved.id);
|
|
265
|
+
// Assert
|
|
266
|
+
expect(found.resolvedAt).toBeDefined();
|
|
267
|
+
});
|
|
268
|
+
it('should unresolve an entry', async () => {
|
|
269
|
+
// Arrange
|
|
270
|
+
const saved = await storage.save(createEntry('exception'));
|
|
271
|
+
await storage.resolveEntry(saved.id);
|
|
272
|
+
// Act
|
|
273
|
+
await storage.unresolveEntry(saved.id);
|
|
274
|
+
const found = await storage.findById(saved.id);
|
|
275
|
+
// Assert
|
|
276
|
+
expect(found.resolvedAt).toBeUndefined();
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
// ==================== Family Hash Tests ====================
|
|
280
|
+
describe('family hash', () => {
|
|
281
|
+
it('should update family hash', async () => {
|
|
282
|
+
// Arrange
|
|
283
|
+
const saved = await storage.save(createEntry('exception'));
|
|
284
|
+
// Act
|
|
285
|
+
await storage.updateFamilyHash(saved.id, 'hash123');
|
|
286
|
+
const found = await storage.findById(saved.id);
|
|
287
|
+
// Assert
|
|
288
|
+
expect(found.familyHash).toBe('hash123');
|
|
289
|
+
});
|
|
290
|
+
it('should find entries by family hash', async () => {
|
|
291
|
+
// Arrange
|
|
292
|
+
const entry1 = await storage.save(createEntry('exception'));
|
|
293
|
+
const entry2 = await storage.save(createEntry('exception'));
|
|
294
|
+
await storage.updateFamilyHash(entry1.id, 'same-hash');
|
|
295
|
+
await storage.updateFamilyHash(entry2.id, 'same-hash');
|
|
296
|
+
// Act
|
|
297
|
+
const found = await storage.findByFamilyHash('same-hash');
|
|
298
|
+
// Assert
|
|
299
|
+
expect(found).toHaveLength(2);
|
|
300
|
+
});
|
|
301
|
+
it('should get grouped by family hash', async () => {
|
|
302
|
+
// Arrange
|
|
303
|
+
const entry1 = await storage.save(createEntry('exception'));
|
|
304
|
+
const entry2 = await storage.save(createEntry('exception'));
|
|
305
|
+
const entry3 = await storage.save(createEntry('exception'));
|
|
306
|
+
await storage.updateFamilyHash(entry1.id, 'hash-a');
|
|
307
|
+
await storage.updateFamilyHash(entry2.id, 'hash-a');
|
|
308
|
+
await storage.updateFamilyHash(entry3.id, 'hash-b');
|
|
309
|
+
// Act
|
|
310
|
+
const grouped = await storage.getGroupedByFamilyHash();
|
|
311
|
+
// Assert
|
|
312
|
+
expect(grouped).toHaveLength(2);
|
|
313
|
+
const hashA = grouped.find((g) => g.familyHash === 'hash-a');
|
|
314
|
+
expect(hashA?.count).toBe(2);
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
// ==================== Statistics Tests ====================
|
|
318
|
+
describe('getStats', () => {
|
|
319
|
+
it('should return correct statistics', async () => {
|
|
320
|
+
// Arrange
|
|
321
|
+
await storage.saveBatch([
|
|
322
|
+
createEntry('request', { duration: 100 }),
|
|
323
|
+
createEntry('request', { duration: 200 }),
|
|
324
|
+
createEntry('query', { slow: true }),
|
|
325
|
+
createEntry('exception'),
|
|
326
|
+
]);
|
|
327
|
+
// Act
|
|
328
|
+
const stats = await storage.getStats();
|
|
329
|
+
// Assert
|
|
330
|
+
expect(stats.total).toBe(4);
|
|
331
|
+
expect(stats.byType.request).toBe(2);
|
|
332
|
+
expect(stats.byType.query).toBe(1);
|
|
333
|
+
expect(stats.byType.exception).toBe(1);
|
|
334
|
+
expect(stats.avgResponseTime).toBe(150);
|
|
335
|
+
expect(stats.slowQueries).toBe(1);
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
describe('getStorageStats', () => {
|
|
339
|
+
it('should return storage statistics', async () => {
|
|
340
|
+
// Arrange
|
|
341
|
+
await storage.saveBatch([createEntry('request'), createEntry('query')]);
|
|
342
|
+
// Act
|
|
343
|
+
const stats = await storage.getStorageStats();
|
|
344
|
+
// Assert
|
|
345
|
+
expect(stats.total).toBe(2);
|
|
346
|
+
expect(stats.oldestEntry).toBeDefined();
|
|
347
|
+
expect(stats.newestEntry).toBeDefined();
|
|
348
|
+
expect(stats.databaseSize).toBeUndefined(); // Memory storage doesn't have file size
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
// ==================== Pruning Tests ====================
|
|
352
|
+
describe('prune', () => {
|
|
353
|
+
it('should delete entries older than given date', async () => {
|
|
354
|
+
// Arrange
|
|
355
|
+
await storage.save(createEntry('request'));
|
|
356
|
+
// Wait a bit
|
|
357
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
358
|
+
const cutoff = new Date();
|
|
359
|
+
await storage.save(createEntry('request'));
|
|
360
|
+
// Act
|
|
361
|
+
const deleted = await storage.prune(cutoff);
|
|
362
|
+
const remaining = await storage.count();
|
|
363
|
+
// Assert
|
|
364
|
+
expect(deleted).toBe(1);
|
|
365
|
+
expect(remaining).toBe(1);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
describe('pruneByType', () => {
|
|
369
|
+
it('should delete entries of specific type older than given date', async () => {
|
|
370
|
+
// Arrange
|
|
371
|
+
await storage.save(createEntry('request'));
|
|
372
|
+
await storage.save(createEntry('query'));
|
|
373
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
374
|
+
const cutoff = new Date();
|
|
375
|
+
await storage.save(createEntry('request'));
|
|
376
|
+
// Act
|
|
377
|
+
const deleted = await storage.pruneByType('request', cutoff);
|
|
378
|
+
const requestCount = await storage.count('request');
|
|
379
|
+
const queryCount = await storage.count('query');
|
|
380
|
+
// Assert
|
|
381
|
+
expect(deleted).toBe(1);
|
|
382
|
+
expect(requestCount).toBe(1);
|
|
383
|
+
expect(queryCount).toBe(1); // Query should remain
|
|
384
|
+
});
|
|
385
|
+
});
|
|
386
|
+
// ==================== Max Entries Tests ====================
|
|
387
|
+
describe('maxEntries enforcement', () => {
|
|
388
|
+
it('should remove oldest entries when max is exceeded', async () => {
|
|
389
|
+
// Arrange - create storage with small limit
|
|
390
|
+
const smallStorage = new memory_storage_1.MemoryStorage({ maxEntries: 5 });
|
|
391
|
+
await smallStorage.initialize();
|
|
392
|
+
// Save 7 entries
|
|
393
|
+
for (let i = 0; i < 7; i++) {
|
|
394
|
+
await smallStorage.save(createEntry('request', { index: i }));
|
|
395
|
+
}
|
|
396
|
+
// Act
|
|
397
|
+
const count = await smallStorage.count();
|
|
398
|
+
const entries = await smallStorage.find({});
|
|
399
|
+
// Assert
|
|
400
|
+
expect(count).toBe(5);
|
|
401
|
+
// Oldest entries (index 0, 1) should be removed
|
|
402
|
+
const indices = entries.map((e) => e.payload.index);
|
|
403
|
+
expect(indices).not.toContain(0);
|
|
404
|
+
expect(indices).not.toContain(1);
|
|
405
|
+
await smallStorage.close();
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
// ==================== Cursor Pagination Tests ====================
|
|
409
|
+
describe('findWithCursor', () => {
|
|
410
|
+
beforeEach(async () => {
|
|
411
|
+
for (let i = 0; i < 10; i++) {
|
|
412
|
+
await storage.save(createEntry('request', { index: i }));
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
it('should paginate with beforeSequence', async () => {
|
|
416
|
+
// Arrange
|
|
417
|
+
const all = await storage.find({});
|
|
418
|
+
const middleId = all[4].id;
|
|
419
|
+
// Act
|
|
420
|
+
const result = await storage.findWithCursor('request', {
|
|
421
|
+
beforeSequence: middleId,
|
|
422
|
+
limit: 3,
|
|
423
|
+
});
|
|
424
|
+
// Assert
|
|
425
|
+
expect(result.data).toHaveLength(3);
|
|
426
|
+
expect(result.data.every((e) => e.id < middleId)).toBe(true);
|
|
427
|
+
expect(result.meta.hasMore).toBe(true);
|
|
428
|
+
});
|
|
429
|
+
it('should paginate with afterSequence', async () => {
|
|
430
|
+
// Arrange
|
|
431
|
+
const all = await storage.find({});
|
|
432
|
+
const middleId = all[5].id;
|
|
433
|
+
// Act
|
|
434
|
+
const result = await storage.findWithCursor('request', {
|
|
435
|
+
afterSequence: middleId,
|
|
436
|
+
limit: 3,
|
|
437
|
+
});
|
|
438
|
+
// Assert
|
|
439
|
+
expect(result.data).toHaveLength(3);
|
|
440
|
+
expect(result.data.every((e) => e.id > middleId)).toBe(true);
|
|
441
|
+
});
|
|
442
|
+
it('should return total count', async () => {
|
|
443
|
+
// Act
|
|
444
|
+
const result = await storage.findWithCursor('request', { limit: 3 });
|
|
445
|
+
// Assert
|
|
446
|
+
expect(result.meta.total).toBe(10);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
//# sourceMappingURL=memory.storage.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.storage.spec.js","sourceRoot":"","sources":["../../../../src/__tests__/core/storage/memory.storage.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Storage Tests
|
|
3
|
+
*
|
|
4
|
+
* These tests verify the RedisStorage implementation using mocked Redis operations.
|
|
5
|
+
* Since RedisStorage uses dynamic imports, we test the class by:
|
|
6
|
+
* 1. Creating a testable subclass that allows injecting a mock client
|
|
7
|
+
* 2. Testing all public methods with the mock client
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=redis.storage.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.storage.spec.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/core/storage/redis.storage.spec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|