@@ -323,6 +323,70 @@ describe("Folder Level Permissions - UPDATE FLP - Simple", () => {
323323 }
324324 ]
325325 } ) ;
326+
327+ // Update child folder with its own permissions
328+ await context . aco . folder . update ( childFolder . id , {
329+ permissions : [
330+ {
331+ target : "admin:5678" ,
332+ level : "editor"
333+ }
334+ ]
335+ } ) ;
336+
337+ {
338+ // Check child folder
339+ const updatedChildFlp = await context . aco . flp . get ( childFolder . id ) ;
340+ expect ( updatedChildFlp ) . toMatchObject ( {
341+ id : childFolder . id ,
342+ type,
343+ slug : childFolder . slug ,
344+ parentId : parentFolder . id ,
345+ permissions : [
346+ {
347+ target : "admin:5678" ,
348+ level : "editor"
349+ } ,
350+ {
351+ target : "admin:1234" ,
352+ level : "viewer" ,
353+ inheritedFrom : `parent:${ parentFolder . id } `
354+ }
355+ ]
356+ } ) ;
357+ }
358+
359+ // Update the parent folder removing all permissions
360+ await context . aco . folder . update ( parentFolder . id , {
361+ permissions : [ ]
362+ } ) ;
363+
364+ // Check parent folder
365+ const updatedParentFlp = await context . aco . flp . get ( parentFolder . id ) ;
366+ expect ( updatedParentFlp ) . toMatchObject ( {
367+ id : parentFolder . id ,
368+ type,
369+ slug : parentFolder . slug ,
370+ parentId : ROOT_FOLDER ,
371+ permissions : [ ]
372+ } ) ;
373+
374+ {
375+ // Check child folder
376+ const updatedChildFlp = await context . aco . flp . get ( childFolder . id ) ;
377+ expect ( updatedChildFlp ) . toMatchObject ( {
378+ id : childFolder . id ,
379+ type,
380+ slug : childFolder . slug ,
381+ parentId : parentFolder . id ,
382+ permissions : [
383+ {
384+ target : "admin:5678" ,
385+ level : "editor"
386+ }
387+ ]
388+ } ) ;
389+ }
326390 } ) ;
327391} ) ;
328392
@@ -644,6 +708,53 @@ describe("Folder Level Permissions - UPDATE FLP - Complex", () => {
644708 }
645709 }
646710
711+ // Update level2 with its empty permissions: it should always inherit permissions from level1 and propagate them down
712+ await context . aco . folder . update ( level2 . id , {
713+ permissions : [ ]
714+ } ) ;
715+
716+ // Verify level2 has no permissions
717+ for ( let i = 0 ; i < folders . length ; i ++ ) {
718+ const folder = folders [ i ] ;
719+ const flp = await context . aco . flp . get ( folder . id ) ;
720+
721+ const expectedPath = folders
722+ . slice ( 0 , i + 1 )
723+ . map ( f => f . slug )
724+ . join ( "/" ) ;
725+
726+ if ( i === 0 ) {
727+ expect ( flp ) . toMatchObject ( {
728+ id : folder . id ,
729+ type,
730+ slug : folder . slug ,
731+ parentId : ROOT_FOLDER ,
732+ path : `${ ROOT_FOLDER } /${ expectedPath } ` ,
733+ permissions : [
734+ {
735+ target : "admin:user1" ,
736+ level : "viewer"
737+ }
738+ ]
739+ } ) ;
740+ } else {
741+ expect ( flp ) . toMatchObject ( {
742+ id : folder . id ,
743+ type,
744+ slug : folder . slug ,
745+ parentId : folders [ i - 1 ] . id ,
746+ path : `${ ROOT_FOLDER } /${ expectedPath } ` ,
747+ permissions : [
748+ {
749+ target : "admin:user1" ,
750+ level : "viewer" ,
751+ inheritedFrom : `parent:${ folders [ i - 1 ] . id } `
752+ }
753+ ]
754+ } ) ;
755+ }
756+ }
757+
647758 // Update level3 with its own permissions
648759 await context . aco . folder . update ( level3 . id , {
649760 permissions : [
0 commit comments