import React from 'react';
import { screen } from '@testing-library/react';
import { Identity } from '@theorchard/suite-frontend';
import { createIdentity, renderInAppContext } from '@theorchard/suite-testing';
import * as taxWithholdingResponse from 'src/__fixtures__/graphql/reference-tax-withholding-response.json';
import {
    TaxWithholding,
    TaxWithholdingPropType,
} from 'src/components/reference/tax-withholding';
import { TAX_WITHOLDING_COUNTRY } from 'src/constants';

describe('<TaxWithholding>', () => {
    const defaultProps: TaxWithholdingPropType = {
        rateList: taxWithholdingResponse.abacusReferenceTaxWithholding
            .items as TaxWithholdingPropType['rateList'],
        isLoading: false,
        filterBy: TAX_WITHOLDING_COUNTRY.UK,
    };
    const render = (
        props: TaxWithholdingPropType,
        mockIdentity?: Partial<Identity>
    ) =>
        renderInAppContext(<TaxWithholding {...props} />, {
            identity: createIdentity(mockIdentity),
        });

    it('renders', () => {
        render(defaultProps);
        expect(screen.getByText('Country Of Residence')).toBeDefined();
        expect(screen.getByText('Tax Withholding Rate')).toBeDefined();
        expect(screen.getByText('Argentina')).toBeDefined();
        expect(screen.getByText('Austria')).toBeDefined();
        expect(screen.getByText('5%')).toBeDefined();
        expect(screen.getByText('0%')).toBeDefined();
    });

    it('renders with US Tax Witholding Rates', () => {
        const props = {
            ...defaultProps,
            filterBy: TAX_WITHOLDING_COUNTRY.US,
        };
        render(props);
        expect(screen.getByText('US Tax Withholding Rates')).toBeDefined();
        expect(screen.getByText('Country Of Residence')).toBeDefined();
        expect(screen.getByText('Tax Withholding Rate')).toBeDefined();
        expect(screen.getByText('Resource Provision')).toBeDefined();
        expect(screen.getByText('Ukraine')).toBeDefined();
        expect(screen.getByText('Thailand')).toBeDefined();
        expect(screen.getByText('5%')).toBeDefined();
        expect(screen.getByText('15%')).toBeDefined();
        expect(screen.getByText('Yes')).toBeDefined();
        expect(screen.getAllByText('No')).toBeDefined();
    });
});
