import { fireEvent, render } from '@testing-library/react';
import TimedReleaseTimeSelector from '../timed-release-time-selector';
import type { TimedReleaseTimeSelectorProps } from '../timed-release-time-selector';

describe('<TimeSelector/>', () => {
    const onPrevious = jest.fn();
    const onSaleDateTimeChange = jest.fn();
    const onTimeOffsetChange = jest.fn();
    const onAddToSchedule = jest.fn();

    const defaultProps: TimedReleaseTimeSelectorProps = {
        timeOffset: '01:00',
        onPrevious,
        onSaleDateTimeChange,
        onTimeOffsetChange,
        onAddToSchedule,
        hasTimedReleases: false,
        selectedSupportedStores: [],
        selectedUnsupportedStores: [],
    };

    const renderWrapper = (
        props: Partial<TimedReleaseTimeSelectorProps> = {}
    ) => render(<TimedReleaseTimeSelector {...defaultProps} {...props} />);

    afterEach(jest.resetAllMocks);

    test('matches snapshot', () => {
        const { container } = renderWrapper();
        expect(container).toMatchSnapshot();
    });

    describe('<Button/>', () => {
        let button: HTMLElement;
        beforeEach(() => {
            const { getAllByTestId } = renderWrapper();
            [button] = getAllByTestId('back-button');
        });

        describe('clicked', () => {
            beforeEach(() => fireEvent.click(button));
            test('calls onPrevious', () =>
                expect(onPrevious).toHaveBeenCalled());
        });
    });
});
