import React from 'react';
import { screen } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import { contractDetails as mockContract } from 'src/__fixtures__/graphql/contract-details';
import { NrContractTermCondition } from 'src/components/contract-detail/nr-contract-term-condition';
import { ContractTermContext } from 'src/contexts/contract-term-context';
import { initialTermsState } from 'src/reducers/contract-term/contract-terms-details-reducer';

const componentInContext = (contextValues: any, props: any) => (
    <ContractTermContext.Provider value={contextValues}>
        <table>
            <tbody>
                <tr>
                    <NrContractTermCondition {...props} />
                </tr>
            </tbody>
        </table>
    </ContractTermContext.Provider>
);

describe('<NrContractTermCondition>', () => {
    const contractTermCondition =
        mockContract.abacusContract.contractTerms[0].conditions[0];
    const state = {
        ...initialTermsState,
        stores: { 1: 'Spotify', 2: '121 Music' },
        transactionTypes: {
            1: { txnTypeCode: 'DR', txnTypeName: 'Downloaded Ringtones' },
            2: { txnTypeCode: 'EQ', txnTypeName: 'Equity' },
        },
    };
    const contextValues = { state, dispatch: jest.fn() };
    const render = (props: any) =>
        renderInAppContext(componentInContext(contextValues, props));

    const props = { contractTermCondition };

    it('renders term condition names', () => {
        render(props);
        expect(screen.getByText('Test condition name 1')).toBeDefined();
    });

    it('renders transaction types', () => {
        render(props);
        expect(
            screen.getByText('DR - Downloaded Ringtones, EQ - Equity')
        ).toBeDefined();
    });

    it('renders services', () => {
        render(props);
        expect(screen.getByText('Spotify, 121 Music')).toBeDefined();
    });

    it('renders country names', () => {
        render(props);
        expect(
            screen.getByText('United States of America, Italy')
        ).toBeDefined();
    });

    it('renders commission', () => {
        render(props);
        expect(screen.getByText('10 %')).toBeDefined();
    });
});
