import { render } from "@testing-library/react-native"; import React from "react"; import { BoundingBoxView } from "./BoundingBoxView"; import { useBoundingBoxStyle, BoundingBox } from "../hooks"; // Mocking the hooks jest.mock("../hooks", () => ({ useBoundingBoxStyle: jest.fn(), })); const mockBox: BoundingBox = { origin: { x: 10, y: 10 }, size: { x: 100, y: 50 }, }; describe("BoundingBoxView component", () => { it("renders correctly without a label", () => { (useBoundingBoxStyle as jest.Mock).mockReturnValue({ height: 50, width: 100, borderColor: "magenta", borderWidth: 1, position: "absolute", top: 10, left: 10, }); const { queryByTestId } = render( ); expect(queryByTestId(`test--boundingBox--x10y10-w100h50`)).toBeTruthy(); expect(queryByTestId(`test-text`)).toBeNull(); }); it("renders correctly with a label", () => { const labelBox = { ...mockBox, label: "TestLabel" }; (useBoundingBoxStyle as jest.Mock).mockReturnValue({ height: 50, width: 100, borderColor: "magenta", borderWidth: 1, position: "absolute", top: 10, left: 10, }); const { getByTestId } = render( ); expect(getByTestId(`test-text`).props.children).toBe("TestLabel"); }); it("renders with different scales", () => { const labelBox = { ...mockBox, label: "TestLabel" }; (useBoundingBoxStyle as jest.Mock).mockReturnValue({ height: 50 * 2, width: 100 * 2, borderColor: "magenta", borderWidth: 1, position: "absolute", top: 10 * 2, left: 10 * 2, }); const { getByTestId } = render( ); const boundingBox = getByTestId(`test--boundingBox--x10y10-w100h50`); expect(boundingBox.props.style.height).toBe(100); expect(boundingBox.props.style.width).toBe(200); }); it("verifies style calculations", () => { (useBoundingBoxStyle as jest.Mock).mockReturnValue({ height: 50, width: 100, borderColor: "blue", borderWidth: 2, position: "absolute", top: 20, left: 20, }); const { getByTestId } = render( ); const boundingBox = getByTestId(`test--boundingBox--x10y10-w100h50`); expect(boundingBox.props.style.borderColor).toBe("blue"); expect(boundingBox.props.style.borderWidth).toBe(2); expect(boundingBox.props.style.top).toBe(20); expect(boundingBox.props.style.left).toBe(20); }); });