fix adapters
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { Logger } from '@core/shared/application';
|
||||
import type { StoredUser } from '@core/identity/domain/repositories/IUserRepository';
|
||||
import { InMemoryUserRepository } from './InMemoryUserRepository';
|
||||
|
||||
describe('InMemoryUserRepository', () => {
|
||||
let repository: InMemoryUserRepository;
|
||||
let mockLogger: Logger;
|
||||
|
||||
beforeEach(() => {
|
||||
mockLogger = {
|
||||
debug: vi.fn(),
|
||||
info: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
error: vi.fn(),
|
||||
} as unknown as Logger;
|
||||
|
||||
const seeded: StoredUser[] = [
|
||||
{
|
||||
id: 'u1',
|
||||
email: 'seed@example.com',
|
||||
displayName: 'Seed',
|
||||
passwordHash: 'hash',
|
||||
salt: 'salt',
|
||||
createdAt: new Date('2025-01-01T00:00:00.000Z'),
|
||||
},
|
||||
];
|
||||
|
||||
repository = new InMemoryUserRepository(mockLogger, seeded);
|
||||
});
|
||||
|
||||
it('finds by email and id', async () => {
|
||||
expect((await repository.findByEmail('seed@example.com'))?.id).toBe('u1');
|
||||
expect((await repository.findById('u1'))?.email).toBe('seed@example.com');
|
||||
expect(await repository.findByEmail('missing@example.com')).toBeNull();
|
||||
});
|
||||
|
||||
it('creates and rejects duplicate emails', async () => {
|
||||
const user: StoredUser = {
|
||||
id: 'u2',
|
||||
email: 'new@example.com',
|
||||
displayName: 'New',
|
||||
passwordHash: 'hash2',
|
||||
salt: 'salt2',
|
||||
createdAt: new Date(),
|
||||
};
|
||||
|
||||
await repository.create(user);
|
||||
expect(await repository.emailExists('new@example.com')).toBe(true);
|
||||
|
||||
await expect(repository.create({ ...user, id: 'u3' })).rejects.toThrow('Email already exists');
|
||||
});
|
||||
|
||||
it('updates and maintains email index', async () => {
|
||||
const existing = await repository.findById('u1');
|
||||
expect(existing).not.toBeNull();
|
||||
|
||||
const updated: StoredUser = {
|
||||
...(existing as StoredUser),
|
||||
email: 'changed@example.com',
|
||||
displayName: 'Changed',
|
||||
};
|
||||
|
||||
await repository.update(updated);
|
||||
|
||||
expect(await repository.findByEmail('seed@example.com')).toBeNull();
|
||||
expect((await repository.findByEmail('changed@example.com'))?.displayName).toBe('Changed');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user