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