55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import type { Logger } from '@core/shared/domain';
|
|
import { UserId, type SponsorAccount } from '@core/identity';
|
|
import { InMemorySponsorAccountRepository } from './InMemorySponsorAccountRepository';
|
|
|
|
describe('InMemorySponsorAccountRepository', () => {
|
|
let repository: InMemorySponsorAccountRepository;
|
|
let logger: Logger;
|
|
|
|
const makeAccount = (id: string, sponsorId: string, email: string): SponsorAccount => {
|
|
return {
|
|
getId: () => ({ value: id }),
|
|
getSponsorId: () => sponsorId,
|
|
getEmail: () => email,
|
|
} as unknown as SponsorAccount;
|
|
};
|
|
|
|
beforeEach(() => {
|
|
logger = {
|
|
debug: vi.fn(),
|
|
info: vi.fn(),
|
|
warn: vi.fn(),
|
|
error: vi.fn(),
|
|
} as unknown as Logger;
|
|
|
|
repository = new InMemorySponsorAccountRepository(logger);
|
|
repository.clear();
|
|
});
|
|
|
|
it('saves and finds sponsor accounts by id / sponsorId / email', async () => {
|
|
const account = makeAccount('user-1', 'sponsor-1', 'Sponsor@Example.com');
|
|
|
|
await repository.save(account);
|
|
|
|
expect(await repository.findById(UserId.fromString('user-1'))).toBe(account);
|
|
expect(await repository.findBySponsorId('sponsor-1')).toBe(account);
|
|
expect(await repository.findByEmail('sponsor@example.com')).toBe(account);
|
|
});
|
|
|
|
it('deletes sponsor accounts', async () => {
|
|
const account = makeAccount('user-del', 'sponsor-del', 'del@example.com');
|
|
await repository.save(account);
|
|
|
|
await repository.delete(UserId.fromString('user-del'));
|
|
expect(await repository.findById(UserId.fromString('user-del'))).toBeNull();
|
|
});
|
|
|
|
it('seeds via constructor', async () => {
|
|
const seeded = makeAccount('user-seed', 'sponsor-seed', 'seed@example.com');
|
|
repository = new InMemorySponsorAccountRepository(logger, [seeded]);
|
|
|
|
expect(await repository.findBySponsorId('sponsor-seed')).toBe(seeded);
|
|
});
|
|
});
|