import { render, screen, fireEvent } from '@testing-library/react'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import { ClubSwitcher } from '../club-switcher'; import { useTenant } from '../../contexts/tenant-context'; vi.mock('../../contexts/tenant-context', () => ({ useTenant: vi.fn(), })); vi.mock('../ui/dropdown-menu', () => ({ DropdownMenu: ({ children }: { children: React.ReactNode }) =>
{children}
, DropdownMenuTrigger: ({ children, asChild }: { children: React.ReactNode, asChild?: boolean }) =>
{children}
, DropdownMenuContent: ({ children }: { children: React.ReactNode }) =>
{children}
, DropdownMenuItem: ({ children, onClick }: { children: React.ReactNode, onClick: () => void }) =>
{children}
, DropdownMenuLabel: ({ children }: { children: React.ReactNode }) =>
{children}
, DropdownMenuSeparator: () =>
---
, })); describe('ClubSwitcher', () => { beforeEach(() => { vi.clearAllMocks(); }); it('renders loading state when clubs is empty', () => { vi.mocked(useTenant).mockReturnValue({ activeClubId: null, clubs: [], setActiveClub: vi.fn(), userRole: null } as any); render(); expect(screen.getByRole('button')).toHaveTextContent('Select Club'); }); it('renders current club name and sport type badge', () => { vi.mocked(useTenant).mockReturnValue({ activeClubId: 'club-1', clubs: [ { id: 'club-1', name: 'Tennis Club', sportType: 'Tennis' }, { id: 'club-2', name: 'Swim Club', sportType: 'Swimming' }, ], setActiveClub: vi.fn(), userRole: 'admin' } as any); render(); expect(screen.getAllByText('Tennis Club')[0]).toBeInTheDocument(); }); it('calls setActiveClub when club is selected', () => { const mockSetActiveClub = vi.fn(); vi.mocked(useTenant).mockReturnValue({ activeClubId: 'club-1', clubs: [ { id: 'club-1', name: 'Tennis Club', sportType: 'Tennis' }, { id: 'club-2', name: 'Swim Club', sportType: 'Swimming' }, ], setActiveClub: mockSetActiveClub, userRole: 'admin' } as any); render(); const swimClub = screen.getByText('Swim Club'); fireEvent.click(swimClub); expect(mockSetActiveClub).toHaveBeenCalledWith('club-2'); }); });