import React from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { renderInAppContext } from '@theorchard/suite-testing';
import {
    getMergedProduct,
    getProductMetadata,
    getProductPricingData,
} from 'lib/mockProductData';
import productPricingQuery from 'src/data/queries/productPricing/ProductPricingQuery.gql';
import * as features from 'src/utils/features';
import SchedulingAndPricing from '../schedulingAndPricing';

const data = getProductMetadata({
    productId: 112,
    releaseDate: '2010-11-11',
    saleStartDate: '2021-12-12',
    releaseSchedule: { timed: [{ saleDateTime: '2021-12-12T00:00:00' }] },
    preorderDate: '1900-01-01',
    previewable: 'Yes',
    tracks: [],
});

const mergedData = getMergedProduct(data);

const mockProviderRequests = [
    {
        request: {
            query: productPricingQuery,
            variables: {
                id: '112',
            },
        },
        result: {
            data: {
                product: getProductPricingData(),
            },
        },
    },
];

describe('<SchedulingAndPricing>', () => {
    test('displays correctly', () => {
        const { getByTestId, getByText, getAllByText } = renderInAppContext(
            <MockedProvider mocks={mockProviderRequests} addTypename={false}>
                <SchedulingAndPricing
                    testId="SchedulingAndPricing"
                    product={data}
                    mergedProduct={mergedData}
                />
            </MockedProvider>
        );
        expect(getByTestId('SchedulingAndPricing')).toBeTruthy();
        expect(getByText('11 Nov 2010')).toBeVisible();
        expect(getByText('12 Dec 2021')).toBeVisible();
        expect(getAllByText('-')[0]).toBeVisible();
        expect(getByText('Yes')).toBeVisible();
    });

    test('displays correctly with timed release', () => {
        jest.spyOn(features, 'useTimedReleasesFF').mockReturnValue(true);
        const { getByTestId, getByText, getAllByText } = renderInAppContext(
            <MockedProvider mocks={mockProviderRequests} addTypename={false}>
                <SchedulingAndPricing
                    testId="SchedulingAndPricing"
                    product={data}
                    mergedProduct={mergedData}
                />
            </MockedProvider>
        );
        expect(getByTestId('SchedulingAndPricing')).toBeTruthy();
        expect(getByText('11 Nov 2010')).toBeVisible();
        expect(getByText('12 Dec 2021')).toBeVisible();
        expect(getAllByText('-')[0]).toBeVisible();
        expect(getByText('Yes')).toBeVisible();
        expect(getByText('12:00 AM')).toBeVisible();
    });
});
