import React from 'react';
import * as apollo from '@apollo/client';
import { render, fireEvent } from '@testing-library/react';
import { OwnershipNrDeliveryOrderStatus } from 'src/data/globalTypes';
import { useUpdateDeliveryOrderStatusMutation } from '../updateNrDeliveryOrderStatus';

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

    const TestApp = () => {
        const { updateOrders } = useUpdateDeliveryOrderStatusMutation();

        const handleUpdateOrders = async () => {
            await updateOrders({
                variables: {
                    input: {
                        ids: ['14'],
                        status: OwnershipNrDeliveryOrderStatus.DELIVERED,
                    },
                },
            });
        };

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

    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);
    });
});
