import React from "react"; import { IframeEmbed } from "./index"; import { render, screen, fireEvent } from "@testing-library/react"; describe("IframeEmbed", () => { it("renders nothing when iframeUrl is not provided", () => { const { container } = render(); expect(container.querySelector("section")).not.toBeInTheDocument(); }); it("renders the iframe when iframeUrl is provided", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); expect(iframe).toBeInTheDocument(); expect(iframe).toHaveAttribute("src", "https://example.com/embed"); }); it("applies anchorId to the section", () => { const { container } = render( ); expect(container.querySelector("#embed-section")).toBeInTheDocument(); }); it("applies background color when backgroundColor is provided", () => { render( ); const iframe = screen.getByTitle("Iframe Embed"); expect(iframe.style.background).toBe("rgb(36, 167, 106)"); }); it("applies transparent background when backgroundColor is not provided", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); expect(iframe.style.background).toBe("transparent"); }); it("updates iframe height on postMessage event", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); fireEvent( window, new MessageEvent("message", { data: { iframeHeight: 300 } }) ); expect(iframe.style.height).toBe("300px"); }); it("removes message listener on unmount", () => { const removeEventListenerSpy = jest.spyOn(window, "removeEventListener"); const { unmount } = render(); unmount(); expect(removeEventListenerSpy).toHaveBeenCalledWith( "message", expect.any(Function) ); removeEventListenerSpy.mockRestore(); }); it("does not attach message listener when iframeUrl is empty", () => { const addEventListenerSpy = jest.spyOn(window, "addEventListener"); render(); expect(addEventListenerSpy).not.toHaveBeenCalledWith( "message", expect.any(Function) ); addEventListenerSpy.mockRestore(); }); it("applies initial height when height prop is provided", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); expect(iframe.style.height).toBe("200px"); }); it("ignores non-numeric iframeHeight values", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); fireEvent(window, new MessageEvent("message", { data: { iframeHeight: "abc" } })); expect(iframe.style.height).toBe(""); }); it("ignores iframeHeight exceeding max cap", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); fireEvent(window, new MessageEvent("message", { data: { iframeHeight: 99999 } })); expect(iframe.style.height).toBe(""); }); it("ignores negative iframeHeight values", () => { render(); const iframe = screen.getByTitle("Iframe Embed"); fireEvent(window, new MessageEvent("message", { data: { iframeHeight: -100 } })); expect(iframe.style.height).toBe(""); }); });