Skip to content

Commit a76eaa1

Browse files
Merge pull request #61 from SaidShah/add-tests-for-atoms-checkbox-button
Added tests for checkbox button
2 parents f83b0f1 + a0e2ecd commit a76eaa1

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed
Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,86 @@
11
import React from "react";
2+
import faker from "faker";
3+
import { CheckboxButton, CheckboxButtonCheckedClass } from "./checkbox-button";
4+
import { render, fireEvent, wait } from "@testing-library/react";
25

36
describe("CheckboxButton", () => {
4-
test.skip("TODO - https://github.com/AndcultureCode/AndcultureCode.JavaScript.React.Components/issues/5", () => {});
7+
test("when default props, renders children", () => {
8+
// Arrange
9+
const expected = faker.random.words();
10+
11+
// Act
12+
const { getByText } = render(
13+
<CheckboxButton
14+
label={expected}
15+
checked={false}
16+
onChange={() => {}}
17+
/>
18+
);
19+
20+
// Assert
21+
expect(getByText(expected)).not.toBeNil();
22+
});
23+
24+
test("when onChange set, calls handler upon change", async () => {
25+
// Arrange
26+
let isChecked = false;
27+
const handleChange = () => {
28+
isChecked = true;
29+
};
30+
const label = faker.random.word();
31+
32+
// Act
33+
const { getByLabelText } = render(
34+
<CheckboxButton
35+
onChange={handleChange}
36+
label={label}
37+
checked={isChecked}
38+
/>
39+
);
40+
41+
fireEvent.click(getByLabelText(label));
42+
43+
// Assert
44+
expect(isChecked).toBeTrue();
45+
});
46+
47+
test(`when isChecked prop is true, renders with ${CheckboxButtonCheckedClass} class name`, () => {
48+
// Arrange
49+
const expected = faker.random.words();
50+
51+
// Act
52+
const { container } = render(
53+
<CheckboxButton
54+
label={expected}
55+
checked={true}
56+
onChange={() => {}}
57+
/>
58+
);
59+
const result = container.querySelector(
60+
"." + CheckboxButtonCheckedClass
61+
);
62+
63+
// Assert
64+
expect(result).not.toBeNil();
65+
});
66+
67+
test("when cssClassName provided, assigned class property", () => {
68+
// Arrange
69+
const expected = faker.random.words();
70+
const testClassName = "testClassName";
71+
72+
// Act
73+
const { container } = render(
74+
<CheckboxButton
75+
label={expected}
76+
checked={true}
77+
onChange={() => {}}
78+
cssClassName={testClassName}
79+
/>
80+
);
81+
const result = container.querySelector("." + testClassName);
82+
83+
// Assert
84+
expect(result).not.toBeNil();
85+
});
586
});

src/atoms/forms/checkbox-button.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@ import React from "react";
33
import { Icon } from "../icons/icon";
44
import { Icons } from "../constants/icons";
55

6+
// -----------------------------------------------------------------------------------------
7+
// #region Constants
8+
// -----------------------------------------------------------------------------------------
9+
10+
export const CheckboxButtonCheckedClass = "-checked";
11+
12+
// #endregion Constants
13+
614
// -----------------------------------------------------------------------------------------
715
// #region Interfaces
816
// -----------------------------------------------------------------------------------------
@@ -41,7 +49,7 @@ const CheckboxButton: React.FC<CheckboxButtonProperties> = (
4149
props.onChange(e, props.identifier);
4250
};
4351

44-
const checkedClassName = checked ? " -checked" : "";
52+
const checkedClassName = checked ? CheckboxButtonCheckedClass : "";
4553

4654
return (
4755
<label

0 commit comments

Comments
 (0)