From d2104dac5aa4022bff47285247321638222bb1c3 Mon Sep 17 00:00:00 2001 From: "GitStart-Cal.com" <121884634+gitstart-calcom@users.noreply.github.com> Date: Thu, 20 Jul 2023 06:13:23 +0100 Subject: [PATCH] test: Create unit tests for react components in packages/ui/components/breadcrumb (CALCOM-614) (#10256) Co-authored-by: gitstart-calcom --- .../components/breadcrumb/breadcrumb.test.tsx | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 packages/ui/components/breadcrumb/breadcrumb.test.tsx diff --git a/packages/ui/components/breadcrumb/breadcrumb.test.tsx b/packages/ui/components/breadcrumb/breadcrumb.test.tsx new file mode 100644 index 0000000000..0d9a8b4c8f --- /dev/null +++ b/packages/ui/components/breadcrumb/breadcrumb.test.tsx @@ -0,0 +1,105 @@ +import { render, screen } from "@testing-library/react"; + +import { Breadcrumb, BreadcrumbItem } from "./Breadcrumb"; + +describe("Tests for Breadcrumb component", () => { + test("Should render correctly with no items", () => { + render( + +
Dummy Child
+
+ ); + + const breadcrumbNav = screen.getByRole("navigation"); + expect(breadcrumbNav).toBeInTheDocument(); + + const separators = screen.queryAllByText("/"); + expect(separators).toHaveLength(0); + }); + + test("Should render correctly with custom list props", () => { + render( + + + Home + + + About + + + Contact + + + ); + + const customListItems = document.querySelectorAll(".custom-list"); + expect(customListItems.length).toBe(3); + }); + + test("Should generate correct hrefs and labels", () => { + render( + + Category + Item + + ); + + const categoryLink = screen.getByText("Category"); + const itemLink = screen.getByText("Item"); + + expect(categoryLink.getAttribute("href")).toBe("/category"); + expect(itemLink.getAttribute("href")).toBe("/category/item"); + }); + + test("Should /category be a anchor tag", async () => { + render( + + Category + Item + + ); + + const categoryLink = screen.getByText("Category"); + const categoryAnchor = categoryLink.closest("a"); + const categoryItem = categoryAnchor?.parentElement; + + expect(categoryAnchor).toBeInTheDocument(); + expect(categoryItem?.tagName).toBe("LI"); + expect(categoryAnchor?.getAttribute("href")).toBe("/category"); + }); + + test("Should not render separators when there is only one item", () => { + render( + + Home + + ); + + const separators = screen.queryAllByText("/"); + expect(separators).toHaveLength(0); + }); + + test("Should render breadcrumbs with correct order when rendered in reverse order", () => { + render( + + Contact + About + Home + + ); + + const breadcrumbList = screen.getByRole("list"); + const breadcrumbItems = screen.getAllByRole("listitem"); + + expect(breadcrumbItems).toHaveLength(3); + expect(breadcrumbList).toContainElement(breadcrumbItems[2]); + expect(breadcrumbList).toContainElement(breadcrumbItems[1]); + expect(breadcrumbList).toContainElement(breadcrumbItems[0]); + expect(breadcrumbItems[2]).toHaveTextContent("Home"); + expect(breadcrumbItems[1]).toHaveTextContent("About"); + expect(breadcrumbItems[0]).toHaveTextContent("Contact"); + + const separators = screen.getAllByText("/"); + expect(separators).toHaveLength(2); + }); +});