Files
Toju/toju-app/src/app/domains/direct-message/application/services/friend.service.spec.ts
2026-04-27 01:02:39 +02:00

42 lines
1.3 KiB
TypeScript

import { FriendRepository } from '../../infrastructure/friend.repository';
describe('FriendService storage contract', () => {
let repository: FriendRepository;
beforeEach(() => {
installLocalStorageMock();
repository = new FriendRepository();
});
it('should add friend', async () => {
await repository.addFriend('alice', { userId: 'bob', addedAt: 10 });
expect(await repository.loadFriends('alice')).toEqual([{ userId: 'bob', addedAt: 10 }]);
});
it('should remove friend', async () => {
await repository.addFriend('alice', { userId: 'bob', addedAt: 10 });
await repository.removeFriend('alice', 'bob');
expect(await repository.loadFriends('alice')).toEqual([]);
});
it('should persist friends', async () => {
await repository.addFriend('alice', { userId: 'bob', addedAt: 10 });
const reloadedRepository = new FriendRepository();
expect(await reloadedRepository.loadFriends('alice')).toEqual([{ userId: 'bob', addedAt: 10 }]);
});
});
function installLocalStorageMock(): void {
const values = new Map<string, string>();
vi.stubGlobal('localStorage', {
getItem: (key: string) => values.get(key) ?? null,
setItem: (key: string, value: string) => values.set(key, value),
removeItem: (key: string) => values.delete(key),
clear: () => values.clear()
});
}