Scalr\Tests\WebTestCase::getRequest PHP Метод

getRequest() защищенный Метод

Prepares request
protected getRequest ( $requestType = Scalr_UI_Request::REQUEST_TYPE_UI, $requestClass = null, striing $uri, array $parameters = [], string $method = 'GET', array $server = [], array $files = [] ) : Scalr_UI_Request
$uri striing A request uri
$parameters array optional Request parameters
$method string optional HTTP Request method
$server array optional Additional server options
$files array optional Uploaded files array
Результат Scalr_UI_Request Returns array which represents returned json object or raw body content in the case if the response is not a json.
    protected function getRequest($requestType = Scalr_UI_Request::REQUEST_TYPE_UI, $requestClass = null, $uri, array $parameters = array(), $method = 'GET', array $server = array(), array $files = array())
    {
        $aUrl = parse_url($uri);
        if (!empty($aUrl['query'])) {
            foreach (explode('&', $aUrl['query']) as $v) {
                $v = array_map('html_entity_decode', explode('=', $v));
                $parameters[$v[0]] = isset($v[1]) ? $v[1] : null;
            }
        }
        $parametersConvert = array();
        foreach ($parameters as $key => $value) {
            $parametersConvert[str_replace('.', '_', $key)] = $value;
        }
        Scalr_UI_Response::getInstance()->resetResponse();
        $testEnv = $this->getUser()->isScalrAdmin() ? null : $this->_testEnvId;
        $requestClass = $requestClass ?: 'Scalr_UI_Request';
        $instance = $requestClass::initializeInstance($requestType, array(), $server, $parametersConvert, $files, $this->_testUserId, $testEnv);
        return $instance;
    }

Usage Example

Пример #1
0
 /**
  * {@inheritdoc}
  * @see Scalr\Tests.WebTestCase::getRequest()
  */
 protected function getRequest($requestType, $requestClass, $uri, array $parameters = array(), $method = 'GET', array $server = array(), array $files = array())
 {
     $mock = $this->getMock('Scalr_UI_Request', array('restrictAccess', 'isAllowed'), array(), '', false);
     $me = $this;
     $user = $this->getUser();
     //Sets an ID of the environment.
     $user->getPermissions()->setEnvironmentId($this->getEnvironment()->id);
     $mock = parent::getRequest($requestType, $mock, $uri, $parameters, $method, $server, $files);
     $lfGetMessage = function ($prefix, $resourceId, $permissionId = null) {
         $rm = Acl::getResourcesMnemonic();
         return sprintf($prefix . '("%s", %s)', isset($rm[$resourceId]) ? $rm[$resourceId] : $resourceId, $permissionId ? '"' . $permissionId . '"' : 'null');
     };
     $mock->expects($this->any())->method('restrictAccess')->will($this->returnCallback(function ($resourceId, $permissionId = null) use($mock, $me, $lfGetMessage) {
         if (is_string($resourceId)) {
             $sName = 'Scalr\\Acl\\Acl::RESOURCE_' . strtoupper($resourceId);
             if (defined($sName)) {
                 $resourceId = constant($sName);
             } else {
                 throw new \InvalidArgumentException(sprintf('Cannot find ACL resource %s by specified symbolic name %s.', $sName, $resourceId));
             }
         }
         if (!$mock->isAllowed($resourceId, $permissionId)) {
             throw new Exception\AclAccessDeniedException($lfGetMessage('request->restrictAccess', $resourceId, $permissionId));
         }
         if (($catch = $me->getCatchOnlyPermission()) === null || $catch[0] == $resourceId && (isset($catch[1]) ? $catch[1] : null) == $permissionId) {
             throw new Exception\AclAccessGrantedException($lfGetMessage('request->restrictAccess', $resourceId, $permissionId));
         }
     }));
     $mock->expects($this->any())->method('isAllowed')->will($this->returnCallback(function ($resourceId, $permissionId = null) use($mock, $me, $lfGetMessage) {
         //Owner is allowed for everything
         if ($mock->getUser()->getType() == \Scalr_Account_User::TYPE_ACCOUNT_OWNER) {
             $ret = true;
         } else {
             if (is_string($resourceId)) {
                 $sName = 'Scalr\\Acl\\Acl::RESOURCE_' . strtoupper($resourceId);
                 if (defined($sName)) {
                     $resourceId = constant($sName);
                 } else {
                     throw new \InvalidArgumentException(sprintf('Cannot find ACL resource %s by specified symbolic name %s.', $sName, $resourceId));
                 }
             }
             $ret = (bool) $mock->getAclRoles()->isAllowed($resourceId, $permissionId);
         }
         if (($catch = $me->getCatchOnlyPermission()) === null || $catch[0] == $resourceId && (isset($catch[1]) ? $catch[1] : null) == $permissionId) {
             if ($ret) {
                 throw new Exception\AclAccessGrantedException($lfGetMessage('request->isAllowed', $resourceId, $permissionId));
             } else {
                 throw new Exception\AclAccessDeniedException($lfGetMessage('request->isAllowed', $resourceId, $permissionId));
             }
         }
         return $ret;
     }));
     if (($catch = $this->getCatchOnlyPermission()) !== null && count($catch) > 1 && $catch[0] == Acl::RESOURCE_FARMS && $catch[1] == Acl::PERM_FARMS_NOT_OWNED_FARMS) {
         //Mocking the user object of the request to catch hasAccessFarm calls
         /* @var $usermock \Scalr_Account_User */
         $usermock = $this->getMock('Scalr_Account_User', null);
         $usermock->loadById($this->getUser()->id);
         //Creates permissions mock
         $permissions = $this->getMock('Scalr_Permissions', array('hasAccessFarm'), array($usermock));
         //Injects permissions object to user mock.
         $refPerm = new \ReflectionProperty('Scalr_Account_User', 'permissions');
         $refPerm->setAccessible(true);
         $refPerm->setValue($usermock, $permissions);
         //Preparing stub for the method
         $permissions->expects($this->any())->method('hasAccessFarm')->will($this->returnCallback(function ($dbFarm) use($user) {
             $ret = $user->getPermissions()->hasAccessFarm($dbFarm);
             if ($ret) {
                 throw new Exception\AclAccessGrantedException(sprintf('user->permissions->hasAccessFarm(%d)', $dbFarm->ID));
             } else {
                 throw new Exception\AclAccessDeniedException(sprintf('user->permissions->hasAccessFarm(%d)', $dbFarm->ID));
             }
         }));
         //Injecting user mock to request mock.
         $refUser = new \ReflectionProperty('Scalr_UI_Request', 'user');
         $refUser->setAccessible(true);
         $refUser->setValue($mock, $usermock);
     }
     return $mock;
 }