Files
babymonitor/frontend/tests/unit/TimeAdjuster.test.tsx
T
2026-06-02 21:20:38 +02:00

47 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import TimeAdjuster from '../../src/components/tracker/TimeAdjuster';
describe('TimeAdjuster', () => {
it('renders with default value', () => {
const { container } = render(<TimeAdjuster onTimeChange={() => {}} />);
const input = container.querySelector('input');
expect(input).toBeInTheDocument();
});
it('calls onTimeChange when value changes', () => {
const handleChange = vi.fn();
const { container } = render(<TimeAdjuster onTimeChange={handleChange} />);
const input = container.querySelector('input');
vi.clearAllMocks();
fireEvent.change(input!, { target: { value: '2024-01-01T12:00' } });
expect(handleChange).toHaveBeenCalledWith(new Date('2024-01-01T12:00').toISOString());
});
it('resets to now when reset button is clicked', async () => {
const handleChange = vi.fn();
render(<TimeAdjuster onTimeChange={handleChange} />);
const resetButton = screen.getByText(/Reset to now/i);
fireEvent.click(resetButton);
expect(handleChange).toHaveBeenCalled();
});
it('handles invalid date input gracefully (returns empty string)', async () => {
// Since we changed the implementation, it should no longer throw.
// We can't easily test the useEffect error anymore because it doesn't throw,
// but we can check if onTimeChange is called with "" for invalid input.
const handleChange = vi.fn();
const { container } = render(<TimeAdjuster onTimeChange={handleChange} />);
const input = container.querySelector('input');
fireEvent.change(input!, { target: { value: '2026-06-0' } });
// We might need to wait for the effect
await new Promise((r) => setTimeout(r, 0));
expect(handleChange).toHaveBeenCalledWith("");
});
});