import React from 'react';
import { vi, describe, it, expect } from 'vitest';
import userEvent from '@testing-library/user-event';
import { render, screen } from '@testing-library/react';
import RangeSelector from './range-selector.component';
describe('RangeSelector', () => {
const mockSetLowerRange = vi.fn();
const user = userEvent.setup();
it('should render all range tabs', () => {
const upperRange = new Date('2024-12-31');
render();
expect(screen.getByRole('tablist', { name: /trendline range tabs/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /1 day/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /5 days/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /1 month/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /6 months/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /1 year/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /5 years/i })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /all/i })).toBeInTheDocument();
// last tab is selected by default
expect(screen.getByRole('tab', { name: /all/i })).toHaveAttribute('aria-selected', 'true');
expect(screen.getByRole('tab', { name: /1 day/i })).toHaveAttribute('aria-selected', 'false');
});
it.each([
['1 day', 1],
['5 days', 5],
['1 month', 30],
['6 months', 182],
['1 year', 365],
['5 years', 5 * 365],
])('should set lower range correctly for %s', async (label, days) => {
const upperRange = new Date('2024-12-31');
render();
const expectedLowerRange = new Date(upperRange.getTime() - days * 24 * 3600 * 1000);
await user.click(screen.getByText(label));
expect(mockSetLowerRange).toHaveBeenCalledWith(expectedLowerRange);
});
it('should set lower range to start of epoch for "All" range', async () => {
const upperRange = new Date('2024-12-31');
render();
await user.click(screen.getByRole('tab', { name: /all/i }));
expect(mockSetLowerRange).toHaveBeenCalledWith(new Date(0));
});
});