Skip to content

Commit 4aa44b1

Browse files
author
Said Shah
committed
Added tests for TextAreaFormField
1 parent 2368707 commit 4aa44b1

File tree

2 files changed

+97
-2
lines changed

2 files changed

+97
-2
lines changed

src/molecules/form-fields/text-area-form-field.test.tsx

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import React from "react";
22
import { render } from "@testing-library/react";
3-
import { TextAreaFormField } from "./text-area-form-field";
3+
import {
4+
TextAreaFormField,
5+
InvalidInputClassName,
6+
} from "./text-area-form-field";
47
import faker from "faker";
58

69
describe("TextAreaFormField", () => {
@@ -16,4 +19,95 @@ describe("TextAreaFormField", () => {
1619
// Assert
1720
expect(getByLabelText(expected)).not.toBeNull();
1821
});
22+
23+
test("when has errorsMessages prop, renders text area form field with error message", () => {
24+
// Arrange
25+
const expected = faker.random.words();
26+
const testErrorMessage = faker.random.words();
27+
28+
// Act
29+
const { getByText } = render(
30+
<TextAreaFormField
31+
label={expected}
32+
onChange={() => {}}
33+
errorMessages={[testErrorMessage]}
34+
/>
35+
);
36+
37+
// Assert
38+
expect(getByText(testErrorMessage)).not.toBeNil();
39+
});
40+
41+
test("when has errorsMessage prop, renders text area form field with error message", () => {
42+
// Arrange
43+
const expected = faker.random.words();
44+
const testErrorMessage = faker.random.words();
45+
46+
// Act
47+
const { getByText } = render(
48+
<TextAreaFormField
49+
label={expected}
50+
onChange={() => {}}
51+
errorMessage={testErrorMessage}
52+
/>
53+
);
54+
55+
// Assert
56+
expect(getByText(testErrorMessage)).not.toBeNil();
57+
});
58+
59+
test(`when isValid prop is false, renders with ${InvalidInputClassName} class name`, () => {
60+
// Arrange
61+
const expected = faker.random.words();
62+
63+
// Act
64+
const { container } = render(
65+
<TextAreaFormField
66+
label={expected}
67+
onChange={() => {}}
68+
isValid={false}
69+
/>
70+
);
71+
const result = container.querySelector("." + InvalidInputClassName);
72+
73+
// Assert
74+
expect(result).not.toBeNil();
75+
});
76+
77+
test(`when isValid prop is true, renders with out ${InvalidInputClassName} class name`, () => {
78+
// Arrange
79+
const expected = faker.random.words();
80+
81+
// Act
82+
const { container } = render(
83+
<TextAreaFormField
84+
label={expected}
85+
onChange={() => {}}
86+
isValid={true}
87+
/>
88+
);
89+
const result = container.querySelector("." + InvalidInputClassName);
90+
91+
// Assert
92+
expect(result).toBeNil();
93+
});
94+
95+
test("when required prop set, renders with required text", () => {
96+
// Arrange
97+
const expected = faker.random.words();
98+
const requiredText = "*";
99+
100+
// Act
101+
const { container } = render(
102+
<TextAreaFormField
103+
label={expected}
104+
onChange={() => {}}
105+
required={true}
106+
/>
107+
);
108+
const htmlLabelTag = container.getElementsByTagName("label");
109+
110+
// Assert
111+
expect(htmlLabelTag[0].textContent).toContain(requiredText);
112+
});
19113
});

src/molecules/form-fields/text-area-form-field.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { StringUtils, CollectionUtils } from "andculturecode-javascript-core";
88
// -----------------------------------------------------------------------------------------
99

1010
const COMPONENT_CLASS = "c-form-field";
11+
export const InvalidInputClassName = "-invalid";
1112

1213
// #endregion Constants
1314

@@ -60,7 +61,7 @@ const TextAreaFormField: React.FC<TextAreaFormFieldProps> = (
6061
value,
6162
} = props;
6263

63-
const cssIsValid = isValid ? "" : "-invalid";
64+
const cssIsValid = isValid ? "" : InvalidInputClassName;
6465
const fieldId = props.fieldId ?? uuid.v4();
6566
const hasErrorMessage = StringUtils.hasValue(errorMessage);
6667
const hasErrors = CollectionUtils.hasValues(errorMessages);

0 commit comments

Comments
 (0)