diff --git a/composer.lock b/composer.lock index 69a0805d8..18ea8bc21 100644 --- a/composer.lock +++ b/composer.lock @@ -201,16 +201,16 @@ }, { "name": "nextcloud/coding-standard", - "version": "v1.2.1", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/nextcloud/coding-standard.git", - "reference": "cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e" + "reference": "bc9c53a5306114b60c4363057aff9c2ed10a54da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e", - "reference": "cf5f18d989ec62fb4cdc7fc92a36baf34b3d829e", + "url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/bc9c53a5306114b60c4363057aff9c2ed10a54da", + "reference": "bc9c53a5306114b60c4363057aff9c2ed10a54da", "shasum": "" }, "require": { @@ -236,9 +236,9 @@ "description": "Nextcloud coding standards for the php cs fixer", "support": { "issues": "https://github.com/nextcloud/coding-standard/issues", - "source": "https://github.com/nextcloud/coding-standard/tree/v1.2.1" + "source": "https://github.com/nextcloud/coding-standard/tree/v1.2.3" }, - "time": "2024-02-01T14:54:37+00:00" + "time": "2024-08-23T14:32:32+00:00" }, { "name": "nextcloud/ocp", diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index d0b793b96..8834fdce1 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -113,7 +113,7 @@ public function register(IRegistrationContext $context): void { $c->get(ISession::class), $c->get(IMountProviderCollection::class), $c->get(IDBConnection::class), - $c->get(ICacheFactory::class)->createLocal("groupfolders"), + $c->get(ICacheFactory::class)->createLocal('groupfolders'), $allowRootShare, $enableEncryption ); diff --git a/lib/Command/ListCommand.php b/lib/Command/ListCommand.php index 15f59f770..cbe083292 100644 --- a/lib/Command/ListCommand.php +++ b/lib/Command/ListCommand.php @@ -45,7 +45,7 @@ protected function configure() { $this ->setName('groupfolders:list') ->setDescription('List the configured group folders') - ->addOption('user', 'u', InputArgument::OPTIONAL, "List group folders applicable for a user"); + ->addOption('user', 'u', InputArgument::OPTIONAL, 'List group folders applicable for a user'); parent::configure(); } @@ -77,7 +77,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { if ($outputType === self::OUTPUT_FORMAT_JSON || $outputType === self::OUTPUT_FORMAT_JSON_PRETTY) { $output->writeln('[]'); } else { - $output->writeln("No folders configured"); + $output->writeln('No folders configured'); } return 0; } diff --git a/lib/Command/Scan.php b/lib/Command/Scan.php index f554c8134..692a839a1 100644 --- a/lib/Command/Scan.php +++ b/lib/Command/Scan.php @@ -51,12 +51,12 @@ protected function execute(InputInterface $input, OutputInterface $output) { $folderId = $input->getArgument('folder_id'); $all = $input->getOption('all'); if ($folderId === null && !$all) { - $output->writeln("Either a group folder id or --all needs to be provided"); + $output->writeln('Either a group folder id or --all needs to be provided'); return -1; } if ($folderId !== null && $all) { - $output->writeln("Specifying a group folder id and --all are mutually exclusive"); + $output->writeln('Specifying a group folder id and --all are mutually exclusive'); return -1; } @@ -89,7 +89,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln("Scanning group folder with id\t{$folder['id']}", OutputInterface::VERBOSITY_VERBOSE); if ($scanner instanceof ObjectStoreScanner) { - $output->writeln("Scanning group folders using an object store as primary storage is not supported."); + $output->writeln('Scanning group folders using an object store as primary storage is not supported.'); return -1; } @@ -118,7 +118,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { $end = microtime(true); $statsRow[3] = date('H:i:s', (int)($end - $start)); - $output->writeln("", OutputInterface::VERBOSITY_VERBOSE); + $output->writeln('', OutputInterface::VERBOSITY_VERBOSE); $stats[] = $statsRow; } diff --git a/lib/Controller/DelegationController.php b/lib/Controller/DelegationController.php index 309f3b56d..2bead302e 100644 --- a/lib/Controller/DelegationController.php +++ b/lib/Controller/DelegationController.php @@ -106,7 +106,7 @@ public function getAllCircles(): DataResponse { */ #[NoAdminRequired] #[ApiRoute(verb: 'GET', url: '/delegation/authorized-groups')] - public function getAuthorizedGroups(string $classname = ""): DataResponse { + public function getAuthorizedGroups(string $classname = ''): DataResponse { $data = []; $authorizedGroups = $this->authorizedGroupService->findExistingGroupsForClass($classname); diff --git a/lib/DAV/GroupFoldersHome.php b/lib/DAV/GroupFoldersHome.php index 5ccbb3f8f..e72af6387 100644 --- a/lib/DAV/GroupFoldersHome.php +++ b/lib/DAV/GroupFoldersHome.php @@ -75,8 +75,8 @@ private function getFolder(string $name): ?array { * @return GroupFolderNode */ private function getDirectoryForFolder(array $folder): GroupFolderNode { - $userHome = "/" . $this->user->getUID() . "/files"; - $node = $this->rootFolder->get($userHome . "/" . $folder['mount_point']); + $userHome = '/' . $this->user->getUID() . '/files'; + $node = $this->rootFolder->get($userHome . '/' . $folder['mount_point']); return new GroupFolderNode(Filesystem::getView($userHome), $node, $folder['folder_id']); } diff --git a/lib/Folder/FolderManager.php b/lib/Folder/FolderManager.php index 068a27e28..4ff3b78dc 100644 --- a/lib/Folder/FolderManager.php +++ b/lib/Folder/FolderManager.php @@ -94,7 +94,7 @@ private function getGroupFolderRootId(int $rootStorageId): int { private function joinQueryWithFileCache(IQueryBuilder $query, int $rootStorageId): void { $query->leftJoin('f', 'filecache', 'c', $query->expr()->andX( // concat with empty string to work around missing cast to string - $query->expr()->eq('c.name', $query->func()->concat('f.folder_id', $query->expr()->literal(""))), + $query->expr()->eq('c.name', $query->func()->concat('f.folder_id', $query->expr()->literal(''))), $query->expr()->eq('c.parent', $query->createNamedParameter($this->getGroupFolderRootId($rootStorageId))) )); } @@ -191,7 +191,7 @@ private function getAllFolderMappings(): array { $query = $this->connection->getQueryBuilder(); $query->select('*') - ->from('group_folders_manage', 'g'); + ->from('group_folders_manage', 'g'); $rows = $query->executeQuery()->fetchAll(); @@ -324,7 +324,7 @@ private function getAllApplicable(): array { $query = $queryHelper?->getQueryBuilder() ?? $this->connection->getQueryBuilder(); $query->select('g.folder_id', 'g.group_id', 'g.circle_id', 'g.permissions') - ->from('group_folders_groups', 'g'); + ->from('group_folders_groups', 'g'); $queryHelper?->addCircleDetails('g', 'circle_id'); @@ -627,15 +627,15 @@ public function getFoldersFromCircleMemberships(IUser $user, int $rootStorageId 'c.encrypted', 'c.parent' ) - ->selectAlias('a.permissions', 'group_permissions') - ->selectAlias('c.permissions', 'permissions') - ->from('group_folders', 'f') - ->innerJoin( - 'f', - 'group_folders_groups', - 'a', - $query->expr()->eq('f.folder_id', 'a.folder_id') - ); + ->selectAlias('a.permissions', 'group_permissions') + ->selectAlias('c.permissions', 'permissions') + ->from('group_folders', 'f') + ->innerJoin( + 'f', + 'group_folders_groups', + 'a', + $query->expr()->eq('f.folder_id', 'a.folder_id') + ); $queryHelper->limitToInheritedMembers('a', 'circle_id', $federatedUser); $this->joinQueryWithFileCache($query, $rootStorageId); @@ -704,17 +704,17 @@ public function removeApplicableGroup(int $folderId, string $groupId): void { $query = $this->connection->getQueryBuilder(); $query->delete('group_folders_groups') - ->where( - $query->expr()->eq( - 'folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT) - ) - ) - ->andWhere( - $query->expr()->orX( - $query->expr()->eq('group_id', $query->createNamedParameter($groupId)), - $query->expr()->eq('circle_id', $query->createNamedParameter($groupId)) - ) - ); + ->where( + $query->expr()->eq( + 'folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT) + ) + ) + ->andWhere( + $query->expr()->orX( + $query->expr()->eq('group_id', $query->createNamedParameter($groupId)), + $query->expr()->eq('circle_id', $query->createNamedParameter($groupId)) + ) + ); $query->executeStatement(); $this->eventDispatcher->dispatchTyped(new CriticalActionPerformedEvent('The group "%s" was revoked access to the groupfolder with id %d', [$groupId, $folderId])); @@ -728,18 +728,18 @@ public function setGroupPermissions(int $folderId, string $groupId, int $permiss $query = $this->connection->getQueryBuilder(); $query->update('group_folders_groups') - ->set('permissions', $query->createNamedParameter($permissions, IQueryBuilder::PARAM_INT)) - ->where( - $query->expr()->eq( - 'folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT) - ) - ) - ->andWhere( - $query->expr()->orX( - $query->expr()->eq('group_id', $query->createNamedParameter($groupId)), - $query->expr()->eq('circle_id', $query->createNamedParameter($groupId)) - ) - ); + ->set('permissions', $query->createNamedParameter($permissions, IQueryBuilder::PARAM_INT)) + ->where( + $query->expr()->eq( + 'folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT) + ) + ) + ->andWhere( + $query->expr()->orX( + $query->expr()->eq('group_id', $query->createNamedParameter($groupId)), + $query->expr()->eq('circle_id', $query->createNamedParameter($groupId)) + ) + ); $query->executeStatement(); @@ -766,7 +766,7 @@ public function setManageACL(int $folderId, string $type, string $id, bool $mana } $query->executeStatement(); - $action = $manageAcl ? "given" : "revoked"; + $action = $manageAcl ? 'given' : 'revoked'; $this->eventDispatcher->dispatchTyped(new CriticalActionPerformedEvent('The %s "%s" was %s acl management rights to the groupfolder with id %d', [$type, $id, $action, $folderId])); } @@ -841,7 +841,7 @@ public function deleteCircle(string $circleId): void { $query = $this->connection->getQueryBuilder(); $query->delete('group_folders_groups') - ->where($query->expr()->eq('circle_id', $query->createNamedParameter($circleId))); + ->where($query->expr()->eq('circle_id', $query->createNamedParameter($circleId))); $query->executeStatement(); $query = $this->connection->getQueryBuilder(); @@ -870,7 +870,7 @@ public function setFolderACL(int $folderId, bool $acl): void { $query->executeStatement(); } - $action = $acl ? "enabled" : "disabled"; + $action = $acl ? 'enabled' : 'disabled'; $this->eventDispatcher->dispatchTyped(new CriticalActionPerformedEvent('Advanced permissions for the groupfolder with id %d was %s', [$folderId, $action])); } @@ -965,7 +965,7 @@ public function isCirclesAvailable(?CirclesManager &$circlesManager = null): boo try { /** @var CirclesManager $circlesManager */ $circlesManager = Server::get(CirclesManager::class); - } catch (ContainerExceptionInterface | AutoloadNotAllowedException $e) { + } catch (ContainerExceptionInterface|AutoloadNotAllowedException $e) { return false; } diff --git a/lib/Migration/Version16000Date20230821085801.php b/lib/Migration/Version16000Date20230821085801.php index 83364d9ba..d3803e996 100644 --- a/lib/Migration/Version16000Date20230821085801.php +++ b/lib/Migration/Version16000Date20230821085801.php @@ -29,11 +29,11 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); - if ($schema->hasTable("group_folders_versions")) { + if ($schema->hasTable('group_folders_versions')) { return null; } - $table = $schema->createTable("group_folders_versions"); + $table = $schema->createTable('group_folders_versions'); $table->addColumn('id', Types::BIGINT, [ 'autoincrement' => true, 'notnull' => true, diff --git a/lib/Mount/MountProvider.php b/lib/Mount/MountProvider.php index 16a406140..eaff0a700 100644 --- a/lib/Mount/MountProvider.php +++ b/lib/Mount/MountProvider.php @@ -89,12 +89,12 @@ public function __construct( private function getRootStorageId(): int { if ($this->rootStorageId === null) { - $cached = $this->cache->get("root_storage_id"); + $cached = $this->cache->get('root_storage_id'); if ($cached !== null) { $this->rootStorageId = $cached; } else { $id = $this->getRootFolder()->getStorage()->getCache()->getNumericStorageId(); - $this->cache->set("root_storage_id", $id); + $this->cache->set('root_storage_id', $id); $this->rootStorageId = $id; } } diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 2c3913714..5b80c1438 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -55,8 +55,8 @@ public function getSection(): string { /** * @return int whether the form should be rather on the top or bottom of - * the admin section. The forms are arranged in ascending order of the - * priority values. It is required to return a value between 0 and 100. + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. * * E.g.: 70 */ diff --git a/lib/Settings/Section.php b/lib/Settings/Section.php index 313e8480c..126a6aa66 100644 --- a/lib/Settings/Section.php +++ b/lib/Settings/Section.php @@ -39,8 +39,8 @@ public function getName() { /** * @return int whether the form should be rather on the top or bottom of - * the settings navigation. The sections are arranged in ascending order of - * the priority values. It is required to return a value between 0 and 99. + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. * * E.g.: 70 */ diff --git a/lib/Trash/TrashBackend.php b/lib/Trash/TrashBackend.php index 12d17c101..961ca6046 100644 --- a/lib/Trash/TrashBackend.php +++ b/lib/Trash/TrashBackend.php @@ -208,7 +208,7 @@ public function moveToTrash(IStorage $storage, string $internalPath): bool { $trashStorage->getCache()->moveFromCache($unJailedStorage->getCache(), $unJailedInternalPath, $targetInternalPath); } } else { - throw new \Exception("Failed to move groupfolder item to trash"); + throw new \Exception('Failed to move groupfolder item to trash'); } return true; } else { @@ -441,9 +441,9 @@ public function expire(Expiration $expiration): array { $node = $nodes[$nodeName]; if ($expiration->isExpired($groupTrashItem['deleted_time'], $folder['quota'] > 0 && $folder['quota'] < ($folder['size'] + $sizeInTrash))) { - $this->logger->debug("expiring " . $node->getPath()); + $this->logger->debug('expiring ' . $node->getPath()); if ($node->getStorage()->unlink($node->getInternalPath()) === false) { - $this->logger->error("Failed to remove item from trashbin: " . $node->getPath()); + $this->logger->error('Failed to remove item from trashbin: ' . $node->getPath()); continue; } // only count up after checking if removal is possible diff --git a/lib/Versions/GroupVersionsMapper.php b/lib/Versions/GroupVersionsMapper.php index 991b93667..d9329ad26 100644 --- a/lib/Versions/GroupVersionsMapper.php +++ b/lib/Versions/GroupVersionsMapper.php @@ -27,8 +27,8 @@ public function findAllVersionsForFileId(int $fileId): array { $qb = $this->db->getQueryBuilder(); $qb->select('*') - ->from($this->getTableName()) - ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))); + ->from($this->getTableName()) + ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))); return $this->findEntities($qb); } @@ -40,10 +40,10 @@ public function findCurrentVersionForFileId(int $fileId): GroupVersionEntity { $qb = $this->db->getQueryBuilder(); $qb->select('*') - ->from($this->getTableName()) - ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) - ->orderBy('timestamp', 'DESC') - ->setMaxResults(1); + ->from($this->getTableName()) + ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) + ->orderBy('timestamp', 'DESC') + ->setMaxResults(1); return $this->findEntity($qb); } @@ -52,9 +52,9 @@ public function findVersionForFileId(int $fileId, int $timestamp): GroupVersionE $qb = $this->db->getQueryBuilder(); $qb->select('*') - ->from($this->getTableName()) - ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) - ->andWhere($qb->expr()->eq('timestamp', $qb->createNamedParameter($timestamp))); + ->from($this->getTableName()) + ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) + ->andWhere($qb->expr()->eq('timestamp', $qb->createNamedParameter($timestamp))); return $this->findEntity($qb); } @@ -63,7 +63,7 @@ public function deleteAllVersionsForFileId(int $fileId): int { $qb = $this->db->getQueryBuilder(); return $qb->delete($this->getTableName()) - ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) - ->executeStatement(); + ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId))) + ->executeStatement(); } } diff --git a/lib/Versions/VersionsBackend.php b/lib/Versions/VersionsBackend.php index b8e99f988..555eb33e2 100644 --- a/lib/Versions/VersionsBackend.php +++ b/lib/Versions/VersionsBackend.php @@ -61,7 +61,7 @@ private function getFolderIdForFile(FileInfo $file): int { /** @var GroupFolderStorage $storage */ return $storage->getFolderId(); } else { - throw new \LogicException("groupfolder version backend called for non groupfolder file"); + throw new \LogicException('groupfolder version backend called for non groupfolder file'); } } @@ -363,7 +363,7 @@ private function currentUserHasPermissions(FileInfo $sourceFile, int $permission $currentUserId = $this->userSession->getUser()?->getUID(); if ($currentUserId === null) { - throw new NotFoundException("No user logged in"); + throw new NotFoundException('No user logged in'); } return ($sourceFile->getPermissions() & $permissions) === $permissions; diff --git a/tests/Trash/TrashBackendTest.php b/tests/Trash/TrashBackendTest.php index addaa2062..c902728fb 100644 --- a/tests/Trash/TrashBackendTest.php +++ b/tests/Trash/TrashBackendTest.php @@ -45,16 +45,16 @@ class TrashBackendTest extends TestCase { public function setUp(): void { parent::setUp(); - $this->folderName = "gf"; - $this->managerUser = $this->createUser("manager", "test"); - $this->normalUser = $this->createUser("normal", "test"); + $this->folderName = 'gf'; + $this->managerUser = $this->createUser('manager', 'test'); + $this->normalUser = $this->createUser('normal', 'test'); /** @var Database $groupBackend */ $groupBackend = \OC::$server->get(Database::class); - $groupBackend->createGroup("gf_manager"); - $groupBackend->createGroup("gf_normal"); - $groupBackend->addToGroup("manager", "gf_manager"); - $groupBackend->addToGroup("normal", "gf_normal"); + $groupBackend->createGroup('gf_manager'); + $groupBackend->createGroup('gf_normal'); + $groupBackend->addToGroup('manager', 'gf_manager'); + $groupBackend->addToGroup('normal', 'gf_normal'); $this->trashBackend = \OC::$server->get(TrashBackend::class); $this->folderManager = \OC::$server->get(FolderManager::class); @@ -64,16 +64,16 @@ public function setUp(): void { $this->ruleManager = \OC::$server->get(RuleManager::class); $this->folderId = $this->folderManager->createFolder($this->folderName); - $this->folderManager->addApplicableGroup($this->folderId, "gf_manager"); - $this->folderManager->addApplicableGroup($this->folderId, "gf_normal"); + $this->folderManager->addApplicableGroup($this->folderId, 'gf_manager'); + $this->folderManager->addApplicableGroup($this->folderId, 'gf_normal'); $this->folderManager->setFolderACL($this->folderId, true); - $this->folderManager->setManageACL($this->folderId, "user", "manager", true); + $this->folderManager->setManageACL($this->folderId, 'user', 'manager', true); /** @var IRootFolder $rootFolder */ $rootFolder = \OC::$server->get(IRootFolder::class); - $this->managerUserFolder = $rootFolder->getUserFolder("manager"); - $this->normalUserFolder = $rootFolder->getUserFolder("normal"); + $this->managerUserFolder = $rootFolder->getUserFolder('manager'); + $this->normalUserFolder = $rootFolder->getUserFolder('normal'); $this->assertTrue($this->managerUserFolder->nodeExists($this->folderName)); $this->assertTrue($this->normalUserFolder->nodeExists($this->folderName)); @@ -98,7 +98,7 @@ protected function tearDown(): void { private function createNoReadRule(string $userId, int $fileId): Rule { return new Rule( - new UserMapping("user", $userId), + new UserMapping('user', $userId), $fileId, 1, 0, @@ -108,8 +108,8 @@ private function createNoReadRule(string $userId, int $fileId): Rule { public function testHideTrashItemAcl() { $this->loginAsUser('manager'); - $restricted = $this->managerUserFolder->newFile("{$this->folderName}/restricted.txt", "content"); - $this->ruleManager->saveRule($this->createNoReadRule("normal", $restricted->getId())); + $restricted = $this->managerUserFolder->newFile("{$this->folderName}/restricted.txt", 'content'); + $this->ruleManager->saveRule($this->createNoReadRule('normal', $restricted->getId())); $this->assertTrue($this->managerUserFolder->nodeExists("{$this->folderName}/restricted.txt")); $this->assertFalse($this->normalUserFolder->nodeExists("{$this->folderName}/restricted.txt")); @@ -130,9 +130,9 @@ public function testHideItemInDeletedFolderAcl() { $this->loginAsUser('manager'); $folder = $this->managerUserFolder->newFolder("{$this->folderName}/folder"); - $folder->newFile("file.txt", "content1"); - $restrictedChild = $folder->newFile("restricted.txt", "content2"); - $this->ruleManager->saveRule($this->createNoReadRule("normal", $restrictedChild->getId())); + $folder->newFile('file.txt', 'content1'); + $restrictedChild = $folder->newFile('restricted.txt', 'content2'); + $this->ruleManager->saveRule($this->createNoReadRule('normal', $restrictedChild->getId())); $this->assertTrue($this->managerUserFolder->nodeExists("{$this->folderName}/folder/restricted.txt")); $this->assertFalse($this->normalUserFolder->nodeExists("{$this->folderName}/folder/restricted.txt")); @@ -159,8 +159,8 @@ public function testHideDeletedTrashItemInDeletedFolderAcl() { $this->loginAsUser('manager'); $folder = $this->managerUserFolder->newFolder("{$this->folderName}/restricted"); - $child = $folder->newFile("file.txt", "content1"); - $this->ruleManager->saveRule($this->createNoReadRule("normal", $folder->getId())); + $child = $folder->newFile('file.txt', 'content1'); + $this->ruleManager->saveRule($this->createNoReadRule('normal', $folder->getId())); $this->assertTrue($this->managerUserFolder->nodeExists("{$this->folderName}/restricted/file.txt")); $this->assertFalse($this->normalUserFolder->nodeExists("{$this->folderName}/restricted/file.txt")); @@ -187,9 +187,9 @@ public function testHideDeletedTrashItemInDeletedParentFolderAcl() { $this->loginAsUser('manager'); $parent = $this->managerUserFolder->newFolder("{$this->folderName}/parent"); - $folder = $parent->newFolder("restricted"); - $child = $folder->newFile("file.txt", "content1"); - $this->ruleManager->saveRule($this->createNoReadRule("normal", $folder->getId())); + $folder = $parent->newFolder('restricted'); + $child = $folder->newFile('file.txt', 'content1'); + $this->ruleManager->saveRule($this->createNoReadRule('normal', $folder->getId())); $this->assertTrue($this->managerUserFolder->nodeExists("{$this->folderName}/parent/restricted/file.txt")); $this->assertFalse($this->normalUserFolder->nodeExists("{$this->folderName}/parent/restricted/file.txt"));