@capillarytech/creatives-library 8.0.215 → 8.0.217
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/utils/commonUtils.js +59 -0
- package/utils/tests/commonUtil.test.js +473 -1
- package/utils/tests/vendorDataTransformers.test.js +431 -0
- package/utils/vendorDataTransformers.js +70 -11
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +253 -253
- package/v2Containers/Whatsapp/constants.js +1 -1
- package/v2Containers/Whatsapp/index.js +58 -24
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +6206 -1537
- package/v2Containers/Whatsapp/tests/index.test.js +250 -83
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
transformAssetData,
|
|
4
4
|
transformToVendorFormat,
|
|
5
5
|
getFileHandle,
|
|
6
|
+
resolveCarouselVideoUpdateFields,
|
|
6
7
|
} from '../vendorDataTransformers';
|
|
7
8
|
|
|
8
9
|
describe('vendorDataTransformers', () => {
|
|
@@ -509,4 +510,434 @@ describe('vendorDataTransformers', () => {
|
|
|
509
510
|
expect(fileHandle).toBe('haptic_handle_123');
|
|
510
511
|
});
|
|
511
512
|
});
|
|
513
|
+
|
|
514
|
+
describe('resolveCarouselVideoUpdateFields', () => {
|
|
515
|
+
describe('HAPTIC vendor', () => {
|
|
516
|
+
it('should resolve HAPTIC vendor fields correctly with metaInfo', () => {
|
|
517
|
+
const data = {
|
|
518
|
+
metaInfo: {
|
|
519
|
+
secure_file_path: 'https://haptic.com/video.mp4',
|
|
520
|
+
hapticFileHandle: 'haptic_handle_123',
|
|
521
|
+
name: 'sample_video.mp4',
|
|
522
|
+
},
|
|
523
|
+
previewUrl: 'https://haptic.com/preview.jpg',
|
|
524
|
+
};
|
|
525
|
+
const fallbackVideoSrc = 'https://fallback.com/video.mp4';
|
|
526
|
+
const fallbackPreviewUrl = 'https://fallback.com/preview.jpg';
|
|
527
|
+
const fallbackFileHandle = 'fallback_handle';
|
|
528
|
+
|
|
529
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
530
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
531
|
+
data,
|
|
532
|
+
videoSrc: fallbackVideoSrc,
|
|
533
|
+
previewUrl: fallbackPreviewUrl,
|
|
534
|
+
fileHandle: fallbackFileHandle,
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
expect(result.resolvedVideoSrc).toBe('https://haptic.com/video.mp4');
|
|
538
|
+
expect(result.resolvedPreviewUrl).toBe('https://haptic.com/preview.jpg');
|
|
539
|
+
expect(result.resolvedHapticHandle).toBe('haptic_handle_123');
|
|
540
|
+
expect(result.resolvedKarixHandle).toBe('');
|
|
541
|
+
expect(result.standardAsset).toEqual({
|
|
542
|
+
videoSrc: 'https://haptic.com/video.mp4',
|
|
543
|
+
previewUrl: 'https://haptic.com/preview.jpg',
|
|
544
|
+
videoName: 'sample_video.mp4',
|
|
545
|
+
videoDuration: '',
|
|
546
|
+
fileHandle: 'haptic_handle_123',
|
|
547
|
+
videoHeight: '',
|
|
548
|
+
videoWidth: '',
|
|
549
|
+
});
|
|
550
|
+
expect(result.updateFields).toEqual([
|
|
551
|
+
{ fieldName: "videoSrc", value: 'https://haptic.com/video.mp4' },
|
|
552
|
+
{ fieldName: "videoPreviewImg", value: 'https://haptic.com/preview.jpg' },
|
|
553
|
+
{ fieldName: "assetList", value: result.standardAsset },
|
|
554
|
+
{ fieldName: "hapticFileHandle", value: 'haptic_handle_123' },
|
|
555
|
+
{ fieldName: "karixFileHandle", value: '' },
|
|
556
|
+
]);
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
it('should use fallback values when metaInfo fields are missing for HAPTIC', () => {
|
|
560
|
+
const data = {
|
|
561
|
+
metaInfo: {},
|
|
562
|
+
};
|
|
563
|
+
const fallbackVideoSrc = 'https://fallback.com/video.mp4';
|
|
564
|
+
const fallbackPreviewUrl = 'https://fallback.com/preview.jpg';
|
|
565
|
+
const fallbackFileHandle = 'fallback_handle';
|
|
566
|
+
|
|
567
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
568
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
569
|
+
data,
|
|
570
|
+
videoSrc: fallbackVideoSrc,
|
|
571
|
+
previewUrl: fallbackPreviewUrl,
|
|
572
|
+
fileHandle: fallbackFileHandle,
|
|
573
|
+
});
|
|
574
|
+
|
|
575
|
+
expect(result.resolvedVideoSrc).toBe(fallbackVideoSrc);
|
|
576
|
+
expect(result.resolvedPreviewUrl).toBe(fallbackPreviewUrl);
|
|
577
|
+
expect(result.resolvedHapticHandle).toBe(fallbackFileHandle);
|
|
578
|
+
expect(result.resolvedKarixHandle).toBe('');
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
it('should prefer metaInfo secure_file_path over fallback videoSrc for HAPTIC', () => {
|
|
582
|
+
const data = {
|
|
583
|
+
metaInfo: {
|
|
584
|
+
secure_file_path: 'https://haptic.com/video.mp4',
|
|
585
|
+
},
|
|
586
|
+
};
|
|
587
|
+
const fallbackVideoSrc = 'https://fallback.com/video.mp4';
|
|
588
|
+
|
|
589
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
590
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
591
|
+
data,
|
|
592
|
+
videoSrc: fallbackVideoSrc,
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
expect(result.resolvedVideoSrc).toBe('https://haptic.com/video.mp4');
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
it('should use fallback videoSrc when metaInfo secure_file_path is missing for HAPTIC', () => {
|
|
599
|
+
const data = {
|
|
600
|
+
metaInfo: {},
|
|
601
|
+
};
|
|
602
|
+
const fallbackVideoSrc = 'https://fallback.com/video.mp4';
|
|
603
|
+
|
|
604
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
605
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
606
|
+
data,
|
|
607
|
+
videoSrc: fallbackVideoSrc,
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
expect(result.resolvedVideoSrc).toBe(fallbackVideoSrc);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
it('should prefer metaInfo hapticFileHandle over fallback fileHandle for HAPTIC', () => {
|
|
614
|
+
const data = {
|
|
615
|
+
metaInfo: {
|
|
616
|
+
hapticFileHandle: 'haptic_handle_123',
|
|
617
|
+
},
|
|
618
|
+
};
|
|
619
|
+
const fallbackFileHandle = 'fallback_handle';
|
|
620
|
+
|
|
621
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
622
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
623
|
+
data,
|
|
624
|
+
fileHandle: fallbackFileHandle,
|
|
625
|
+
});
|
|
626
|
+
|
|
627
|
+
expect(result.resolvedHapticHandle).toBe('haptic_handle_123');
|
|
628
|
+
});
|
|
629
|
+
|
|
630
|
+
it('should transform standardAsset correctly for HAPTIC vendor', () => {
|
|
631
|
+
const data = {
|
|
632
|
+
metaInfo: {
|
|
633
|
+
secure_file_path: 'https://haptic.com/video.mp4',
|
|
634
|
+
name: 'sample_video.mp4',
|
|
635
|
+
duration: '30',
|
|
636
|
+
hapticFileHandle: 'haptic_handle_123',
|
|
637
|
+
height: '720',
|
|
638
|
+
width: '1280',
|
|
639
|
+
},
|
|
640
|
+
previewUrl: 'https://haptic.com/preview.jpg',
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
644
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
645
|
+
data,
|
|
646
|
+
});
|
|
647
|
+
|
|
648
|
+
expect(result.standardAsset).toEqual({
|
|
649
|
+
videoSrc: 'https://haptic.com/video.mp4',
|
|
650
|
+
previewUrl: 'https://haptic.com/preview.jpg',
|
|
651
|
+
videoName: 'sample_video.mp4',
|
|
652
|
+
videoDuration: '30',
|
|
653
|
+
fileHandle: 'haptic_handle_123',
|
|
654
|
+
videoHeight: '720',
|
|
655
|
+
videoWidth: '1280',
|
|
656
|
+
});
|
|
657
|
+
});
|
|
658
|
+
});
|
|
659
|
+
|
|
660
|
+
describe('KARIX vendor', () => {
|
|
661
|
+
it('should resolve KARIX vendor fields correctly', () => {
|
|
662
|
+
const data = {
|
|
663
|
+
videoSrc: 'https://karix.com/video.mp4',
|
|
664
|
+
previewUrl: 'https://karix.com/preview.jpg',
|
|
665
|
+
karixFileHandle: 'karix_handle_123',
|
|
666
|
+
};
|
|
667
|
+
const fallbackFileHandle = 'fallback_handle';
|
|
668
|
+
|
|
669
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
670
|
+
host: VENDOR_TYPES.KARIX,
|
|
671
|
+
data,
|
|
672
|
+
videoSrc: data.videoSrc,
|
|
673
|
+
previewUrl: data.previewUrl,
|
|
674
|
+
fileHandle: fallbackFileHandle,
|
|
675
|
+
});
|
|
676
|
+
|
|
677
|
+
expect(result.resolvedVideoSrc).toBe('https://karix.com/video.mp4');
|
|
678
|
+
expect(result.resolvedPreviewUrl).toBe('https://karix.com/preview.jpg');
|
|
679
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
680
|
+
expect(result.resolvedKarixHandle).toBe(fallbackFileHandle);
|
|
681
|
+
expect(result.standardAsset).toBe(data);
|
|
682
|
+
});
|
|
683
|
+
|
|
684
|
+
it('should set resolvedKarixHandle from fileHandle parameter for KARIX', () => {
|
|
685
|
+
const data = {};
|
|
686
|
+
const fileHandle = 'karix_handle_123';
|
|
687
|
+
|
|
688
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
689
|
+
host: VENDOR_TYPES.KARIX,
|
|
690
|
+
data,
|
|
691
|
+
fileHandle,
|
|
692
|
+
});
|
|
693
|
+
|
|
694
|
+
expect(result.resolvedKarixHandle).toBe('karix_handle_123');
|
|
695
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
it('should not transform standardAsset for KARIX vendor', () => {
|
|
699
|
+
const data = {
|
|
700
|
+
videoSrc: 'https://karix.com/video.mp4',
|
|
701
|
+
previewUrl: 'https://karix.com/preview.jpg',
|
|
702
|
+
customField: 'custom_value',
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
706
|
+
host: VENDOR_TYPES.KARIX,
|
|
707
|
+
data,
|
|
708
|
+
});
|
|
709
|
+
|
|
710
|
+
expect(result.standardAsset).toBe(data);
|
|
711
|
+
expect(result.standardAsset.customField).toBe('custom_value');
|
|
712
|
+
});
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
describe('GUPSHUP vendor', () => {
|
|
716
|
+
it('should resolve GUPSHUP vendor fields correctly', () => {
|
|
717
|
+
const data = {
|
|
718
|
+
videoSrc: 'https://gupshup.com/video.mp4',
|
|
719
|
+
previewUrl: 'https://gupshup.com/preview.jpg',
|
|
720
|
+
};
|
|
721
|
+
const fileHandle = 'gupshup_handle_123';
|
|
722
|
+
|
|
723
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
724
|
+
host: VENDOR_TYPES.GUPSHUP,
|
|
725
|
+
data,
|
|
726
|
+
videoSrc: data.videoSrc,
|
|
727
|
+
previewUrl: data.previewUrl,
|
|
728
|
+
fileHandle,
|
|
729
|
+
});
|
|
730
|
+
|
|
731
|
+
expect(result.resolvedVideoSrc).toBe('https://gupshup.com/video.mp4');
|
|
732
|
+
expect(result.resolvedPreviewUrl).toBe('https://gupshup.com/preview.jpg');
|
|
733
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
734
|
+
expect(result.resolvedKarixHandle).toBe('gupshup_handle_123');
|
|
735
|
+
expect(result.standardAsset).toBe(data);
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
it('should set resolvedKarixHandle from fileHandle parameter for GUPSHUP', () => {
|
|
739
|
+
const data = {};
|
|
740
|
+
const fileHandle = 'gupshup_handle_123';
|
|
741
|
+
|
|
742
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
743
|
+
host: VENDOR_TYPES.GUPSHUP,
|
|
744
|
+
data,
|
|
745
|
+
fileHandle,
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
expect(result.resolvedKarixHandle).toBe('gupshup_handle_123');
|
|
749
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
750
|
+
});
|
|
751
|
+
});
|
|
752
|
+
|
|
753
|
+
describe('Unknown/Other vendors', () => {
|
|
754
|
+
it('should handle unknown vendor type with standard behavior', () => {
|
|
755
|
+
const data = {
|
|
756
|
+
videoSrc: 'https://unknown.com/video.mp4',
|
|
757
|
+
previewUrl: 'https://unknown.com/preview.jpg',
|
|
758
|
+
};
|
|
759
|
+
const fileHandle = 'unknown_handle';
|
|
760
|
+
|
|
761
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
762
|
+
host: 'unknown_vendor',
|
|
763
|
+
data,
|
|
764
|
+
videoSrc: data.videoSrc,
|
|
765
|
+
previewUrl: data.previewUrl,
|
|
766
|
+
fileHandle,
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
expect(result.resolvedVideoSrc).toBe('https://unknown.com/video.mp4');
|
|
770
|
+
expect(result.resolvedPreviewUrl).toBe('https://unknown.com/preview.jpg');
|
|
771
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
772
|
+
expect(result.resolvedKarixHandle).toBe('');
|
|
773
|
+
expect(result.standardAsset).toBe(data);
|
|
774
|
+
});
|
|
775
|
+
|
|
776
|
+
it('should not transform standardAsset for unknown vendor', () => {
|
|
777
|
+
const data = {
|
|
778
|
+
videoSrc: 'https://unknown.com/video.mp4',
|
|
779
|
+
customField: 'custom_value',
|
|
780
|
+
};
|
|
781
|
+
|
|
782
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
783
|
+
host: 'unknown_vendor',
|
|
784
|
+
data,
|
|
785
|
+
});
|
|
786
|
+
|
|
787
|
+
expect(result.standardAsset).toBe(data);
|
|
788
|
+
});
|
|
789
|
+
});
|
|
790
|
+
|
|
791
|
+
describe('Update fields structure', () => {
|
|
792
|
+
it('should return updateFields array with correct structure', () => {
|
|
793
|
+
const data = {
|
|
794
|
+
metaInfo: {
|
|
795
|
+
secure_file_path: 'https://haptic.com/video.mp4',
|
|
796
|
+
hapticFileHandle: 'haptic_handle_123',
|
|
797
|
+
},
|
|
798
|
+
previewUrl: 'https://haptic.com/preview.jpg',
|
|
799
|
+
};
|
|
800
|
+
|
|
801
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
802
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
803
|
+
data,
|
|
804
|
+
});
|
|
805
|
+
|
|
806
|
+
expect(result.updateFields).toHaveLength(5);
|
|
807
|
+
expect(result.updateFields[0]).toEqual({ fieldName: "videoSrc", value: expect.any(String) });
|
|
808
|
+
expect(result.updateFields[1]).toEqual({ fieldName: "videoPreviewImg", value: expect.any(String) });
|
|
809
|
+
expect(result.updateFields[2]).toEqual({ fieldName: "assetList", value: expect.any(Object) });
|
|
810
|
+
expect(result.updateFields[3]).toEqual({ fieldName: "hapticFileHandle", value: expect.any(String) });
|
|
811
|
+
expect(result.updateFields[4]).toEqual({ fieldName: "karixFileHandle", value: expect.any(String) });
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
it('should include correct field names in updateFields', () => {
|
|
815
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
816
|
+
host: VENDOR_TYPES.KARIX,
|
|
817
|
+
data: {},
|
|
818
|
+
});
|
|
819
|
+
|
|
820
|
+
const fieldNames = result.updateFields.map((field) => field.fieldName);
|
|
821
|
+
expect(fieldNames).toEqual([
|
|
822
|
+
"videoSrc",
|
|
823
|
+
"videoPreviewImg",
|
|
824
|
+
"assetList",
|
|
825
|
+
"hapticFileHandle",
|
|
826
|
+
"karixFileHandle",
|
|
827
|
+
]);
|
|
828
|
+
});
|
|
829
|
+
});
|
|
830
|
+
|
|
831
|
+
describe('Edge cases', () => {
|
|
832
|
+
it('should handle null data object', () => {
|
|
833
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
834
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
835
|
+
data: null,
|
|
836
|
+
videoSrc: 'https://fallback.com/video.mp4',
|
|
837
|
+
});
|
|
838
|
+
|
|
839
|
+
expect(result.resolvedVideoSrc).toBe('https://fallback.com/video.mp4');
|
|
840
|
+
expect(result.resolvedPreviewUrl).toBe('');
|
|
841
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
it('should handle undefined data object', () => {
|
|
845
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
846
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
847
|
+
data: undefined,
|
|
848
|
+
videoSrc: 'https://fallback.com/video.mp4',
|
|
849
|
+
});
|
|
850
|
+
|
|
851
|
+
expect(result.resolvedVideoSrc).toBe('https://fallback.com/video.mp4');
|
|
852
|
+
expect(result.resolvedPreviewUrl).toBe('');
|
|
853
|
+
});
|
|
854
|
+
|
|
855
|
+
it('should handle empty data object', () => {
|
|
856
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
857
|
+
host: VENDOR_TYPES.KARIX,
|
|
858
|
+
data: {},
|
|
859
|
+
videoSrc: 'https://fallback.com/video.mp4',
|
|
860
|
+
previewUrl: 'https://fallback.com/preview.jpg',
|
|
861
|
+
fileHandle: 'fallback_handle',
|
|
862
|
+
});
|
|
863
|
+
|
|
864
|
+
expect(result.resolvedVideoSrc).toBe('https://fallback.com/video.mp4');
|
|
865
|
+
expect(result.resolvedPreviewUrl).toBe('https://fallback.com/preview.jpg');
|
|
866
|
+
expect(result.resolvedKarixHandle).toBe('fallback_handle');
|
|
867
|
+
});
|
|
868
|
+
|
|
869
|
+
it('should handle empty strings for all fallback parameters', () => {
|
|
870
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
871
|
+
host: VENDOR_TYPES.KARIX,
|
|
872
|
+
data: {},
|
|
873
|
+
videoSrc: '',
|
|
874
|
+
previewUrl: '',
|
|
875
|
+
fileHandle: '',
|
|
876
|
+
});
|
|
877
|
+
|
|
878
|
+
expect(result.resolvedVideoSrc).toBe('');
|
|
879
|
+
expect(result.resolvedPreviewUrl).toBe('');
|
|
880
|
+
expect(result.resolvedKarixHandle).toBe('');
|
|
881
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
882
|
+
});
|
|
883
|
+
|
|
884
|
+
it('should handle missing data.metaInfo for HAPTIC vendor', () => {
|
|
885
|
+
const data = {
|
|
886
|
+
};
|
|
887
|
+
|
|
888
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
889
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
890
|
+
data,
|
|
891
|
+
videoSrc: 'https://fallback.com/video.mp4',
|
|
892
|
+
});
|
|
893
|
+
|
|
894
|
+
expect(result.resolvedVideoSrc).toBe('https://fallback.com/video.mp4');
|
|
895
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
896
|
+
});
|
|
897
|
+
|
|
898
|
+
it('should handle empty metaInfo object for HAPTIC vendor', () => {
|
|
899
|
+
const data = {
|
|
900
|
+
metaInfo: {},
|
|
901
|
+
};
|
|
902
|
+
|
|
903
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
904
|
+
host: VENDOR_TYPES.HAPTIC,
|
|
905
|
+
data,
|
|
906
|
+
videoSrc: 'https://fallback.com/video.mp4',
|
|
907
|
+
fileHandle: 'fallback_handle',
|
|
908
|
+
});
|
|
909
|
+
|
|
910
|
+
expect(result.resolvedVideoSrc).toBe('https://fallback.com/video.mp4');
|
|
911
|
+
expect(result.resolvedHapticHandle).toBe('fallback_handle');
|
|
912
|
+
});
|
|
913
|
+
});
|
|
914
|
+
|
|
915
|
+
describe('Default parameter values', () => {
|
|
916
|
+
it('should use default empty string values when parameters are not provided', () => {
|
|
917
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
918
|
+
host: VENDOR_TYPES.KARIX,
|
|
919
|
+
data: {},
|
|
920
|
+
});
|
|
921
|
+
|
|
922
|
+
expect(result.resolvedVideoSrc).toBe('');
|
|
923
|
+
expect(result.resolvedPreviewUrl).toBe('');
|
|
924
|
+
expect(result.resolvedKarixHandle).toBe('');
|
|
925
|
+
expect(result.resolvedHapticHandle).toBe('');
|
|
926
|
+
});
|
|
927
|
+
|
|
928
|
+
it('should work with minimal parameters (only host and data)', () => {
|
|
929
|
+
const data = {
|
|
930
|
+
videoSrc: 'https://test.com/video.mp4',
|
|
931
|
+
};
|
|
932
|
+
|
|
933
|
+
const result = resolveCarouselVideoUpdateFields({
|
|
934
|
+
host: VENDOR_TYPES.KARIX,
|
|
935
|
+
data,
|
|
936
|
+
});
|
|
937
|
+
|
|
938
|
+
expect(result.updateFields).toBeDefined();
|
|
939
|
+
expect(result.updateFields).toHaveLength(5);
|
|
940
|
+
});
|
|
941
|
+
});
|
|
942
|
+
});
|
|
512
943
|
});
|
|
@@ -47,17 +47,15 @@ const transformHapticAssetData = (assetData) => {
|
|
|
47
47
|
/**
|
|
48
48
|
* Transform standard vendor data structure (Karix, Gupshup, etc.)
|
|
49
49
|
*/
|
|
50
|
-
const transformStandardAssetData = (assetData) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
};
|
|
60
|
-
};
|
|
50
|
+
const transformStandardAssetData = (assetData) => ({
|
|
51
|
+
videoSrc: get(assetData, 'videoSrc', ''),
|
|
52
|
+
previewUrl: get(assetData, 'previewUrl', ''),
|
|
53
|
+
videoName: get(assetData, 'videoName', ''),
|
|
54
|
+
videoDuration: get(assetData, 'videoDuration', ''),
|
|
55
|
+
fileHandle: get(assetData, 'karixFileHandle', ''),
|
|
56
|
+
videoHeight: get(assetData, 'videoHeight', ''),
|
|
57
|
+
videoWidth: get(assetData, 'videoWidth', ''),
|
|
58
|
+
});
|
|
61
59
|
|
|
62
60
|
/**
|
|
63
61
|
* Transform standardized data back to vendor-specific format
|
|
@@ -106,3 +104,64 @@ export const getFileHandle = (assetData, vendorType) => {
|
|
|
106
104
|
return get(assetData, 'karixFileHandle', '') || get(assetData, 'metaInfo.karixFileHandle', '');
|
|
107
105
|
}
|
|
108
106
|
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Resolve vendor-specific carousel video update fields
|
|
110
|
+
* Handles different vendor data structures (HAPTIC, KARIX, GUPSHUP) for carousel video updates
|
|
111
|
+
*
|
|
112
|
+
* @param {Object} params - Parameters object
|
|
113
|
+
* @param {string} params.host - Vendor host type (HOST_HAPTIC, HOST_KARIX, HOST_GUPSHUP)
|
|
114
|
+
* @param {Object} params.data - Asset data object with vendor-specific structure
|
|
115
|
+
* @param {string} params.videoSrc - Standard video source (fallback)
|
|
116
|
+
* @param {string} params.previewUrl - Standard preview URL (fallback)
|
|
117
|
+
* @param {string} params.fileHandle - Standard file handle (fallback)
|
|
118
|
+
* @returns {Object} Object containing resolved values and carousel update fields array
|
|
119
|
+
*/
|
|
120
|
+
export const resolveCarouselVideoUpdateFields = ({
|
|
121
|
+
host,
|
|
122
|
+
data,
|
|
123
|
+
videoSrc = '',
|
|
124
|
+
previewUrl = '',
|
|
125
|
+
fileHandle = '',
|
|
126
|
+
}) => {
|
|
127
|
+
const HOST_HAPTIC = VENDOR_TYPES.HAPTIC;
|
|
128
|
+
const HOST_KARIX = VENDOR_TYPES.KARIX;
|
|
129
|
+
const HOST_GUPSHUP = VENDOR_TYPES.GUPSHUP;
|
|
130
|
+
|
|
131
|
+
const resolvedVideoSrc = host === HOST_HAPTIC
|
|
132
|
+
? (data?.metaInfo?.secure_file_path || videoSrc)
|
|
133
|
+
: videoSrc;
|
|
134
|
+
|
|
135
|
+
const resolvedPreviewUrl = host === HOST_HAPTIC
|
|
136
|
+
? (data?.previewUrl || previewUrl)
|
|
137
|
+
: previewUrl;
|
|
138
|
+
|
|
139
|
+
const resolvedHapticHandle = host === HOST_HAPTIC
|
|
140
|
+
? (data?.metaInfo?.hapticFileHandle || fileHandle)
|
|
141
|
+
: '';
|
|
142
|
+
|
|
143
|
+
const resolvedKarixHandle = (host === HOST_KARIX || host === HOST_GUPSHUP)
|
|
144
|
+
? fileHandle
|
|
145
|
+
: '';
|
|
146
|
+
|
|
147
|
+
const standardAsset = host === HOST_HAPTIC
|
|
148
|
+
? transformAssetData({ ...data, metaInfo: data?.metaInfo }, VENDOR_TYPES.HAPTIC)
|
|
149
|
+
: data;
|
|
150
|
+
|
|
151
|
+
const updateFields = [
|
|
152
|
+
{ fieldName: "videoSrc", value: resolvedVideoSrc },
|
|
153
|
+
{ fieldName: "videoPreviewImg", value: resolvedPreviewUrl },
|
|
154
|
+
{ fieldName: "assetList", value: standardAsset },
|
|
155
|
+
{ fieldName: "hapticFileHandle", value: resolvedHapticHandle },
|
|
156
|
+
{ fieldName: "karixFileHandle", value: resolvedKarixHandle },
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
return {
|
|
160
|
+
resolvedVideoSrc,
|
|
161
|
+
resolvedPreviewUrl,
|
|
162
|
+
resolvedHapticHandle,
|
|
163
|
+
resolvedKarixHandle,
|
|
164
|
+
standardAsset,
|
|
165
|
+
updateFields,
|
|
166
|
+
};
|
|
167
|
+
};
|