Files
babymonitor/frontend/tests/unit/SleepButton.test.tsx
T
2026-05-28 09:31:20 +02:00

74 lines
2.2 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-explicit-any */
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import '@testing-library/jest-dom';
import SleepButton from '../../src/components/tracker/SleepButton';
import { useSleepSession } from '../../src/hooks/useSleepSession';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
vi.mock('../../src/hooks/useSleepSession', () => ({
useSleepSession: vi.fn(),
}));
const createTestQueryClient = () => new QueryClient({
defaultOptions: {
queries: { retry: false },
},
});
describe('SleepButton', () => {
let queryClient: any;
beforeEach(() => {
queryClient = createTestQueryClient();
vi.clearAllMocks();
});
const renderWithProviders = (ui: React.ReactElement) => {
return render(
<QueryClientProvider client={queryClient}>
{ui}
</QueryClientProvider>
);
};
it('renders "Start Sleep" when no active session', async () => {
(useSleepSession as any).mockReturnValue({
activeSession: null,
isCreating: false,
isEnding: false,
});
renderWithProviders(<SleepButton time="2024-01-01T12:00" />);
expect(screen.getByRole('button', { name: /Start Sleep/i })).toBeInTheDocument();
});
it('renders "Stop Sleep" when session is active', async () => {
(useSleepSession as any).mockReturnValue({
activeSession: { id: 1, start_time: '2024-01-01T12:00' },
isCreating: false,
isEnding: false,
});
renderWithProviders(<SleepButton time="2024-01-01T12:00" />);
expect(screen.getByRole('button', { name: /Stop Sleep/i })).toBeInTheDocument();
});
it('calls endSession when session is active and button is clicked', async () => {
const endSessionMock = vi.fn();
(useSleepSession as any).mockReturnValue({
activeSession: { id: 1, start_time: '2024-01-01T12:00' },
isCreating: false,
isEnding: false,
endSession: endSessionMock,
});
renderWithProviders(<SleepButton time="2024-01-01T14:00" />);
const button = screen.getByRole('button', { name: /Stop Sleep/i });
fireEvent.click(button);
await waitFor(() => expect(endSessionMock).toHaveBeenCalled());
});
});