import { fireEvent, render, screen } from "@testing-library/react";
import { ProductCard } from "../../components/ProductCard";
import { __setShopState } from "../mocks/shop";
import { __getRouter } from "../mocks/nextNavigation";
import { sampleProduct } from "../fixtures";
import { vi } from "vitest";

describe("ProductCard", () => {
  it("adds product to cart when clicked", () => {
    const addToCart = vi.fn();
    __setShopState({ cart: [], addToCart });

    render(<ProductCard product={sampleProduct} />);

    const button = screen.getByRole("button", { name: /Lisää koriin/i });
    fireEvent.click(button);

    expect(addToCart).toHaveBeenCalled();
  });

  it("navigates to product page for variant items", () => {
    const router = __getRouter();
    const variantProduct = { ...sampleProduct, colors: [{ name: "Blue", hex: "#00f", stock: 1 }] };

    render(<ProductCard product={variantProduct} />);

    const button = screen.getByRole("button", { name: /Lisää koriin/i });
    fireEvent.click(button);

    expect(router.push).toHaveBeenCalledWith(`/tuote/${variantProduct.id}`);
  });
});
