@@ -22,6 +22,7 @@ import {
2222 returnObjectValueCollector ,
2323 returnSingleValueAutoCollector ,
2424 returnObjectValueAutoCollector ,
25+ returnQrCodeCollector ,
2526} from './collector.utils.js' ;
2627import type {
2728 DaVinciField ,
@@ -31,6 +32,7 @@ import type {
3132 FidoRegistrationField ,
3233 PhoneNumberField ,
3334 ProtectField ,
35+ QrCodeField ,
3436 ReadOnlyField ,
3537 RedirectField ,
3638 StandardField ,
@@ -809,6 +811,77 @@ describe('No Value Collectors', () => {
809811 } ) ;
810812} ) ;
811813
814+ describe ( 'returnQrCodeCollector' , ( ) => {
815+ it ( 'should return a valid QrCodeCollector with src and label from fallbackText' , ( ) => {
816+ const mockField : QrCodeField = {
817+ type : 'QR_CODE' ,
818+ key : 'qr-code-field' ,
819+ content : 'data:image/png;base64,abc123' ,
820+ fallbackText : '04ZKS2KCIWKXT8FHRX' ,
821+ } ;
822+ const result = returnQrCodeCollector ( mockField , 2 ) ;
823+ expect ( result ) . toEqual ( {
824+ category : 'NoValueCollector' ,
825+ error : null ,
826+ type : 'QrCodeCollector' ,
827+ id : 'qr-code-field-2' ,
828+ name : 'qr-code-field-2' ,
829+ output : {
830+ key : 'qr-code-field-2' ,
831+ label : '04ZKS2KCIWKXT8FHRX' ,
832+ type : 'QR_CODE' ,
833+ src : 'data:image/png;base64,abc123' ,
834+ } ,
835+ } ) ;
836+ } ) ;
837+
838+ it ( 'should handle missing fallbackText gracefully' , ( ) => {
839+ const mockField : QrCodeField = {
840+ type : 'QR_CODE' ,
841+ key : 'qr-code-field' ,
842+ content : 'data:image/png;base64,abc123' ,
843+ } ;
844+ const result = returnQrCodeCollector ( mockField , 0 ) ;
845+ expect ( result ) . toEqual ( {
846+ category : 'NoValueCollector' ,
847+ error : null ,
848+ type : 'QrCodeCollector' ,
849+ id : 'qr-code-field-0' ,
850+ name : 'qr-code-field-0' ,
851+ output : {
852+ key : 'qr-code-field-0' ,
853+ label : '' ,
854+ type : 'QR_CODE' ,
855+ src : 'data:image/png;base64,abc123' ,
856+ } ,
857+ } ) ;
858+ } ) ;
859+
860+ it ( 'should set error when content is missing' , ( ) => {
861+ const mockField = { type : 'QR_CODE' , key : 'qr-code-field' } as unknown as QrCodeField ;
862+ const result = returnQrCodeCollector ( mockField , 0 ) ;
863+ expect ( result . error ) . toContain ( 'Content is not found' ) ;
864+ expect ( result . output . src ) . toBe ( '' ) ;
865+ } ) ;
866+
867+ it ( 'should fall back to type for id/name when key is missing' , ( ) => {
868+ const mockField = {
869+ type : 'QR_CODE' ,
870+ content : 'data:image/png;base64,abc123' ,
871+ } as unknown as QrCodeField ;
872+ const result = returnQrCodeCollector ( mockField , 0 ) ;
873+ expect ( result . error ) . toBeNull ( ) ;
874+ expect ( result . id ) . toBe ( 'QR_CODE-0' ) ;
875+ expect ( result . name ) . toBe ( 'QR_CODE-0' ) ;
876+ } ) ;
877+
878+ it ( 'should only report content error when both key and content are missing' , ( ) => {
879+ const mockField = { type : 'QR_CODE' } as unknown as QrCodeField ;
880+ const result = returnQrCodeCollector ( mockField , 0 ) ;
881+ expect ( result . error ) . toContain ( 'Content is not found' ) ;
882+ } ) ;
883+ } ) ;
884+
812885describe ( 'returnSingleValueAutoCollector' , ( ) => {
813886 it ( 'should create a valid ProtectCollector' , ( ) => {
814887 const mockField : ProtectField = {
0 commit comments