11import React from 'react' ;
2- import { mount } from 'enzyme ' ;
3- import { act } from 'react-dom/test-utils ' ;
2+ import { render , screen , act } from '@testing-library/react ' ;
3+ import userEvent from '@testing-library/user-event ' ;
44
55import { FormRenderer , componentTypes } from '@data-driven-forms/react-form-renderer' ;
66import FormTemplate from '../form-template/form-template' ;
77import componentMapper from '../component-mapper/component-mapper' ;
88import { validatorTypes } from '@data-driven-forms/react-form-renderer' ;
9- import FormGroupWrapper from '../form-group/form-group' ;
109
1110describe ( 'formFields generated tests' , ( ) => {
1211 const RendererWrapper = ( { schema = { fields : [ ] } , ...props } ) => (
@@ -67,30 +66,28 @@ describe('formFields generated tests', () => {
6766 } ) ;
6867
6968 it ( 'renders correctly' , ( ) => {
70- const wrapper = mount ( < RendererWrapper schema = { schema } /> ) ;
69+ render ( < RendererWrapper schema = { schema } /> ) ;
7170
7271 if ( component === componentTypes . RADIO ) {
73- expect ( wrapper . find ( '.bp3-radio' ) ) . toHaveLength ( options . length ) ;
74- } else if ( component === componentTypes . SWITCH ) {
75- expect ( wrapper . find ( '.bp3-switch' ) . first ( ) . text ( ) . includes ( field . label ) ) . toEqual ( true ) ;
76- } else {
77- expect ( wrapper . find ( componentMapper [ component ] ) ) . toHaveLength ( 1 ) ;
78- expect ( wrapper . find ( 'label' ) . text ( ) . includes ( field . label ) ) . toEqual ( true ) ;
72+ options . forEach ( ( opt ) => {
73+ expect ( screen . getByText ( opt . label ) ) . toBeInTheDocument ( ) ;
74+ } ) ;
7975 }
8076
81- expect ( wrapper . find ( FormGroupWrapper ) ) . toHaveLength ( 1 ) ;
82- expect ( wrapper . find ( '.bp3-form-helper-text' ) ) . toHaveLength ( 0 ) ;
77+ expect ( screen . getAllByText ( field . label ) ) . toBeTruthy ( ) ;
78+ expect ( ( ) => screen . getByText ( errorText ) ) . toThrow ( ) ;
8379 } ) ;
8480
8581 it ( 'renders with error' , ( ) => {
8682 const errorField = {
8783 ...field ,
8884 validate : [ { type : validatorTypes . REQUIRED } ] ,
8985 } ;
90- const wrapper = mount ( < RendererWrapper schema = { { fields : [ errorField ] } } /> ) ;
91- wrapper . find ( 'form' ) . simulate ( 'submit' ) ;
92- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( errorText ) ;
93- expect ( wrapper . find ( '.bp3-intent-danger' ) . length ) . toBeGreaterThanOrEqual ( 1 ) ;
86+ render ( < RendererWrapper schema = { { fields : [ errorField ] } } /> ) ;
87+
88+ userEvent . click ( screen . getByText ( 'Submit' ) ) ;
89+
90+ expect ( screen . getByText ( errorText ) ) . toBeInTheDocument ( ) ;
9491 } ) ;
9592
9693 it ( 'renders with warning' , async ( ) => {
@@ -100,35 +97,38 @@ describe('formFields generated tests', () => {
10097 useWarnings : true ,
10198 validateOnMount : true ,
10299 } ;
103- let wrapper ;
104100
105101 await act ( async ( ) => {
106- wrapper = mount ( < RendererWrapper schema = { { fields : [ errorField ] } } /> ) ;
102+ render (
103+ < RendererWrapper
104+ schema = { {
105+ fields : [ errorField , { name : 'error-reset-touched' , component : componentTypes . TEXT_FIELD , validate : [ { type : 'required' } ] } ] ,
106+ } }
107+ />
108+ ) ;
107109 } ) ;
108- wrapper . update ( ) ;
109110
110- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( errorText ) ;
111- expect ( wrapper . find ( '.bp3-intent-warning' ) . length ) . toBeGreaterThanOrEqual ( 1 ) ;
111+ expect ( screen . getAllByText ( errorText ) ) . toBeTruthy ( ) ;
112112 } ) ;
113113
114114 it ( 'renders with helperText' , ( ) => {
115115 const helpertextField = {
116116 ...field ,
117117 helperText,
118118 } ;
119- const wrapper = mount ( < RendererWrapper schema = { { fields : [ helpertextField ] } } /> ) ;
119+ render ( < RendererWrapper schema = { { fields : [ helpertextField ] } } /> ) ;
120120
121- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( helperText ) ;
121+ expect ( screen . getByText ( helperText ) ) . toBeInTheDocument ( ) ;
122122 } ) ;
123123
124124 it ( 'renders with description' , ( ) => {
125125 const descriptionField = {
126126 ...field ,
127127 description,
128128 } ;
129- const wrapper = mount ( < RendererWrapper schema = { { fields : [ descriptionField ] } } /> ) ;
129+ render ( < RendererWrapper schema = { { fields : [ descriptionField ] } } /> ) ;
130130
131- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( description ) ;
131+ expect ( screen . getByText ( description ) ) . toBeInTheDocument ( ) ;
132132 } ) ;
133133
134134 it ( 'renders with description and helperText' , ( ) => {
@@ -137,9 +137,10 @@ describe('formFields generated tests', () => {
137137 description,
138138 helperText,
139139 } ;
140- const wrapper = mount ( < RendererWrapper schema = { { fields : [ descriptionField ] } } /> ) ;
140+ render ( < RendererWrapper schema = { { fields : [ descriptionField ] } } /> ) ;
141141
142- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( helperText ) ;
142+ expect ( screen . getByText ( helperText ) ) . toBeInTheDocument ( ) ;
143+ expect ( ( ) => screen . getByText ( description ) ) . toThrow ( ) ;
143144 } ) ;
144145
145146 it ( 'renders with error and helperText' , ( ) => {
@@ -148,63 +149,68 @@ describe('formFields generated tests', () => {
148149 helperText,
149150 validate : [ { type : validatorTypes . REQUIRED } ] ,
150151 } ;
151- const wrapper = mount ( < RendererWrapper schema = { { fields : [ errorFields ] } } /> ) ;
152- wrapper . find ( 'form' ) . simulate ( 'submit' ) ;
152+ render ( < RendererWrapper schema = { { fields : [ errorFields ] } } /> ) ;
153+
154+ userEvent . click ( screen . getByText ( 'Submit' ) ) ;
153155
154- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( errorText ) ;
156+ expect ( screen . getByText ( errorText ) ) . toBeInTheDocument ( ) ;
157+ expect ( ( ) => screen . getByText ( helperText ) ) . toThrow ( ) ;
155158 } ) ;
156159
157160 it ( 'renders isRequired' , ( ) => {
158161 const requiredField = {
159162 ...field ,
160163 isRequired : true ,
161164 } ;
162- const wrapper = mount ( < RendererWrapper schema = { { fields : [ requiredField ] } } /> ) ;
165+ render ( < RendererWrapper schema = { { fields : [ requiredField ] } } /> ) ;
163166
164- expect ( wrapper . find ( '.bp3-text-muted' ) . last ( ) . text ( ) ) . toEqual ( '(required)' ) ;
167+ expect ( screen . getByText ( '(required)' ) ) . toBeInTheDocument ( ) ;
165168 } ) ;
166169
167170 it ( 'renders isDisabled' , ( ) => {
168171 const disabledField = {
169172 ...field ,
170173 isDisabled : true ,
174+ 'aria-label' : field . name ,
171175 } ;
172- const wrapper = mount ( < RendererWrapper schema = { { fields : [ disabledField ] } } /> ) ;
176+ const { container } = render ( < RendererWrapper schema = { { fields : [ disabledField ] } } /> ) ;
173177
174- if ( component === componentTypes . TEXTAREA ) {
175- expect ( wrapper . find ( 'textarea' ) . first ( ) . props ( ) . disabled ) . toEqual ( true ) ;
178+ if ( component === componentTypes . RADIO ) {
179+ options . forEach ( ( opt ) => {
180+ expect ( screen . getByText ( opt . label ) ) . toHaveClass ( 'bp3-disabled' ) ;
181+ } ) ;
182+ } else if ( [ componentTypes . SLIDER , componentTypes . DATE_PICKER , componentTypes . TIME_PICKER , componentTypes . SELECT ] . includes ( component ) ) {
183+ expect ( container . getElementsByClassName ( 'bp3-disabled' ) ) . toHaveLength ( 1 ) ;
176184 } else {
177- if ( ! wrapper . find ( '.bp3-disabled' ) ) {
178- expect ( wrapper . find ( 'input' ) . first ( ) . props ( ) . disabled ) . toEqual ( true ) ;
179- } else {
180- expect ( wrapper . find ( '.bp3-disabled' ) . length ) . toBeGreaterThanOrEqual ( 1 ) ;
181- }
185+ expect ( screen . getAllByLabelText ( field . name ) [ 0 ] ) . toBeDisabled ( ) ;
182186 }
183187 } ) ;
184188
185189 it ( 'renders isReadOnly' , ( ) => {
186190 const disabledField = {
187191 ...field ,
188192 isReadOnly : true ,
193+ 'aria-label' : field . name ,
189194 } ;
190- const wrapper = mount ( < RendererWrapper schema = { { fields : [ disabledField ] } } /> ) ;
195+ const { container } = render ( < RendererWrapper schema = { { fields : [ disabledField ] } } /> ) ;
191196
192- if ( component === componentTypes . TEXTAREA ) {
193- expect ( wrapper . find ( 'textarea' ) . first ( ) . props ( ) . disabled ) . toEqual ( true ) ;
197+ if ( component === componentTypes . RADIO ) {
198+ options . forEach ( ( opt ) => {
199+ expect ( screen . getByText ( opt . label ) ) . toHaveClass ( 'bp3-disabled' ) ;
200+ } ) ;
201+ } else if ( [ componentTypes . SLIDER , componentTypes . DATE_PICKER , componentTypes . TIME_PICKER , componentTypes . SELECT ] . includes ( component ) ) {
202+ expect ( container . getElementsByClassName ( 'bp3-disabled' ) ) . toHaveLength ( 1 ) ;
194203 } else {
195- if ( ! wrapper . find ( '.bp3-disabled' ) ) {
196- expect ( wrapper . find ( 'input' ) . first ( ) . props ( ) . disabled ) . toEqual ( true ) ;
197- } else {
198- expect ( wrapper . find ( '.bp3-disabled' ) . length ) . toBeGreaterThanOrEqual ( 1 ) ;
199- }
204+ expect ( screen . getAllByLabelText ( field . name ) [ 0 ] ) . toBeDisabled ( ) ;
200205 }
201206 } ) ;
202207
203208 it ( 'renders with submit error' , ( ) => {
204- const wrapper = mount ( < RendererWrapper schema = { schema } onSubmit = { ( ) => ( { [ field . name ] : errorText } ) } /> ) ;
205- wrapper . find ( 'form' ) . simulate ( 'submit' ) ;
206- expect ( wrapper . find ( '.bp3-form-helper-text' ) . last ( ) . text ( ) ) . toEqual ( errorText ) ;
207- expect ( wrapper . find ( '.bp3-intent-danger' ) . length ) . toBeGreaterThanOrEqual ( 1 ) ;
209+ render ( < RendererWrapper schema = { schema } onSubmit = { ( ) => ( { [ field . name ] : errorText } ) } /> ) ;
210+
211+ userEvent . click ( screen . getByText ( 'Submit' ) ) ;
212+
213+ expect ( screen . getByText ( errorText ) ) . toBeInTheDocument ( ) ;
208214 } ) ;
209215 } ) ;
210216 } ) ;
0 commit comments