11import React from "react" ;
2- import { render } from "@testing-library/react" ;
3- import { InputFormField } from "./input-form-field" ;
2+ import { render , fireEvent } from "@testing-library/react" ;
3+ import { InputFormField , InputFormFieldInvalidClass } from "./input-form-field" ;
44import faker from "faker" ;
5+ import { AccessibilityLabels } from "../../enums/accessibility-labels" ;
56
67describe ( "InputFormField" , ( ) => {
78 test ( "when default props, renders input with label" , ( ) => {
@@ -16,4 +17,132 @@ describe("InputFormField", () => {
1617 // Assert
1718 expect ( getByLabelText ( expected ) ) . not . toBeNull ( ) ;
1819 } ) ;
20+
21+ test ( "when errorsMessages prop set, renders with error messages" , ( ) => {
22+ // Arrange
23+ const errorMessages = [ faker . random . words ( ) , faker . random . words ( ) ] ;
24+ const label = faker . random . words ( ) ;
25+
26+ // Act
27+ const { getByText } = render (
28+ < InputFormField
29+ errorMessages = { errorMessages }
30+ label = { label }
31+ onChange = { ( ) => { } }
32+ />
33+ ) ;
34+
35+ // Assert
36+ expect ( getByText ( errorMessages [ 0 ] ) ) . not . toBeNil ( ) ;
37+ expect ( getByText ( errorMessages [ 1 ] ) ) . not . toBeNil ( ) ;
38+ } ) ;
39+
40+ test ( "when errorsMessage prop set, renders with error message" , ( ) => {
41+ // Arrange
42+ const label = faker . random . words ( ) ;
43+ const testErrorMessage = faker . random . words ( ) ;
44+
45+ // Act
46+ const { getByText } = render (
47+ < InputFormField
48+ errorMessage = { testErrorMessage }
49+ label = { label }
50+ onChange = { ( ) => { } }
51+ />
52+ ) ;
53+
54+ // Assert
55+ expect ( getByText ( testErrorMessage ) ) . not . toBeNil ( ) ;
56+ } ) ;
57+
58+ test ( `when isValid prop set to false, renders with ${ InputFormFieldInvalidClass } class name` , ( ) => {
59+ // Arrange
60+ const label = faker . random . words ( ) ;
61+
62+ // Act
63+ const { container } = render (
64+ < InputFormField isValid = { false } label = { label } onChange = { ( ) => { } } />
65+ ) ;
66+ const result = container . getElementsByClassName (
67+ InputFormFieldInvalidClass
68+ ) ;
69+
70+ // Assert
71+ expect ( result ) . toHaveLength ( 1 ) ;
72+ } ) ;
73+
74+ test ( `when isValid prop set to true, renders without ${ InputFormFieldInvalidClass } class name` , ( ) => {
75+ // Arrange
76+ const label = faker . random . words ( ) ;
77+
78+ // Act
79+ const { container } = render (
80+ < InputFormField isValid = { true } label = { label } onChange = { ( ) => { } } />
81+ ) ;
82+ const result = container . getElementsByClassName (
83+ InputFormFieldInvalidClass
84+ ) ;
85+
86+ // Assert
87+ expect ( result ) . toHaveLength ( 0 ) ;
88+ } ) ;
89+
90+ test ( "when required prop set, renders with required text" , ( ) => {
91+ // Arrange
92+ const label = faker . random . words ( ) ;
93+ const requiredText = "*" ;
94+
95+ // Act
96+ const { container } = render (
97+ < InputFormField label = { label } onChange = { ( ) => { } } required = { true } />
98+ ) ;
99+ const htmlLabelTag = container . getElementsByTagName ( "label" ) ;
100+
101+ // Assert
102+ expect ( htmlLabelTag [ 0 ] . textContent ) . toContain ( requiredText ) ;
103+ } ) ;
104+
105+ test ( `when showLabelForScreenReadersOnly prop set, renders with ${ AccessibilityLabels . ScreenReadersOnlyClass } class name` , ( ) => {
106+ // Arrange
107+ const label = faker . random . words ( ) ;
108+
109+ // Act
110+ const { container } = render (
111+ < InputFormField
112+ label = { label }
113+ onChange = { ( ) => { } }
114+ showLabelForScreenReadersOnly = { true }
115+ />
116+ ) ;
117+ const htmlLabelTag = container . getElementsByTagName ( "span" ) ;
118+
119+ // Assert
120+ expect ( htmlLabelTag [ 0 ] . classList ) . toContain (
121+ AccessibilityLabels . ScreenReadersOnlyClass
122+ ) ;
123+ } ) ;
124+
125+ test ( "when onChange set, calls handler upon change" , ( ) => {
126+ // Arrange
127+ let isChecked = false ;
128+ const label = faker . random . word ( ) ;
129+ const handleChange = ( ) => ( isChecked = true ) ;
130+ const inputTestId = "inputTestId" ;
131+
132+ // Act
133+ const { getByTestId } = render (
134+ < InputFormField
135+ inputTestId = { inputTestId }
136+ label = { label }
137+ onChange = { handleChange }
138+ />
139+ ) ;
140+
141+ fireEvent . change ( getByTestId ( inputTestId ) , {
142+ target : { value : faker . random . word ( ) } ,
143+ } ) ;
144+
145+ // Assert
146+ expect ( isChecked ) . toBeTrue ( ) ;
147+ } ) ;
19148} ) ;
0 commit comments