|
|
@@ -1,5 +1,6 @@
|
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
|
|
+import {MemoryStorageDriver} from '../memory-storage-driver';
|
|
|
import { StorageManager } from '../storage-manager';
|
|
|
|
|
|
describe('storageManager', () => {
|
|
|
@@ -7,123 +8,139 @@ describe('storageManager', () => {
|
|
|
|
|
|
beforeEach(() => {
|
|
|
vi.useFakeTimers();
|
|
|
- localStorage.clear();
|
|
|
storageManager = new StorageManager({
|
|
|
+ driver: new MemoryStorageDriver(),
|
|
|
prefix: 'test_',
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- it('should set and get an item', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' });
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ it('should set and get an item', async () => {
|
|
|
+ await storageManager.setItem('user', {age: 30, name: 'John Doe'});
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should return default value if item does not exist', () => {
|
|
|
- const user = storageManager.getItem('nonexistent', {
|
|
|
+ it('should return default value if item does not exist', async () => {
|
|
|
+ const user = await storageManager.getItem('nonexistent', {
|
|
|
age: 0,
|
|
|
name: 'Default User',
|
|
|
});
|
|
|
expect(user).toEqual({ age: 0, name: 'Default User' });
|
|
|
});
|
|
|
|
|
|
- it('should remove an item', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' });
|
|
|
- storageManager.removeItem('user');
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ it('should remove an item', async () => {
|
|
|
+ await storageManager.setItem('user', {age: 30, name: 'John Doe'});
|
|
|
+ await storageManager.removeItem('user');
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toBeNull();
|
|
|
});
|
|
|
|
|
|
- it('should clear all items with the prefix', () => {
|
|
|
- storageManager.setItem('user1', { age: 30, name: 'John Doe' });
|
|
|
- storageManager.setItem('user2', { age: 25, name: 'Jane Doe' });
|
|
|
- storageManager.clear();
|
|
|
- expect(storageManager.getItem('user1')).toBeNull();
|
|
|
- expect(storageManager.getItem('user2')).toBeNull();
|
|
|
+ it('should clear all items with the prefix', async () => {
|
|
|
+ await storageManager.setItem('user1', {age: 30, name: 'John Doe'});
|
|
|
+ await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'});
|
|
|
+ await storageManager.clear();
|
|
|
+ expect(await storageManager.getItem('user1')).toBeNull();
|
|
|
+ expect(await storageManager.getItem('user2')).toBeNull();
|
|
|
});
|
|
|
|
|
|
- it('should clear expired items', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
+ it('should clear expired items', async () => {
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user',
|
|
|
+ {age: 30, name: 'John Doe'},
|
|
|
+ 1000,
|
|
|
+ ); // 1秒过期
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
- storageManager.clearExpiredItems();
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ await storageManager.clearExpiredItems();
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toBeNull();
|
|
|
});
|
|
|
|
|
|
- it('should not clear non-expired items', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' }, 10_000); // 10秒过期
|
|
|
+ it('should not clear non-expired items', async () => {
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user',
|
|
|
+ {age: 30, name: 'John Doe'},
|
|
|
+ 10_000,
|
|
|
+ ); // 10秒过期
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
- storageManager.clearExpiredItems();
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ await storageManager.clearExpiredItems();
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should handle JSON parse errors gracefully', () => {
|
|
|
- localStorage.setItem('test_user', '{ invalid JSON }');
|
|
|
- const user = storageManager.getItem('user', {
|
|
|
- age: 0,
|
|
|
- name: 'Default User',
|
|
|
- });
|
|
|
- expect(user).toEqual({ age: 0, name: 'Default User' });
|
|
|
- });
|
|
|
- it('should return null for non-existent items without default value', () => {
|
|
|
- const user = storageManager.getItem('nonexistent');
|
|
|
+ it('should return null for non-existent items without default value', async () => {
|
|
|
+ const user = await storageManager.getItem('nonexistent');
|
|
|
expect(user).toBeNull();
|
|
|
});
|
|
|
|
|
|
- it('should overwrite existing items', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' });
|
|
|
- storageManager.setItem('user', { age: 25, name: 'Jane Doe' });
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ it('should overwrite existing items', async () => {
|
|
|
+ await storageManager.setItem('user', {age: 30, name: 'John Doe'});
|
|
|
+ await storageManager.setItem('user', {age: 25, name: 'Jane Doe'});
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 25, name: 'Jane Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should handle items without expiry correctly', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' });
|
|
|
+ it('should handle items without expiry correctly', async () => {
|
|
|
+ await storageManager.setItem('user', {age: 30, name: 'John Doe'});
|
|
|
vi.advanceTimersByTime(5000);
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should remove expired items when accessed', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
+ it('should remove expired items when accessed', async () => {
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user',
|
|
|
+ {age: 30, name: 'John Doe'},
|
|
|
+ 1000,
|
|
|
+ ); // 1秒过期
|
|
|
vi.advanceTimersByTime(1001); // 快进时间
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toBeNull();
|
|
|
});
|
|
|
|
|
|
- it('should not remove non-expired items when accessed', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' }, 10_000); // 10秒过期
|
|
|
+ it('should not remove non-expired items when accessed', async () => {
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user',
|
|
|
+ {age: 30, name: 'John Doe'},
|
|
|
+ 10_000,
|
|
|
+ ); // 10秒过期
|
|
|
vi.advanceTimersByTime(5000); // 快进时间
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should handle multiple items with different expiry times', () => {
|
|
|
- storageManager.setItem('user1', { age: 30, name: 'John Doe' }, 1000); // 1秒过期
|
|
|
- storageManager.setItem('user2', { age: 25, name: 'Jane Doe' }, 2000); // 2秒过期
|
|
|
+ it('should handle multiple items with different expiry times', async () => {
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user1',
|
|
|
+ {age: 30, name: 'John Doe'},
|
|
|
+ 1000,
|
|
|
+ ); // 1秒过期
|
|
|
+ await storageManager.setItem(
|
|
|
+ 'user2',
|
|
|
+ {age: 25, name: 'Jane Doe'},
|
|
|
+ 2000,
|
|
|
+ ); // 2秒过期
|
|
|
vi.advanceTimersByTime(1500); // 快进时间
|
|
|
- storageManager.clearExpiredItems();
|
|
|
- const user1 = storageManager.getItem('user1');
|
|
|
- const user2 = storageManager.getItem('user2');
|
|
|
+ await storageManager.clearExpiredItems();
|
|
|
+ const user1 = await storageManager.getItem('user1');
|
|
|
+ const user2 = await storageManager.getItem('user2');
|
|
|
expect(user1).toBeNull();
|
|
|
expect(user2).toEqual({ age: 25, name: 'Jane Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should handle items with no expiry', () => {
|
|
|
- storageManager.setItem('user', { age: 30, name: 'John Doe' });
|
|
|
+ it('should handle items with no expiry', async () => {
|
|
|
+ await storageManager.setItem('user', {age: 30, name: 'John Doe'});
|
|
|
vi.advanceTimersByTime(10_000); // 快进时间
|
|
|
- storageManager.clearExpiredItems();
|
|
|
- const user = storageManager.getItem('user');
|
|
|
+ await storageManager.clearExpiredItems();
|
|
|
+ const user = await storageManager.getItem('user');
|
|
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
|
|
});
|
|
|
|
|
|
- it('should clear all items correctly', () => {
|
|
|
- storageManager.setItem('user1', { age: 30, name: 'John Doe' });
|
|
|
- storageManager.setItem('user2', { age: 25, name: 'Jane Doe' });
|
|
|
- storageManager.clear();
|
|
|
- const user1 = storageManager.getItem('user1');
|
|
|
- const user2 = storageManager.getItem('user2');
|
|
|
+ it('should clear all items correctly', async () => {
|
|
|
+ await storageManager.setItem('user1', {age: 30, name: 'John Doe'});
|
|
|
+ await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'});
|
|
|
+ await storageManager.clear();
|
|
|
+ const user1 = await storageManager.getItem('user1');
|
|
|
+ const user2 = await storageManager.getItem('user2');
|
|
|
expect(user1).toBeNull();
|
|
|
expect(user2).toBeNull();
|
|
|
});
|