@@ -240,6 +240,9 @@ describe("handleChildrenEventTypes", () => {
240240 // @ts -expect-error - partial mock for test purposes
241241 prismaMock . eventType . findMany . mockResolvedValue ( [ { userId : 4 , metadata : { } } ] ) ;
242242
243+ // @ts -expect-error - partial mock for test purposes
244+ prismaMock . eventType . update . mockResolvedValue ( { id : 100 } ) ;
245+
243246 const result = await updateChildrenEventTypes ( {
244247 eventTypeId : 1 ,
245248 oldEventType : { children : [ { userId : 4 } ] , team : { name : "" } } ,
@@ -313,6 +316,9 @@ describe("handleChildrenEventTypes", () => {
313316 // @ts -expect-error - partial mock for test purposes
314317 prismaMock . eventType . findMany . mockResolvedValue ( [ { userId : 4 , metadata : { } } ] ) ;
315318
319+ // @ts -expect-error - partial mock for test purposes
320+ prismaMock . eventType . update . mockResolvedValue ( { id : 101 } ) ;
321+
316322 const result = await updateChildrenEventTypes ( {
317323 eventTypeId : 1 ,
318324 oldEventType : { children : [ { userId : 4 } , { userId : 1 } ] , team : { name : "" } } ,
@@ -450,6 +456,9 @@ describe("handleChildrenEventTypes", () => {
450456 // @ts -expect-error - partial mock for test purposes
451457 prismaMock . eventType . findMany . mockResolvedValue ( [ { userId : 4 , metadata : { } } ] ) ;
452458
459+ // @ts -expect-error - partial mock for test purposes
460+ prismaMock . eventType . update . mockResolvedValue ( { id : 102 } ) ;
461+
453462 prismaMock . eventType . deleteMany . mockResolvedValue ( [ 123 ] as unknown as Prisma . BatchPayload ) ;
454463 const result = await updateChildrenEventTypes ( {
455464 eventTypeId : 1 ,
@@ -960,4 +969,98 @@ describe("handleChildrenEventTypes", () => {
960969 } ) ;
961970 } ) ;
962971 } ) ;
972+
973+ describe ( "CalVideoSettings propagation" , ( ) => {
974+ it ( "Creates CalVideoSettings for new children when parent has settings" , async ( ) => {
975+ const { schedulingType, teamId, timeZone, ...evType } = mockFindFirstEventType ( {
976+ id : 123 ,
977+ metadata : { managedEventConfig : { } } ,
978+ locations : [ ] ,
979+ } ) ;
980+
981+ setupTransactionMock ( ) ;
982+ prismaMock . eventType . createManyAndReturn . mockResolvedValue ( [
983+ { ...evType , id : 456 , userId : 4 , schedulingType, teamId, timeZone } as unknown as EventType ,
984+ ] ) ;
985+
986+ await updateChildrenEventTypes ( {
987+ eventTypeId : 1 ,
988+ oldEventType : { children : [ ] , team : { name : "" } } ,
989+ children : [ { hidden : false , owner : { id : 4 , name : "" , email : "" , eventTypeSlugs : [ ] } } ] ,
990+ updatedEventType : { schedulingType : "MANAGED" , slug : "something" } ,
991+ currentUserId : 1 ,
992+ prisma : prismaMock ,
993+ profileId : null ,
994+ updatedValues : { } ,
995+ calVideoSettings : {
996+ enableAutomaticRecordingForOrganizer : true ,
997+ enableAutomaticTranscription : true ,
998+ } ,
999+ } ) ;
1000+
1001+ expect ( prismaMock . calVideoSettings . createMany ) . toHaveBeenCalledWith ( {
1002+ data : [
1003+ expect . objectContaining ( {
1004+ eventTypeId : 456 ,
1005+ enableAutomaticRecordingForOrganizer : true ,
1006+ enableAutomaticTranscription : true ,
1007+ } ) ,
1008+ ] ,
1009+ skipDuplicates : true ,
1010+ } ) ;
1011+ } ) ;
1012+
1013+ it ( "Syncs/deletes CalVideoSettings for existing children based on parent settings" , async ( ) => {
1014+ const mockExistingChildUpdate = ( ) => {
1015+ mockFindFirstEventType ( { metadata : { managedEventConfig : { } } , locations : [ ] } ) ;
1016+ // @ts -expect-error - partial mock
1017+ prismaMock . eventType . findMany . mockResolvedValue ( [ { userId : 4 , metadata : { } } ] ) ;
1018+ prismaMock . eventType . update . mockResolvedValue ( {
1019+ id : 789 ,
1020+ userId : 4 ,
1021+ schedulingType : SchedulingType . MANAGED ,
1022+ } as unknown as EventType ) ;
1023+ } ;
1024+
1025+ const baseParams = {
1026+ eventTypeId : 1 ,
1027+ oldEventType : { children : [ { userId : 4 } ] , team : { name : "" } } ,
1028+ children : [ { hidden : false , owner : { id : 4 , name : "" , email : "" , eventTypeSlugs : [ ] } } ] ,
1029+ updatedEventType : { schedulingType : "MANAGED" as const , slug : "something" } ,
1030+ currentUserId : 1 ,
1031+ prisma : prismaMock ,
1032+ profileId : null ,
1033+ updatedValues : { } ,
1034+ } ;
1035+
1036+ // Test upsert when calVideoSettings provided
1037+ mockExistingChildUpdate ( ) ;
1038+ await updateChildrenEventTypes ( {
1039+ ...baseParams ,
1040+ calVideoSettings : { enableAutomaticRecordingForOrganizer : true } ,
1041+ } ) ;
1042+ expect ( prismaMock . calVideoSettings . upsert ) . toHaveBeenCalledWith (
1043+ expect . objectContaining ( {
1044+ where : { eventTypeId : 789 } ,
1045+ update : expect . objectContaining ( { enableAutomaticRecordingForOrganizer : true } ) ,
1046+ create : expect . objectContaining ( { eventTypeId : 789 , enableAutomaticRecordingForOrganizer : true } ) ,
1047+ } )
1048+ ) ;
1049+
1050+ // Test deleteMany when calVideoSettings is null
1051+ vi . clearAllMocks ( ) ;
1052+ mockExistingChildUpdate ( ) ;
1053+ await updateChildrenEventTypes ( { ...baseParams , calVideoSettings : null } ) ;
1054+ expect ( prismaMock . calVideoSettings . deleteMany ) . toHaveBeenCalledWith ( {
1055+ where : { eventTypeId : { in : [ 789 ] } } ,
1056+ } ) ;
1057+
1058+ // Test no-op when calVideoSettings is undefined
1059+ vi . clearAllMocks ( ) ;
1060+ mockExistingChildUpdate ( ) ;
1061+ await updateChildrenEventTypes ( { ...baseParams , calVideoSettings : undefined } ) ;
1062+ expect ( prismaMock . calVideoSettings . upsert ) . not . toHaveBeenCalled ( ) ;
1063+ expect ( prismaMock . calVideoSettings . deleteMany ) . not . toHaveBeenCalled ( ) ;
1064+ } ) ;
1065+ } ) ;
9631066} ) ;
0 commit comments