47 lines
1.9 KiB
TypeScript
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("");
|
|
});
|
|
});
|