mirror of
https://github.com/nestriness/nestri.git
synced 2026-09-19 09:15:19 +03:00
92 lines
2.6 KiB
TypeScript
92 lines
2.6 KiB
TypeScript
import { afterEach, setSystemTime } from 'bun:test';
|
|
import { beforeEach, describe, expect, test } from 'bun:test';
|
|
|
|
import { MemoryStorage } from '../src/storage/memory.js';
|
|
|
|
let storage = MemoryStorage();
|
|
|
|
beforeEach(async () => {
|
|
storage = MemoryStorage();
|
|
setSystemTime(new Date('1/1/2024'));
|
|
});
|
|
|
|
afterEach(() => {
|
|
setSystemTime();
|
|
});
|
|
|
|
describe('set', () => {
|
|
test('basic', async () => {
|
|
await storage.set(['users', '123'], { name: 'Test User' });
|
|
const result = await storage.get(['users', '123']);
|
|
expect(result).toEqual({ name: 'Test User' });
|
|
});
|
|
|
|
test('ttl', async () => {
|
|
await storage.set(['temp', 'key'], { value: 'value' }, new Date(Date.now() + 100)); // 100ms TTL
|
|
let result = await storage.get(['temp', 'key']);
|
|
expect(result?.value).toBe('value');
|
|
|
|
setSystemTime(Date.now() + 150);
|
|
result = await storage.get(['temp', 'key']);
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
test('nested', async () => {
|
|
const complexObj = {
|
|
id: 1,
|
|
nested: { a: 1, b: { c: 2 } },
|
|
array: [1, 2, 3]
|
|
};
|
|
await storage.set(['complex'], complexObj);
|
|
const result = await storage.get(['complex']);
|
|
expect(result).toEqual(complexObj);
|
|
});
|
|
});
|
|
|
|
describe('get', () => {
|
|
test('missing', async () => {
|
|
const result = await storage.get(['nonexistent']);
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
test('key', async () => {
|
|
await storage.set(['a', 'b', 'c'], { value: 'nested' });
|
|
const result = await storage.get(['a', 'b', 'c']);
|
|
expect(result?.value).toBe('nested');
|
|
});
|
|
});
|
|
|
|
describe('remove', () => {
|
|
test('existing', async () => {
|
|
await storage.set(['test'], 'value');
|
|
await storage.remove(['test']);
|
|
const result = await storage.get(['test']);
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
test('missing', async () => {
|
|
expect(storage.remove(['nonexistent'])).resolves.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe('scan', () => {
|
|
test('all', async () => {
|
|
await storage.set(['users', '1'], { id: 1 });
|
|
await storage.set(['users', '2'], { id: 2 });
|
|
await storage.set(['other'], { id: 3 });
|
|
const results = await Array.fromAsync(storage.scan(['users']));
|
|
expect(results).toHaveLength(2);
|
|
expect(results).toContainEqual([['users', '1'], { id: 1 }]);
|
|
expect(results).toContainEqual([['users', '2'], { id: 2 }]);
|
|
});
|
|
|
|
test('ttl', async () => {
|
|
await storage.set(['temp', '1'], 'a', new Date(Date.now() + 100));
|
|
await storage.set(['temp', '2'], 'b', new Date(Date.now() + 100));
|
|
await storage.set(['temp', '3'], 'c');
|
|
expect(await Array.fromAsync(storage.scan(['temp']))).toHaveLength(3);
|
|
setSystemTime(Date.now() + 150);
|
|
expect(await Array.fromAsync(storage.scan(['temp']))).toHaveLength(1);
|
|
});
|
|
});
|