@@ -30,7 +30,12 @@ import type {
3030 RedirectField ,
3131 StandardField ,
3232} from './davinci.types.js' ;
33- import { PhoneNumberOutputValue , ValidatedTextCollector } from './collector.types.js' ;
33+ import {
34+ MultiSelectCollector ,
35+ PhoneNumberCollector ,
36+ PhoneNumberOutputValue ,
37+ ValidatedTextCollector ,
38+ } from './collector.types.js' ;
3439
3540describe ( 'Action Collectors' , ( ) => {
3641 describe ( 'returnFlowCollector' , ( ) => {
@@ -410,6 +415,7 @@ describe('Multi-Value Collectors', () => {
410415 const result = returnMultiSelectCollector ( comboField , 1 , [ ] ) ;
411416 expect ( result . type ) . toBe ( 'MultiSelectCollector' ) ;
412417 expect ( result . output ) . toHaveProperty ( 'value' , [ ] ) ;
418+ expect ( result . input ) . toHaveProperty ( 'validation' ) ;
413419 } ) ;
414420 } ) ;
415421} ) ;
@@ -438,7 +444,7 @@ describe('Object value collectors', () => {
438444 description : 'device2-value' ,
439445 } ,
440446 ] ,
441- required : true ,
447+ required : false ,
442448 } ;
443449
444450 const transformedDevices = mockField . options . map ( ( device ) => ( {
@@ -524,6 +530,13 @@ describe('Object value collectors', () => {
524530 key : mockField . key ,
525531 value : '' ,
526532 type : mockField . type ,
533+ validation : [
534+ {
535+ message : 'Value cannot be empty' ,
536+ rule : true ,
537+ type : 'required' ,
538+ } ,
539+ ] ,
527540 } ,
528541 output : {
529542 key : mockField . key ,
@@ -561,6 +574,18 @@ describe('returnPhoneNumberCollector', () => {
561574 phoneNumber : '' ,
562575 } ,
563576 type : mockField . type ,
577+ validation : [
578+ {
579+ message : 'Value cannot be empty' ,
580+ rule : true ,
581+ type : 'required' ,
582+ } ,
583+ {
584+ message : 'Phone number should be validated' ,
585+ rule : true ,
586+ type : 'validatePhoneNumber' ,
587+ } ,
588+ ] ,
564589 } ,
565590 output : {
566591 key : mockField . key ,
@@ -580,8 +605,8 @@ describe('returnPhoneNumberCollector', () => {
580605 defaultCountryCode : 'US' ,
581606 label : 'Phone Number' ,
582607 type : 'PHONE_NUMBER' ,
583- required : true ,
584- validatePhoneNumber : true ,
608+ required : false ,
609+ validatePhoneNumber : false ,
585610 } ;
586611 const result = returnObjectValueCollector ( mockField , 1 , { } ) ;
587612 expect ( result ) . toEqual ( {
@@ -616,8 +641,8 @@ describe('returnPhoneNumberCollector', () => {
616641 defaultCountryCode : 'US' ,
617642 label : 'Phone Number' ,
618643 type : 'PHONE_NUMBER' ,
619- required : true ,
620- validatePhoneNumber : true ,
644+ required : false ,
645+ validatePhoneNumber : false ,
621646 } ;
622647 const prefillMock : PhoneNumberOutputValue = {
623648 countryCode : 'CA' ,
@@ -657,8 +682,8 @@ describe('returnPhoneNumberCollector', () => {
657682 defaultCountryCode : null ,
658683 label : 'Phone Number' ,
659684 type : 'PHONE_NUMBER' ,
660- required : true ,
661- validatePhoneNumber : true ,
685+ required : false ,
686+ validatePhoneNumber : false ,
662687 } ;
663688 const prefillMock : PhoneNumberOutputValue = {
664689 phoneNumber : '1234567890' ,
@@ -696,8 +721,8 @@ describe('returnPhoneNumberCollector', () => {
696721 defaultCountryCode : 'US' ,
697722 label : 'Phone Number' ,
698723 type : 'PHONE_NUMBER' ,
699- required : true ,
700- validatePhoneNumber : true ,
724+ required : false ,
725+ validatePhoneNumber : false ,
701726 } ;
702727 const prefillMock : PhoneNumberOutputValue = {
703728 countryCode : 'CA' ,
@@ -778,17 +803,40 @@ describe('Return collector validator', () => {
778803 const validatedTextCollector = {
779804 input : {
780805 validation : [
781- { type : 'required' , message : 'This field is required' } ,
806+ { type : 'required' , message : 'This field is required' , rule : true } ,
782807 { type : 'regex' , message : 'Invalid format' , rule : '^[a-zA-Z0-9]+$' } ,
783808 ] ,
784809 } ,
785810 } as ValidatedTextCollector ;
786811
812+ const objectValueCollector = {
813+ input : {
814+ validation : [
815+ { type : 'required' , message : 'This field is required' , rule : true } ,
816+ { type : 'validatePhoneNumber' , message : 'Phone number should be validated' , rule : true } ,
817+ ] ,
818+ } ,
819+ } as PhoneNumberCollector ;
820+
821+ const multiValueCollector = {
822+ input : {
823+ validation : [ { type : 'required' , message : 'This field is required' , rule : true } ] ,
824+ } ,
825+ } as MultiSelectCollector ;
826+
787827 const validator = returnValidator ( validatedTextCollector ) ;
828+ const objValidator = returnValidator ( objectValueCollector ) ;
829+ const multiValueValidator = returnValidator ( multiValueCollector ) ;
788830
789831 it ( 'should return an error message for required validation when value is empty' , ( ) => {
790832 const result = validator ( '' ) ;
791833 expect ( result ) . toContain ( 'This field is required' ) ;
834+
835+ const objResult = objValidator ( { } ) ;
836+ expect ( objResult ) . toContain ( 'This field is required' ) ;
837+
838+ const multiValueResult = multiValueValidator ( { } ) ;
839+ expect ( multiValueResult ) . toContain ( 'This field is required' ) ;
792840 } ) ;
793841
794842 it ( 'should return an error message for regex validation when value does not match the pattern' , ( ) => {
@@ -799,6 +847,12 @@ describe('Return collector validator', () => {
799847 it ( 'should return no error messages when value passes all validations' , ( ) => {
800848 const result = validator ( 'validValue123' ) ;
801849 expect ( result ) . toEqual ( [ ] ) ;
850+
851+ const objResult = objValidator ( { countryCode : 'US' , phoneNumber : '1234567890' } ) ;
852+ expect ( objResult ) . toEqual ( [ ] ) ;
853+
854+ const multiValueResult = multiValueValidator ( [ 'a' , 'b' , 'c' ] ) ;
855+ expect ( multiValueResult ) . toEqual ( [ ] ) ;
802856 } ) ;
803857
804858 it ( 'should handle invalid regex patterns gracefully' , ( ) => {
0 commit comments