import { describe, it, expect, vi, beforeEach } from 'vitest'; import { SearchLeaguesUseCase, SearchLeaguesQuery } from './SearchLeaguesUseCase'; describe('SearchLeaguesUseCase', () => { let mockLeagueRepository: any; let useCase: SearchLeaguesUseCase; const mockLeagues = [ { id: '1', name: 'League 1' }, { id: '2', name: 'League 2' }, { id: '3', name: 'League 3' }, ]; beforeEach(() => { mockLeagueRepository = { search: vi.fn().mockResolvedValue([...mockLeagues]), }; 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: any = { query: '' }; await expect(useCase.execute(query)).rejects.toThrow('Search query is required'); }); });