|
|
@ -1,6 +1,6 @@ |
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'; |
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'; |
|
|
|
|
|
|
|
|
import {MemoryStorageDriver} from '../memory-storage-driver'; |
|
|
import { MemoryStorageDriver } from '../memory-storage-driver'; |
|
|
import { StorageManager } from '../storage-manager'; |
|
|
import { StorageManager } from '../storage-manager'; |
|
|
|
|
|
|
|
|
describe('storageManager', () => { |
|
|
describe('storageManager', () => { |
|
|
@ -15,7 +15,7 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should set and get an item', async () => { |
|
|
it('should set and get an item', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
}); |
|
|
}); |
|
|
@ -29,22 +29,22 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should remove an item', async () => { |
|
|
it('should remove an item', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }); |
|
|
await storageManager.removeItem('user'); |
|
|
await storageManager.removeItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toBeNull(); |
|
|
expect(user).toBeNull(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should clear all items with the prefix', async () => { |
|
|
it('should clear all items with the prefix', async () => { |
|
|
await storageManager.setItem('user1', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user1', { age: 30, name: 'John Doe' }); |
|
|
await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'}); |
|
|
await storageManager.setItem('user2', { age: 25, name: 'Jane Doe' }); |
|
|
await storageManager.clear(); |
|
|
await storageManager.clear(); |
|
|
expect(await storageManager.getItem('user1')).toBeNull(); |
|
|
expect(await storageManager.getItem('user1')).toBeNull(); |
|
|
expect(await storageManager.getItem('user2')).toBeNull(); |
|
|
expect(await storageManager.getItem('user2')).toBeNull(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should clear expired items', async () => { |
|
|
it('should clear expired items', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
await storageManager.clearExpiredItems(); |
|
|
await storageManager.clearExpiredItems(); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
@ -52,7 +52,7 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should not clear non-expired items', async () => { |
|
|
it('should not clear non-expired items', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }, 10_000); // 10秒过期
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
await storageManager.clearExpiredItems(); |
|
|
await storageManager.clearExpiredItems(); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
@ -65,36 +65,36 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should overwrite existing items', async () => { |
|
|
it('should overwrite existing items', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }); |
|
|
await storageManager.setItem('user', {age: 25, name: 'Jane Doe'}); |
|
|
await storageManager.setItem('user', { age: 25, name: 'Jane Doe' }); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toEqual({ age: 25, name: 'Jane Doe' }); |
|
|
expect(user).toEqual({ age: 25, name: 'Jane Doe' }); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should handle items without expiry correctly', async () => { |
|
|
it('should handle items without expiry correctly', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }); |
|
|
vi.advanceTimersByTime(5000); |
|
|
vi.advanceTimersByTime(5000); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should remove expired items when accessed', async () => { |
|
|
it('should remove expired items when accessed', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toBeNull(); |
|
|
expect(user).toBeNull(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should not remove non-expired items when accessed', async () => { |
|
|
it('should not remove non-expired items when accessed', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }, 10_000); // 10秒过期
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' }); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should handle multiple items with different expiry times', async () => { |
|
|
it('should handle multiple items with different expiry times', async () => { |
|
|
await storageManager.setItem('user1', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
|
|
await storageManager.setItem('user1', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'}, 2000); // 2秒过期
|
|
|
await storageManager.setItem('user2', { age: 25, name: 'Jane Doe' }, 2000); // 2秒过期
|
|
|
vi.advanceTimersByTime(1500); // 快进时间
|
|
|
vi.advanceTimersByTime(1500); // 快进时间
|
|
|
await storageManager.clearExpiredItems(); |
|
|
await storageManager.clearExpiredItems(); |
|
|
const user1 = await storageManager.getItem('user1'); |
|
|
const user1 = await storageManager.getItem('user1'); |
|
|
@ -104,7 +104,7 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should handle items with no expiry', async () => { |
|
|
it('should handle items with no expiry', async () => { |
|
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user', { age: 30, name: 'John Doe' }); |
|
|
vi.advanceTimersByTime(10_000); // 快进时间
|
|
|
vi.advanceTimersByTime(10_000); // 快进时间
|
|
|
await storageManager.clearExpiredItems(); |
|
|
await storageManager.clearExpiredItems(); |
|
|
const user = await storageManager.getItem('user'); |
|
|
const user = await storageManager.getItem('user'); |
|
|
@ -112,8 +112,8 @@ describe('storageManager', () => { |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
it('should clear all items correctly', async () => { |
|
|
it('should clear all items correctly', async () => { |
|
|
await storageManager.setItem('user1', {age: 30, name: 'John Doe'}); |
|
|
await storageManager.setItem('user1', { age: 30, name: 'John Doe' }); |
|
|
await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'}); |
|
|
await storageManager.setItem('user2', { age: 25, name: 'Jane Doe' }); |
|
|
await storageManager.clear(); |
|
|
await storageManager.clear(); |
|
|
const user1 = await storageManager.getItem('user1'); |
|
|
const user1 = await storageManager.getItem('user1'); |
|
|
const user2 = await storageManager.getItem('user2'); |
|
|
const user2 = await storageManager.getItem('user2'); |
|
|
|