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