Skip to content

Commit f0cdefd

Browse files
Add tests for DxcBleed and DxcBreadcrumbs components; update Jest config to ignore mock files
1 parent 678cc08 commit f0cdefd

File tree

6 files changed

+88
-37
lines changed

6 files changed

+88
-37
lines changed

packages/lib/jest.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const config: Config = {
55
coveragePathIgnorePatterns: [
66
"utils.ts",
77
"index.ts",
8+
"test/mocks",
89
".*Context\\.tsx$", // Is deprecated and will be removed in the future
910
],
1011
moduleNameMapper: {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { render } from "@testing-library/react";
2+
import DxcBleed from "./Bleed";
3+
4+
describe("Bleed component tests", () => {
5+
test("Bleed renders correctly with children", () => {
6+
const testContent = "Test content";
7+
const { getByText } = render(
8+
<DxcBleed space="1rem">
9+
<div>{testContent}</div>
10+
</DxcBleed>
11+
);
12+
expect(getByText(testContent)).toBeTruthy();
13+
});
14+
});

packages/lib/src/bleed/Bleed.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import DxcContainer from "../container/Container";
33

44
const getNegativeValue = (value?: string) => (value ? `calc(${value} * -1)` : null);
55

6-
export default function DxcBleed({ space, horizontal, vertical, top, right, bottom, left, children }: BleedPropsType) {
7-
return (
8-
<DxcContainer
9-
margin={{
10-
top: getNegativeValue(top) ?? getNegativeValue(vertical) ?? getNegativeValue(space) ?? "0rem",
11-
right: getNegativeValue(right) ?? getNegativeValue(horizontal) ?? getNegativeValue(space) ?? "0rem",
12-
bottom: getNegativeValue(bottom) ?? getNegativeValue(vertical) ?? getNegativeValue(space) ?? "0rem",
13-
left: getNegativeValue(left) ?? getNegativeValue(horizontal) ?? getNegativeValue(space) ?? "0rem",
14-
}}
15-
>
16-
{children}
17-
</DxcContainer>
18-
);
19-
}
6+
const DxcBleed = ({ space, horizontal, vertical, top, right, bottom, left, children }: BleedPropsType) => (
7+
<DxcContainer
8+
margin={{
9+
top: getNegativeValue(top) ?? getNegativeValue(vertical) ?? getNegativeValue(space) ?? "0rem",
10+
right: getNegativeValue(right) ?? getNegativeValue(horizontal) ?? getNegativeValue(space) ?? "0rem",
11+
bottom: getNegativeValue(bottom) ?? getNegativeValue(vertical) ?? getNegativeValue(space) ?? "0rem",
12+
left: getNegativeValue(left) ?? getNegativeValue(horizontal) ?? getNegativeValue(space) ?? "0rem",
13+
}}
14+
>
15+
{children}
16+
</DxcContainer>
17+
);
18+
19+
export default DxcBleed;

packages/lib/src/breadcrumbs/Breadcrumbs.test.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,41 @@ describe("Breadcrumbs component tests", () => {
9393
userEvent.click(getByText("Preferences"));
9494
expect(onItemClick).toHaveBeenCalledWith("/");
9595
});
96+
test("handleOnClick prevents default and calls onClick when href is provided", () => {
97+
const onItemClick = jest.fn();
98+
const { getByText } = render(
99+
<DxcBreadcrumbs
100+
onItemClick={onItemClick}
101+
items={[
102+
{ label: "Home", href: "/home" },
103+
{ label: "Current Page", href: "" },
104+
]}
105+
/>
106+
);
107+
const homeLink = getByText("Home");
108+
userEvent.click(homeLink);
109+
expect(onItemClick).toHaveBeenCalledWith("/home");
110+
});
111+
test("handleOnMouseEnter sets title when text overflows", () => {
112+
const { getByText } = render(
113+
<DxcBreadcrumbs
114+
items={[
115+
{ label: "Home", href: "/home" },
116+
{ label: "Very Long Current Page Label That Should Overflow", href: "" },
117+
]}
118+
/>
119+
);
120+
121+
const currentPageElement = getByText("Very Long Current Page Label That Should Overflow");
122+
123+
// Mock element dimensions to simulate overflow
124+
Object.defineProperty(currentPageElement, "scrollWidth", { value: 200, configurable: true });
125+
Object.defineProperty(currentPageElement, "clientWidth", { value: 100, configurable: true });
126+
127+
// Simulate mouse enter
128+
userEvent.hover(currentPageElement);
129+
130+
// Check if title is set when there's overflow
131+
expect(currentPageElement.title).toBe("Very Long Current Page Label That Should Overflow");
132+
});
96133
});

packages/lib/src/footer/Footer.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ReactNode, useContext, useEffect, useMemo, useRef, useState } from "react";
1+
import { useContext, useEffect, useMemo, useRef, useState } from "react";
22
import styled from "@emotion/styled";
33
import DxcIcon from "../icon/Icon";
44
import { Tooltip } from "../tooltip/Tooltip";
@@ -288,9 +288,4 @@ const DxcFooter = ({
288288
);
289289
};
290290

291-
const LeftContent = ({ children }: { children: ReactNode }) => <>{children}</>;
292-
const RightContent = ({ children }: { children: ReactNode }) => <>{children}</>;
293-
294-
DxcFooter.LeftContent = LeftContent;
295-
DxcFooter.RightContent = RightContent;
296291
export default DxcFooter;

packages/lib/src/nav-tabs/NavTabs.test.tsx

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render } from "@testing-library/react";
1+
import { fireEvent, render } from "@testing-library/react";
22
import DxcNavTabs from "./NavTabs";
33

44
describe("Tabs component tests", () => {
@@ -70,26 +70,30 @@ describe("Tabs component tests", () => {
7070
expect(tabs[2]?.getAttribute("tabindex")).toBe("3");
7171
});
7272

73-
// test("Keyboard navigation changes focus on arrow keys", () => {
74-
// const { getByRole, getAllByRole } = render(
75-
// <DxcNavTabs>
76-
// <DxcNavTabs.Tab>Tab 1</DxcNavTabs.Tab>
77-
// <DxcNavTabs.Tab disabled>Tab 2</DxcNavTabs.Tab>
78-
// <DxcNavTabs.Tab active>Tab 3</DxcNavTabs.Tab>
79-
// </DxcNavTabs>
80-
// );
73+
test("Keyboard navigation changes focus on arrow keys", () => {
74+
const { getByRole, getAllByRole } = render(
75+
<DxcNavTabs>
76+
<DxcNavTabs.Tab>Tab 1</DxcNavTabs.Tab>
77+
<DxcNavTabs.Tab disabled>Tab 2</DxcNavTabs.Tab>
78+
<DxcNavTabs.Tab active>Tab 3</DxcNavTabs.Tab>
79+
</DxcNavTabs>
80+
);
8181

82-
// const tablist = getByRole("tablist");
83-
// const tabs = getAllByRole("tab");
82+
const tablist = getByRole("tablist");
83+
const tabs = getAllByRole("tab");
8484

85-
// expect(tabs[2]?.getAttribute("aria-selected")).toBe("true");
85+
// Initially, Tab 3 is active
86+
expect(tabs[2]?.getAttribute("aria-selected")).toBe("true");
87+
expect(tabs[2]?.getAttribute("tabindex")).toBe("0");
8688

87-
// fireEvent.keyDown(tablist, { key: "ArrowLeft" });
88-
// expect(tabs[0]?.getAttribute("tabindex")).toBe("0");
89+
// Press ArrowLeft - should focus Tab 1 (skips disabled Tab 2)
90+
fireEvent.keyDown(tablist, { key: "ArrowLeft" });
91+
expect(document.activeElement).toBe(tabs[0]);
8992

90-
// fireEvent.keyDown(tablist, { key: "ArrowRight" });
91-
// expect(tabs[2]?.getAttribute("tabindex")).toBe("0");
92-
// });
93+
// Press ArrowRight from Tab 1 - should focus Tab 3 (skips disabled Tab 2)
94+
fireEvent.keyDown(tablist, { key: "ArrowRight" });
95+
expect(document.activeElement).toBe(tabs[2]);
96+
});
9397

9498
test("Disabled tabs have aria-disabled and cannot be tab-focused", () => {
9599
const { getAllByRole } = render(

0 commit comments

Comments
 (0)