import { renderInAppContext } from '@theorchard/suite-testing';
import React from 'react';
import ReleaseScheduleDisplay from '../release-schedule-display';
import type { ReleaseScheduleDisplayProps } from '../release-schedule-display';

describe('<ReleaseScheduleDisplay>', () => {
    const title = 'Scheduled Releases';
    const product = {
        productId: '123',
        productName: 'Vanishing Point',
        saleStartDate: new Date('2023-01-12T00:00:00.000Z'),
        releaseSchedule: {
            timed: [],
            staggered: [],
            unsupportedTimed: [],
        },
    };
    const childrenTestId = 'children';
    const children = <div data-testid={childrenTestId}>children!</div>;

    const defaultProps: ReleaseScheduleDisplayProps = {
        title,
        product,
        children,
    };

    const renderWrapper = (props: Partial<ReleaseScheduleDisplayProps> = {}) =>
        renderInAppContext(
            <ReleaseScheduleDisplay {...defaultProps} {...props} />
        );

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

    describe('renders product details', () => {
        test('renders product name', () => {
            const { queryByText } = renderWrapper();
            const productName = queryByText('Vanishing Point');
            expect(productName).toBeInTheDocument();
        });

        test('renders product sales start date', () => {
            const { queryByText } = renderWrapper();
            const productName = queryByText('12 Jan 2023 at 00:00');
            expect(productName).toBeInTheDocument();
        });
    });

    describe('title', () => {
        test('renders value from title prop', () => {
            const { queryByText } = renderWrapper();
            const titleElement = queryByText(title);
            expect(titleElement).toBeInTheDocument();
        });
    });

    describe('renders children', () => {
        test('renders', () => {
            const { queryByTestId } = renderWrapper();
            const childElement = queryByTestId(childrenTestId);
            expect(childElement).toBeInTheDocument();
        });
    });
});
