@@ -1254,7 +1254,7 @@ describe('FormFieldModel', () => {
12541254 expect ( field . validate ( ) ) . toBe ( false ) ;
12551255 } ) ;
12561256
1257- it ( 'should NOT validate readOnly field if it is NOT validatable' , ( ) => {
1257+ it ( 'should validate readOnly required field even if type is not in validatable list ' , ( ) => {
12581258 const form = new FormModel ( ) ;
12591259 const field = new FormFieldModel ( form , {
12601260 id : 'mockTextFieldId' ,
@@ -1267,8 +1267,60 @@ describe('FormFieldModel', () => {
12671267 const validator = new RequiredFieldValidator ( ) ;
12681268 form . fieldValidators = [ validator ] ;
12691269
1270+ expect ( FormFieldTypes . isValidatableType ( FormFieldTypes . TEXT ) ) . toBeFalse ( ) ;
1271+ expect ( field . validate ( ) ) . toBe ( false ) ;
1272+ } ) ;
1273+
1274+ it ( 'should pass validation for readOnly required field that has a value' , ( ) => {
1275+ const form = new FormModel ( ) ;
1276+ const field = new FormFieldModel ( form , {
1277+ id : 'mockTextFieldId' ,
1278+ type : FormFieldTypes . TEXT ,
1279+ readOnly : true ,
1280+ required : true ,
1281+ value : 'some value'
1282+ } ) ;
1283+
1284+ const validator = new RequiredFieldValidator ( ) ;
1285+ form . fieldValidators = [ validator ] ;
1286+
1287+ expect ( field . validate ( ) ) . toBe ( true ) ;
1288+ } ) ;
1289+
1290+ it ( 'should skip validation for readOnly non-required field' , ( ) => {
1291+ const form = new FormModel ( ) ;
1292+ const field = new FormFieldModel ( form , {
1293+ id : 'mockTextFieldId' ,
1294+ type : FormFieldTypes . TEXT ,
1295+ readOnly : true ,
1296+ required : false ,
1297+ value : null
1298+ } ) ;
1299+
1300+ const validator = new RequiredFieldValidator ( ) ;
1301+ form . fieldValidators = [ validator ] ;
1302+
1303+ expect ( field . validate ( ) ) . toBe ( true ) ;
1304+ } ) ;
1305+
1306+ it ( 'should pass validation for readOnly required field with empty value when field or parent is hidden' , ( ) => {
1307+ const form = new FormModel ( ) ;
1308+ const field = new FormFieldModel ( form , {
1309+ id : 'mockTextFieldId' ,
1310+ type : FormFieldTypes . TEXT ,
1311+ readOnly : true ,
1312+ required : true ,
1313+ value : null
1314+ } ) ;
1315+
1316+ const validator = new RequiredFieldValidator ( ) ;
1317+ form . fieldValidators = [ validator ] ;
1318+
1319+ spyOn ( form , 'isFieldOrParentHidden' ) . and . returnValue ( true ) ;
1320+
12701321 expect ( FormFieldTypes . isValidatableType ( FormFieldTypes . TEXT ) ) . toBeFalse ( ) ;
12711322 expect ( field . validate ( ) ) . toBe ( true ) ;
1323+ expect ( form . isFieldOrParentHidden ) . toHaveBeenCalledWith ( field ) ;
12721324 } ) ;
12731325
12741326 it ( 'should set the tooltip correctly' , ( ) => {
0 commit comments