/* eslint-disable gridpilot-rules/page-query-filename */ /* eslint-disable gridpilot-rules/clean-error-handling */ /* eslint-disable gridpilot-rules/page-query-must-use-builders */ /* eslint-disable gridpilot-rules/single-export-per-file */ import { describe, it, expect, vi, beforeEach } from 'vitest'; import { CreateLeaguePageQuery } from './CreateLeaguePageQuery'; import { LeaguesApiClient } from '@/lib/gateways/api/leagues/LeaguesApiClient'; // Mock dependencies vi.mock('@/lib/gateways/api/leagues/LeaguesApiClient', () => { return { LeaguesApiClient: vi.fn(), }; }); vi.mock('@/lib/infrastructure/logging/ConsoleErrorReporter'); vi.mock('@/lib/infrastructure/logging/ConsoleLogger'); describe('CreateLeaguePageQuery', () => { let query: CreateLeaguePageQuery; let mockApiClientInstance: { getScoringPresets: ReturnType }; beforeEach(() => { vi.clearAllMocks(); query = new CreateLeaguePageQuery(); mockApiClientInstance = { getScoringPresets: vi.fn(), }; vi.mocked(LeaguesApiClient).mockImplementation(function() { return mockApiClientInstance as unknown as LeaguesApiClient; }); }); it('should return scoring presets on success', async () => { const presets = [{ id: 'preset-1', name: 'Standard' }]; mockApiClientInstance.getScoringPresets.mockResolvedValue({ presets }); const result = await query.execute(); expect(result.isOk()).toBe(true); expect(result.unwrap()).toEqual({ scoringPresets: presets, }); expect(mockApiClientInstance.getScoringPresets).toHaveBeenCalled(); }); it('should return empty array if presets are missing in response', async () => { mockApiClientInstance.getScoringPresets.mockResolvedValue({}); const result = await query.execute(); expect(result.isOk()).toBe(true); expect(result.unwrap()).toEqual({ scoringPresets: [], }); }); it('should return redirect error on 401/403', async () => { mockApiClientInstance.getScoringPresets.mockRejectedValue(new Error('401 Unauthorized')); const result = await query.execute(); expect(result.isErr()).toBe(true); expect(result.getError()).toBe('redirect'); }); it('should return notFound error on 404', async () => { mockApiClientInstance.getScoringPresets.mockRejectedValue(new Error('404 Not Found')); const result = await query.execute(); expect(result.isErr()).toBe(true); expect(result.getError()).toBe('notFound'); }); it('should return CREATE_LEAGUE_FETCH_FAILED on 5xx or server error', async () => { mockApiClientInstance.getScoringPresets.mockRejectedValue(new Error('500 Internal Server Error')); const result = await query.execute(); expect(result.isErr()).toBe(true); expect(result.getError()).toBe('CREATE_LEAGUE_FETCH_FAILED'); }); it('should return UNKNOWN_ERROR for other errors', async () => { mockApiClientInstance.getScoringPresets.mockRejectedValue(new Error('Something went wrong')); const result = await query.execute(); expect(result.isErr()).toBe(true); expect(result.getError()).toBe('UNKNOWN_ERROR'); }); it('should provide a static execute method', async () => { mockApiClientInstance.getScoringPresets.mockResolvedValue({ presets: [] }); const result = await CreateLeaguePageQuery.execute(); expect(result.isOk()).toBe(true); expect(result.unwrap()).toEqual({ scoringPresets: [] }); }); });