import React from 'react';
import { screen, waitFor } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import { trackAttachments } from 'src/__fixtures__/graphql/track-search-response';
import * as contractTermQuery from 'src/apollo/queries/contract-term';
import ContractTermTracks, {
    ContractTermTracksPropTypes,
} from 'src/components/contract-detail/contract-term-tracks';

describe('<ContractTermTracks>', () => {
    const props: ContractTermTracksPropTypes = {
        contractTermId: '1',
        tracksIsrcs: ['QMMZ200T0181', 'QMMZ200T0182'],
    };

    const render = () => renderInAppContext(<ContractTermTracks {...props} />);

    afterEach(jest.restoreAllMocks);

    let contractTermAttachmentsMock: any;

    beforeEach(() => {
        contractTermAttachmentsMock = jest
            .spyOn(contractTermQuery, 'useContractTermAttachments')
            .mockReturnValue(
                async () =>
                    await Promise.resolve(
                        trackAttachments?.abacusContractTerm?.attachmentsObjects
                    )
            );
    });

    it('requests contract term attachments query', async () => {
        render();
        await waitFor(() => {
            expect(contractTermAttachmentsMock).toHaveBeenCalled();
        });
    });

    it('renders tracks names', async () => {
        render();
        await waitFor(() => {
            expect(screen.getByText('Test Track 3')).toBeDefined();
            expect(screen.getByText('QMMZ200T0181')).toBeDefined();
            expect(screen.getByText('Test Track 3')).toBeDefined();
            expect(screen.getByText('QMMZ200T0182')).toBeDefined();
        });
    });
});
