/* !
 * (c) Copyright 2025 Palantir Technologies Inc. All rights reserved.
 */

import { render } from "@testing-library/react";

import { beforeEach, describe, expect, it, vi } from "@blueprintjs/test-commons/vitest";

import { useValidateProps } from "./useValidateProps";

describe("useValidateProps", () => {
    const validatorSpy = vi.fn();

    beforeEach(() => {
        validatorSpy.mockClear();
    });

    const TestComponent: React.FC<{ value?: number }> = ({ value }) => {
        useValidateProps(validatorSpy, [value]);
        return null;
    };

    it("calls validator in development environment", () => {
        render(<TestComponent />);
        expect(validatorSpy).toHaveBeenCalled();
    });

    it.skip("does not call validator in production environment", () => {
        // TODO: figure out how to test this
    });

    it("calls validator when dependencies change", () => {
        const { rerender } = render(<TestComponent value={1} />);
        expect(validatorSpy).toHaveBeenCalledOnce();

        rerender(<TestComponent value={2} />);
        expect(validatorSpy).toHaveBeenCalledTimes(2);
    });

    it("does not call validator when dependencies haven't changed", () => {
        const { rerender } = render(<TestComponent value={1} />);

        rerender(<TestComponent value={1} />);
        expect(validatorSpy).toHaveBeenCalledOnce();
    });
});
