/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import { render } from "@testing-library/react"; import { SizeSubmenu } from "content-src/components/Widgets/SizeSubmenu"; function renderSizeSubmenu(props = {}) { const { container } = render( {}} {...props} /> ); return { container }; } describe("", () => { it("renders a Change size item whose submenu uses the given id", () => { const { container } = renderSizeSubmenu(); const item = container.querySelector( "panel-item[submenu='test-size-submenu']" ); expect(item).toBeInTheDocument(); expect( item.querySelector("span[data-l10n-id='newtab-widget-menu-change-size']") ).toBeInTheDocument(); expect( container.querySelector("panel-list[id='test-size-submenu']") ).toBeInTheDocument(); }); it("renders one item per size with the size-specific l10n id", () => { const { container } = renderSizeSubmenu(); const sizeItems = container.querySelectorAll("panel-item[data-size]"); expect(Array.from(sizeItems).map(i => i.getAttribute("data-size"))).toEqual( ["small", "medium", "large"] ); expect( container .querySelector("panel-item[data-size='large']") .getAttribute("data-l10n-id") ).toBe("newtab-widget-size-large"); }); it("marks only the checkedSize as checked", () => { const { container } = renderSizeSubmenu({ checkedSize: "large" }); expect( container .querySelector("panel-item[data-size='large']") .hasAttribute("checked") ).toBe(true); expect( container .querySelector("panel-item[data-size='small']") .hasAttribute("checked") ).toBe(false); }); it("renders only the sizes it is given", () => { const { container } = renderSizeSubmenu({ sizes: ["medium", "large"] }); expect( Array.from(container.querySelectorAll("panel-item[data-size]")).map(i => i.getAttribute("data-size") ) ).toEqual(["medium", "large"]); expect( container.querySelector("panel-item[data-size='small']") ).not.toBeInTheDocument(); }); });