import '@testing-library/jest-dom/extend-expect';
import React from 'react';
import { render, act } from '@testing-library/react';
import { MockedProvider, MockedResponse } from '@apollo/react-testing';

import { DEFAULT_FILTERS } from 'src/constants';
import { ComparisonFilter } from 'src/definitions';

export interface Options {
    filter?: Partial<ComparisonFilter>;
    wait?: number;
    arguments?: object;
    mocks?: MockedResponse[]
}

const renderWithProvider = async (Component: React.FC, options: Options = {}) => {
    const {
        filter = {},
        mocks = [],
        wait = 50
    } = options;

    const resolvers = {
        Query: {
            comparisonFilter: () => ({
                ...DEFAULT_FILTERS,
                ...filter
            })
        }
    };

    const container = render(
        <MockedProvider mocks={mocks} resolvers={resolvers} addTypename={false}>
            <Component />
        </MockedProvider>
    );

    if (wait)
        await act(async () => {
            await new Promise(resolve => setTimeout(resolve, wait));
        });

    return container;
};

export default renderWithProvider;
