@@ -1344,6 +1344,247 @@ describe('AJV8Validator', () => {
1344
1344
expect ( errorSchema . numberOfChildren ! . __errors ! [ 0 ] ) . toEqual ( 'must match pattern "\\d+"' ) ;
1345
1345
} ) ;
1346
1346
} ) ;
1347
+ describe ( 'title is in validation message when it is in the uiSchema ui:title field with anyOf' , ( ) => {
1348
+ beforeAll ( ( ) => {
1349
+ const schema : RJSFSchema = {
1350
+ anyOf : [
1351
+ {
1352
+ type : 'object' ,
1353
+ required : [ 'firstName' , 'lastName' ] ,
1354
+ properties : {
1355
+ firstName : { type : 'string' , title : 'First Name' } ,
1356
+ lastName : { type : 'string' , title : 'Last Name' } ,
1357
+ } ,
1358
+ } ,
1359
+ ] ,
1360
+ } ;
1361
+ const uiSchema : UiSchema = {
1362
+ anyOf : [
1363
+ {
1364
+ firstName : {
1365
+ 'ui:title' : 'uiSchema First Name' ,
1366
+ } ,
1367
+ lastName : {
1368
+ 'ui:title' : 'uiSchema Last Name' ,
1369
+ } ,
1370
+ } ,
1371
+ ] ,
1372
+ } ;
1373
+
1374
+ const formData = { firstName : 'a' } ;
1375
+ const result = validator . validateFormData ( formData , schema , undefined , undefined , uiSchema ) ;
1376
+ errors = result . errors ;
1377
+ errorSchema = result . errorSchema ;
1378
+ } ) ;
1379
+ it ( 'should return an error list' , ( ) => {
1380
+ expect ( errors ) . toHaveLength ( 2 ) ;
1381
+
1382
+ const expected = [ "must have required property 'uiSchema Last Name'" , 'must match a schema in anyOf' ] ;
1383
+
1384
+ const messages = errors . map ( ( e ) => e . message ) ;
1385
+ expect ( messages ) . toEqual ( expected ) ;
1386
+
1387
+ const stack = errors . map ( ( e ) => e . stack ) ;
1388
+ expect ( stack ) . toEqual ( expected ) ;
1389
+ } ) ;
1390
+ it ( 'should return an errorSchema' , ( ) => {
1391
+ expect ( errorSchema . lastName ! . __errors ) . toHaveLength ( 1 ) ;
1392
+ expect ( errorSchema . lastName ! . __errors ! [ 0 ] ) . toEqual ( "must have required property 'uiSchema Last Name'" ) ;
1393
+
1394
+ expect ( errorSchema . __errors ) . toHaveLength ( 1 ) ;
1395
+ expect ( errorSchema . __errors ! [ 0 ] ) . toEqual ( 'must match a schema in anyOf' ) ;
1396
+ } ) ;
1397
+ } ) ;
1398
+ describe ( 'title is in validation message when it is in the uiSchema ui:title field with oneOf' , ( ) => {
1399
+ beforeAll ( ( ) => {
1400
+ const schema : RJSFSchema = {
1401
+ oneOf : [
1402
+ {
1403
+ type : 'object' ,
1404
+ required : [ 'firstName' , 'lastName' ] ,
1405
+ properties : {
1406
+ firstName : { type : 'string' , title : 'First Name' } ,
1407
+ lastName : { type : 'string' , title : 'Last Name' } ,
1408
+ } ,
1409
+ } ,
1410
+ ] ,
1411
+ } ;
1412
+ const uiSchema : UiSchema = {
1413
+ oneOf : [
1414
+ {
1415
+ firstName : {
1416
+ 'ui:title' : 'uiSchema First Name' ,
1417
+ } ,
1418
+ lastName : {
1419
+ 'ui:title' : 'uiSchema Last Name' ,
1420
+ } ,
1421
+ } ,
1422
+ ] ,
1423
+ } ;
1424
+
1425
+ const formData = { firstName : 'a' } ;
1426
+ const result = validator . validateFormData ( formData , schema , undefined , undefined , uiSchema ) ;
1427
+ errors = result . errors ;
1428
+ errorSchema = result . errorSchema ;
1429
+ } ) ;
1430
+ it ( 'should return an error list' , ( ) => {
1431
+ expect ( errors ) . toHaveLength ( 2 ) ;
1432
+
1433
+ const expected = [
1434
+ "must have required property 'uiSchema Last Name'" ,
1435
+ 'must match exactly one schema in oneOf' ,
1436
+ ] ;
1437
+
1438
+ const messages = errors . map ( ( e ) => e . message ) ;
1439
+ expect ( messages ) . toEqual ( expected ) ;
1440
+
1441
+ const stack = errors . map ( ( e ) => e . stack ) ;
1442
+ expect ( stack ) . toEqual ( expected ) ;
1443
+ } ) ;
1444
+ it ( 'should return an errorSchema' , ( ) => {
1445
+ expect ( errorSchema . lastName ! . __errors ) . toHaveLength ( 1 ) ;
1446
+ expect ( errorSchema . lastName ! . __errors ! [ 0 ] ) . toEqual ( "must have required property 'uiSchema Last Name'" ) ;
1447
+
1448
+ expect ( errorSchema . __errors ) . toHaveLength ( 1 ) ;
1449
+ expect ( errorSchema . __errors ! [ 0 ] ) . toEqual ( 'must match exactly one schema in oneOf' ) ;
1450
+ } ) ;
1451
+ } ) ;
1452
+ describe ( 'ui:title is in validation message when it is defined in referrer' , ( ) => {
1453
+ beforeAll ( ( ) => {
1454
+ const schema : RJSFSchema = {
1455
+ definitions : {
1456
+ address : {
1457
+ type : 'object' ,
1458
+ properties : {
1459
+ streetAddress : { type : 'string' } ,
1460
+ city : { type : 'string' } ,
1461
+ state : { type : 'string' } ,
1462
+ } ,
1463
+ required : [ 'streetAddress' , 'city' , 'state' ] ,
1464
+ } ,
1465
+ } ,
1466
+ type : 'object' ,
1467
+ required : [ 'billingAddress' , 'shippingAddress' ] ,
1468
+ properties : {
1469
+ billingAddress : {
1470
+ $ref : '#/definitions/address' ,
1471
+ } ,
1472
+ shippingAddress : {
1473
+ $ref : '#/definitions/address' ,
1474
+ } ,
1475
+ } ,
1476
+ } ;
1477
+ const uiSchema : UiSchema = {
1478
+ billingAddress : {
1479
+ 'ui:title' : 'uiSchema Billing Address' ,
1480
+ } ,
1481
+ shippingAddress : {
1482
+ city : {
1483
+ 'ui:title' : 'uiSchema City' ,
1484
+ } ,
1485
+ } ,
1486
+ } ;
1487
+
1488
+ const formData = { shippingAddress : { streetAddress : 'El Camino Real' , state : 'California' } } ;
1489
+ const result = validator . validateFormData ( formData , schema , undefined , undefined , uiSchema ) ;
1490
+ errors = result . errors ;
1491
+ errorSchema = result . errorSchema ;
1492
+ } ) ;
1493
+ it ( 'should return an error list' , ( ) => {
1494
+ expect ( errors ) . toHaveLength ( 2 ) ;
1495
+
1496
+ const expected = [
1497
+ "must have required property 'uiSchema Billing Address'" ,
1498
+ "must have required property 'uiSchema City'" ,
1499
+ ] ;
1500
+
1501
+ const messages = errors . map ( ( e ) => e . message ) ;
1502
+ expect ( messages ) . toEqual ( expected ) ;
1503
+
1504
+ const stack = errors . map ( ( e ) => e . stack ) ;
1505
+ expect ( stack ) . toEqual ( expected ) ;
1506
+ } ) ;
1507
+ it ( 'should return an errorSchema' , ( ) => {
1508
+ expect ( errorSchema . billingAddress ! . __errors ) . toHaveLength ( 1 ) ;
1509
+ expect ( errorSchema . billingAddress ! . __errors ! [ 0 ] ) . toEqual (
1510
+ "must have required property 'uiSchema Billing Address'"
1511
+ ) ;
1512
+
1513
+ expect ( errorSchema . shippingAddress ! . city ! . __errors ) . toHaveLength ( 1 ) ;
1514
+ expect ( errorSchema . shippingAddress ! . city ! . __errors ! [ 0 ] ) . toEqual (
1515
+ "must have required property 'uiSchema City'"
1516
+ ) ;
1517
+ } ) ;
1518
+ } ) ;
1519
+ describe ( 'ui:title is in validation message when it is defined in definitions' , ( ) => {
1520
+ beforeAll ( ( ) => {
1521
+ const schema : RJSFSchema = {
1522
+ definitions : {
1523
+ address : {
1524
+ type : 'object' ,
1525
+ properties : {
1526
+ streetAddress : { type : 'string' } ,
1527
+ city : { type : 'string' } ,
1528
+ state : { type : 'string' } ,
1529
+ } ,
1530
+ required : [ 'streetAddress' , 'city' , 'state' ] ,
1531
+ } ,
1532
+ } ,
1533
+ type : 'object' ,
1534
+ required : [ 'billingAddress' , 'shippingAddress' ] ,
1535
+ properties : {
1536
+ billingAddress : {
1537
+ $ref : '#/definitions/address' ,
1538
+ } ,
1539
+ shippingAddress : {
1540
+ $ref : '#/definitions/address' ,
1541
+ } ,
1542
+ } ,
1543
+ } ;
1544
+ const uiSchema : UiSchema = {
1545
+ definitions : {
1546
+ address : {
1547
+ city : {
1548
+ 'ui:title' : 'uiSchema City' ,
1549
+ } ,
1550
+ } ,
1551
+ } ,
1552
+ billingAddress : {
1553
+ 'ui:title' : 'uiSchema Billing Address' ,
1554
+ } ,
1555
+ } ;
1556
+
1557
+ const formData = { shippingAddress : { streetAddress : 'El Camino Real' , state : 'California' } } ;
1558
+ const result = validator . validateFormData ( formData , schema , undefined , undefined , uiSchema ) ;
1559
+ errors = result . errors ;
1560
+ errorSchema = result . errorSchema ;
1561
+ } ) ;
1562
+ it ( 'should return an error list' , ( ) => {
1563
+ expect ( errors ) . toHaveLength ( 2 ) ;
1564
+
1565
+ const expected = [
1566
+ "must have required property 'uiSchema Billing Address'" ,
1567
+ "must have required property 'uiSchema City'" ,
1568
+ ] ;
1569
+
1570
+ const messages = errors . map ( ( e ) => e . message ) ;
1571
+ expect ( messages ) . toEqual ( expected ) ;
1572
+
1573
+ const stack = errors . map ( ( e ) => e . stack ) ;
1574
+ expect ( stack ) . toEqual ( expected ) ;
1575
+ } ) ;
1576
+ it ( 'should return an errorSchema' , ( ) => {
1577
+ expect ( errorSchema . billingAddress ! . __errors ) . toHaveLength ( 1 ) ;
1578
+ expect ( errorSchema . billingAddress ! . __errors ! [ 0 ] ) . toEqual (
1579
+ "must have required property 'uiSchema Billing Address'"
1580
+ ) ;
1581
+
1582
+ expect ( errorSchema . shippingAddress ! . city ! . __errors ) . toHaveLength ( 1 ) ;
1583
+ expect ( errorSchema . shippingAddress ! . city ! . __errors ! [ 0 ] ) . toEqual (
1584
+ "must have required property 'uiSchema City'"
1585
+ ) ;
1586
+ } ) ;
1587
+ } ) ;
1347
1588
describe ( 'uiSchema title in validation when defined in nested field' , ( ) => {
1348
1589
beforeAll ( ( ) => {
1349
1590
const schema : RJSFSchema = {
0 commit comments