import React from 'react';
import * as apollo from '@apollo/client';
import { render, fireEvent } from '@testing-library/react';
import { useCreateNrDeliveryOrderMutation } from '../nrDeliveryOrder';

describe('useCreateNrDeliveryOrderMutation', () => {
    const buttonId = 'BTN';

    const TestApp = () => {
        const { createNrDeliveryOrder } = useCreateNrDeliveryOrderMutation({
            input: { cmmId: '435', territory: '' },
        });

        return (
            <button
                type="button"
                data-testid={buttonId}
                onClick={async () => {
                    await createNrDeliveryOrder();
                }}
            />
        );
    };

    const renderWrapper = () => render(<TestApp />);

    const mock = jest.fn();

    beforeEach(() => {
        jest.spyOn(apollo, 'useMutation').mockReturnValue([
            mock,
            {} as apollo.MutationResult,
        ]);
        mock.mockClear();
    });

    test('executes mutation', () => {
        const { getByTestId } = renderWrapper();
        const btn = getByTestId(buttonId);
        fireEvent.click(btn);

        expect(mock).toHaveBeenCalled();
        expect(mock).toHaveBeenCalledTimes(1);
    });
});
