@@ -28,6 +28,12 @@ import {
2828 PERMISSION_READ ,
2929 PERMISSION_WRITE ,
3030} from './groupfoldersUtils.ts'
31+ import {
32+ openUnifiedSearch ,
33+ searchCanLoadMoreResults ,
34+ searchFor ,
35+ searchHasResult ,
36+ } from './unifiedSearchUtils.ts'
3137import { randHash } from '../utils/index.js'
3238import { triggerActionForFile } from './files/filesUtils.ts'
3339
@@ -323,3 +329,90 @@ describe('Groupfolders ACLs and trashbin behavior', () => {
323329 } )
324330
325331} )
332+
333+ describe ( 'Groupfolders ACLs and unified search behavior' , ( ) => {
334+ let user1 : User
335+ let user2 : User
336+ let managerUser : User
337+ let groupFolderId : string
338+ let groupName : string
339+ let groupFolderName : string
340+
341+ beforeEach ( ( ) => {
342+ if ( groupFolderId ) {
343+ deleteGroupFolder ( groupFolderId )
344+ }
345+ groupName = `test_group_${ randHash ( ) } `
346+ groupFolderName = `test_group_folder_${ randHash ( ) } `
347+
348+ cy . createRandomUser ( )
349+ . then ( _user => {
350+ user1 = _user
351+ } )
352+ cy . createRandomUser ( )
353+ . then ( _user => {
354+ user2 = _user
355+ } )
356+ cy . createRandomUser ( )
357+ . then ( _user => {
358+ managerUser = _user
359+
360+ createGroup ( groupName )
361+ . then ( ( ) => {
362+ addUserToGroup ( groupName , user1 . userId )
363+ addUserToGroup ( groupName , user2 . userId )
364+ addUserToGroup ( groupName , managerUser . userId )
365+ createGroupFolder ( groupFolderName , groupName , [ PERMISSION_READ , PERMISSION_WRITE , PERMISSION_DELETE ] )
366+ . then ( _groupFolderId => {
367+ groupFolderId = _groupFolderId
368+ enableACLPermissions ( groupFolderId )
369+ addACLManagerUser ( groupFolderId , managerUser . userId )
370+ } )
371+ } )
372+ } )
373+ } )
374+
375+ it ( 'Search for files in groupfolders with restricted read permissions' , ( ) => {
376+ // Create two subfolders and twelve files alterning between subfolders
377+ cy . login ( managerUser )
378+ cy . mkdir ( managerUser , `/${ groupFolderName } /subfolder1` )
379+ cy . mkdir ( managerUser , `/${ groupFolderName } /subfolder2` )
380+ // Use incremental mtimes to have a specific order in the results
381+ const mtime = Date . now ( ) / 1000
382+ for ( let i = 0 ; i < 12 ; i = i + 2 ) {
383+ cy . uploadContent ( managerUser , new Blob ( [ i ] ) , 'text/plain' , `/${ groupFolderName } /subfolder1/test${ i } .txt` , mtime + i )
384+ cy . uploadContent ( managerUser , new Blob ( [ i + 1 ] ) , 'text/plain' , `/${ groupFolderName } /subfolder2/test${ i + 1 } .txt` , mtime + i + 1 )
385+ }
386+
387+ // Set ACL permissions
388+ setACLPermissions ( groupFolderId , '/subfolder1' , [ `+${ PERMISSION_READ } ` ] , undefined , user1 . userId )
389+ setACLPermissions ( groupFolderId , '/subfolder1' , [ `+${ PERMISSION_READ } ` ] , undefined , user2 . userId )
390+ setACLPermissions ( groupFolderId , '/subfolder2' , [ `+${ PERMISSION_READ } ` ] , undefined , user1 . userId )
391+ setACLPermissions ( groupFolderId , '/subfolder2' , [ `-${ PERMISSION_READ } ` ] , undefined , user2 . userId )
392+
393+ // user1 can find files in both subfolders
394+ cy . login ( user1 )
395+ cy . visit ( '/apps/files' )
396+ openUnifiedSearch ( )
397+ searchFor ( 'test' )
398+ searchHasResult ( 'Files' , `test11.txt in ${ groupFolderName } /subfolder2` )
399+ searchHasResult ( 'Files' , `test10.txt in ${ groupFolderName } /subfolder1` )
400+ searchHasResult ( 'Files' , `test9.txt in ${ groupFolderName } /subfolder2` )
401+ searchHasResult ( 'Files' , `test8.txt in ${ groupFolderName } /subfolder1` )
402+ searchHasResult ( 'Files' , `test7.txt in ${ groupFolderName } /subfolder2` )
403+ searchCanLoadMoreResults ( 'Files' )
404+
405+ // user2 can find files only in subfolder1
406+ cy . login ( user2 )
407+ cy . visit ( '/apps/files' )
408+ openUnifiedSearch ( )
409+ searchFor ( 'test' )
410+ searchHasResult ( 'Files' , `test10.txt in ${ groupFolderName } /subfolder1` )
411+ searchHasResult ( 'Files' , `test8.txt in ${ groupFolderName } /subfolder1` )
412+ searchHasResult ( 'Files' , `test6.txt in ${ groupFolderName } /subfolder1` )
413+ searchHasResult ( 'Files' , `test4.txt in ${ groupFolderName } /subfolder1` )
414+ searchHasResult ( 'Files' , `test2.txt in ${ groupFolderName } /subfolder1` )
415+ searchCanLoadMoreResults ( 'Files' )
416+ } )
417+
418+ } )
0 commit comments