import React from 'react';
import { NetworkStatus } from '@apollo/client';
import { screen } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import { payoneerProgramsList } from 'src/__fixtures__/graphql/payment-entity-payoneer-programs';
import * as taxWithholdingResponse from 'src/__fixtures__/graphql/reference-tax-withholding-response.json';
import * as vatRatesResponse from 'src/__fixtures__/graphql/reference-vat-rates-response.json';
import * as payoneerProgramQuery from 'src/apollo/queries/payment-entity-payoneer-program';
import * as taxWithholdingQueries from 'src/apollo/queries/reference-tax-withholding';
import * as vatRatesQueries from 'src/apollo/queries/reference-vat-rate';
import Reference from 'src/components/reference/reference';
import type { GetAbacusReferenceTaxWithholdingQuery } from 'src/apollo/queries/__generated__/reference-tax-withholding';
import type { GetAbacusReferenceVatRatesQuery } from 'src/apollo/queries/__generated__/reference-vat-rate';
import type { GetPaymentEntityPayoneerProgramsListQuery } from 'src/apollo/queries/payment-entity-payoneer-program/__generated__/get-payment-entity-payoneer-programs-list';

describe('<Reference>', () => {
    const render = () => renderInAppContext(<Reference />);

    afterEach(jest.restoreAllMocks);

    beforeEach(() => {
        jest.spyOn(
            taxWithholdingQueries,
            'useReferenceTaxWithholding'
        ).mockReturnValue({
            data: taxWithholdingResponse as GetAbacusReferenceTaxWithholdingQuery,
            loading: false,
        });
        jest.spyOn(vatRatesQueries, 'useReferenceVatRates').mockReturnValue({
            data: vatRatesResponse as GetAbacusReferenceVatRatesQuery,
            loading: false,
        });
        jest.spyOn(
            payoneerProgramQuery,
            'usePayoneerProgramsList'
        ).mockReturnValue({
            data: payoneerProgramsList as GetPaymentEntityPayoneerProgramsListQuery,
            fetchMore: jest.fn(),
            loading: false,
            error: undefined,
            networkStatus: NetworkStatus.ready,
        });
    });

    it('renders', () => {
        render();
        expect(screen.getByText('Reference')).toBeDefined();
        expect(screen.getByText('UK tax withholding rates')).toBeDefined();
        expect(screen.getByText('Value Added Tax (VAT) Rates')).toBeDefined();
        expect(screen.getAllByText('Mechanical Rates')).toBeDefined();
        expect(screen.getAllByText('Payoneer Programs')).toBeDefined();
    });
});
