Skip to content

Commit 47b092f

Browse files
author
Said Shah
committed
Added tests for progress bar
1 parent 61ffc08 commit 47b092f

File tree

2 files changed

+115
-3
lines changed

2 files changed

+115
-3
lines changed
Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,104 @@
11
import React from "react";
2+
import faker from "faker";
3+
import {
4+
ProgressBar,
5+
ProgressBarStyles,
6+
ProgressBarErrorClass,
7+
} from "./progress-bar";
8+
import { render, getByTestId } from "@testing-library/react";
29

310
describe("ProgressBar", () => {
4-
test.skip("TODO - https://github.com/AndcultureCode/AndcultureCode.JavaScript.React.Components/issues/13", () => {});
11+
test("when default props, renders progress bar", () => {
12+
// Arrange
13+
const expected = "dataTestId";
14+
15+
// Act
16+
const { getByTestId } = render(
17+
<ProgressBar value={faker.random.number(100)} testId={expected} />
18+
);
19+
20+
// Assert
21+
expect(getByTestId(expected)).not.toBeNil();
22+
});
23+
24+
test("when cssClassName set, renders with class name", () => {
25+
// Arrange
26+
const testCssClassName = "testCssClassName";
27+
28+
// Act
29+
const { container } = render(
30+
<ProgressBar
31+
value={faker.random.number(100)}
32+
cssClassName={testCssClassName}
33+
/>
34+
);
35+
const result = container.getElementsByClassName(testCssClassName);
36+
37+
// Assert
38+
expect(result).toHaveLength(1);
39+
});
40+
41+
test.each`
42+
style
43+
${ProgressBarStyles.Thick}
44+
${ProgressBarStyles.Thin}
45+
`("when style prop set, renders with $style", ({ style }) => {
46+
// Arrange
47+
const expected = faker.random.number(100);
48+
49+
// Act
50+
const { container } = render(
51+
<ProgressBar value={expected} style={style} />
52+
);
53+
const result = container.getElementsByClassName(style);
54+
55+
// Assert
56+
expect(result).toHaveLength(1);
57+
});
58+
59+
test(`when isErrored prop set, renders with ${ProgressBarErrorClass} class name`, () => {
60+
// Arrange
61+
const expected = faker.random.number(100);
62+
63+
// Act
64+
const { container } = render(
65+
<ProgressBar value={expected} isErrored={true} />
66+
);
67+
const result = container.getElementsByClassName(ProgressBarErrorClass);
68+
69+
// Assert
70+
expect(result).toHaveLength(1);
71+
});
72+
73+
test(`when value prop set > 100, renders with value 100`, () => {
74+
// Arrange
75+
const incorrectValue = 110;
76+
const maximumValue = 100;
77+
const dataTestId = "dataTestId";
78+
79+
// Act
80+
const { getByTestId } = render(
81+
<ProgressBar value={incorrectValue} testId={dataTestId} />
82+
);
83+
84+
// Assert
85+
expect(getByTestId(dataTestId).innerHTML).toContain(maximumValue);
86+
expect(getByTestId(dataTestId).innerHTML).not.toContain(incorrectValue);
87+
});
88+
89+
test(`when value prop set < 0, renders with value 0`, () => {
90+
// Arrange
91+
const incorrectValue = -10;
92+
const minimumValue = 0;
93+
const dataTestId = "dataTestId";
94+
95+
// Act
96+
const { getByTestId } = render(
97+
<ProgressBar value={incorrectValue} testId={dataTestId} />
98+
);
99+
100+
// Assert
101+
expect(getByTestId(dataTestId).innerHTML).toContain(minimumValue);
102+
expect(getByTestId(dataTestId).innerHTML).not.toContain(incorrectValue);
103+
});
5104
});

src/atoms/progress-bar/progress-bar.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import React from "react";
22
import { StringUtils } from "andculturecode-javascript-core";
33

4+
// -------------------------------------------------------------------------------------------------
5+
// #region Constants
6+
// -------------------------------------------------------------------------------------------------
7+
8+
export const ProgressBarErrorClass = "-error";
9+
10+
// #endregion Constants
11+
412
// -------------------------------------------------------------------------------------------------
513
// #region Enums
614
// -------------------------------------------------------------------------------------------------
@@ -21,6 +29,11 @@ interface ProgressBarProps {
2129
isErrored?: boolean;
2230
style?: ProgressBarStyles;
2331
value: number;
32+
33+
/**
34+
* Unique identifier used to select the underlying <div> for functional/e2e testing
35+
*/
36+
testId?: string;
2437
}
2538

2639
// #endregion Interfaces
@@ -42,7 +55,7 @@ const ProgressBar: React.FC<ProgressBarProps> = (props: ProgressBarProps) => {
4255
}
4356

4457
if (props.isErrored) {
45-
classNames.push("-error");
58+
classNames.push(ProgressBarErrorClass);
4659
}
4760

4861
// value must be an integer 0 < value < 100
@@ -57,7 +70,7 @@ const ProgressBar: React.FC<ProgressBarProps> = (props: ProgressBarProps) => {
5770
}
5871

5972
return (
60-
<div className={classNames.join(" ")}>
73+
<div className={classNames.join(" ")} data-testid={props.testId}>
6174
<div className={`${CSS_CLASS_NAME}__bar -w-${value}`} />
6275
</div>
6376
);

0 commit comments

Comments
 (0)