Assessor_2.0/tests/persistence/review-store.test.ts

50 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { defaultReview } from '../../src/domain/review';
import { LocalStorageReviewRepository } from '../../src/persistence/review-store';
import type { StorageAdapter } from '../../src/persistence/storage-adapter';
class MemoryStorage implements StorageAdapter {
values = new Map<string, string>();
get(key: string) {
return this.values.get(key) ?? null;
}
set(key: string, value: string) {
this.values.set(key, value);
}
remove(key: string) {
this.values.delete(key);
}
}
describe('LocalStorageReviewRepository', () => {
it('stores and restores reviews through the local storage adapter', async () => {
const repository = new LocalStorageReviewRepository(new MemoryStorage());
const reviews = { finding1: { ...defaultReview(), include: true, owner: 'Blue Team' } };
await repository.save('project1', reviews);
await expect(repository.load('project1')).resolves.toEqual(reviews);
});
it('migrates reviews from the legacy storage key', async () => {
const storage = new MemoryStorage();
const reviews = { finding1: { ...defaultReview(), include: true } };
storage.set('exxTableReader:reviews:project1', JSON.stringify(reviews));
const repository = new LocalStorageReviewRepository(storage);
await expect(repository.load('project1')).resolves.toEqual(reviews);
expect(storage.get('ASSESSOR:reviews:project1')).toBe(JSON.stringify(reviews));
});
it('returns an empty review set for invalid local data', async () => {
const storage = new MemoryStorage();
storage.set('ASSESSOR:reviews:project1', '{invalid');
const repository = new LocalStorageReviewRepository(storage);
await expect(repository.load('project1')).resolves.toEqual({});
});
});