Files
gridpilot.gg/core/leagues/application/use-cases/SearchLeaguesUseCase.test.ts
2026-01-26 11:02:19 +01:00

76 lines
3.2 KiB
TypeScript

import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
import { SearchLeaguesUseCase, SearchLeaguesQuery } from './SearchLeaguesUseCase';
import { LeagueRepository } from '../ports/LeagueRepository';
describe('SearchLeaguesUseCase', () => {
let mockLeagueRepository: LeagueRepository;
let useCase: SearchLeaguesUseCase;
const mockLeagues = [
{ id: '1', name: 'League 1' },
{ id: '2', name: 'League 2' },
{ id: '3', name: 'League 3' },
];
beforeEach(() => {
mockLeagueRepository = {
create: vi.fn() as unknown as Mock,
findById: vi.fn() as unknown as Mock,
findByName: vi.fn() as unknown as Mock,
findByOwner: vi.fn() as unknown as Mock,
search: vi.fn().mockResolvedValue([...mockLeagues]) as unknown as Mock,
update: vi.fn() as unknown as Mock,
delete: vi.fn() as unknown as Mock,
getStats: vi.fn() as unknown as Mock,
updateStats: vi.fn() as unknown as Mock,
getFinancials: vi.fn() as unknown as Mock,
updateFinancials: vi.fn() as unknown as Mock,
getStewardingMetrics: vi.fn() as unknown as Mock,
updateStewardingMetrics: vi.fn() as unknown as Mock,
getPerformanceMetrics: vi.fn() as unknown as Mock,
updatePerformanceMetrics: vi.fn() as unknown as Mock,
getRatingMetrics: vi.fn() as unknown as Mock,
updateRatingMetrics: vi.fn() as unknown as Mock,
getTrendMetrics: vi.fn() as unknown as Mock,
updateTrendMetrics: vi.fn() as unknown as Mock,
getSuccessRateMetrics: vi.fn() as unknown as Mock,
updateSuccessRateMetrics: vi.fn() as unknown as Mock,
getResolutionTimeMetrics: vi.fn() as unknown as Mock,
updateResolutionTimeMetrics: vi.fn() as unknown as Mock,
getComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
updateComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
getComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
updateComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
getLeagueMembers: vi.fn() as unknown as Mock,
getPendingRequests: vi.fn() as unknown as Mock,
addLeagueMembers: vi.fn() as unknown as Mock,
updateLeagueMember: vi.fn() as unknown as Mock,
removeLeagueMember: vi.fn() as unknown as Mock,
addPendingRequests: vi.fn() as unknown as Mock,
removePendingRequest: vi.fn() as unknown as Mock,
};
useCase = new SearchLeaguesUseCase(mockLeagueRepository);
});
it('should return search results with default limit', async () => {
const query: SearchLeaguesQuery = { query: 'test' };
const result = await useCase.execute(query);
expect(result).toHaveLength(3);
expect(mockLeagueRepository.search).toHaveBeenCalledWith('test');
});
it('should respect limit and offset', async () => {
const query: SearchLeaguesQuery = { query: 'test', limit: 1, offset: 1 };
const result = await useCase.execute(query);
expect(result).toHaveLength(1);
expect(result[0].id).toBe('2');
});
it('should throw error if query is missing', async () => {
const query = { query: '' } as unknown as SearchLeaguesQuery;
await expect(useCase.execute(query)).rejects.toThrow('Search query is required');
});
});