/** * @param object $entity * @param string $resultType * @param string $scope * @return NavigationResult */ protected function getResult($entity, $resultType, $scope = EntityPaginationManager::VIEW_SCOPE) { $result = new NavigationResult(); if ($this->storage->isEnvironmentValid() && $this->storage->isEntityInStorage($entity, $scope)) { $entityName = ClassUtils::getClass($entity); if ($this->isIdentifierMatched($entity, $resultType, $scope)) { do { $identifier = $this->getProcessedIdentifier($entity, $resultType, $scope); if (!$identifier) { break; } $navigationEntity = $this->doctrineHelper->getEntity($entityName, $identifier); $permission = EntityPaginationManager::getPermission($scope); if (!$navigationEntity) { $this->storage->unsetIdentifier($identifier, $entity, $scope); $result->setAvailable(false); } elseif (!$this->securityFacade->isGranted($permission, $navigationEntity)) { $this->storage->unsetIdentifier($identifier, $entity, $scope); $result->setAccessible(false); } } while (!$navigationEntity || !$this->securityFacade->isGranted($permission, $navigationEntity)); $result->setId($identifier); } } return $result; }
/** * @param array $source * @param array $expected * * @dataProvider unsetIdentifierDataProvider */ public function testUnsetIdentifier(array $source, array $expected) { $this->setStorage($source['storage_data']); $this->storage->unsetIdentifier($source['identifier'], $this->entity, $source['scope']); $result = $this->storage->getEntityIds($this->entity, $source['scope']); $this->assertSame($expected, $result); }