Files
gridpilot.gg/adapters/identity/persistence/inmemory/InMemorySponsorAccountRepository.test.ts
2026-01-16 13:48:18 +01:00

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);
});
});