public function testConstructor()
 {
     $responseType = array('code', 'token');
     $scope = array('openid', 'email');
     $state = 'abc';
     $extraParams = array('nonce' => 'bar');
     $clientInfo = $this->createClientInfoMock();
     $request = new Request($clientInfo, $responseType, $scope, $state, $extraParams);
     $this->assertSame($clientInfo, $request->getClientInfo());
     $this->assertSame($responseType, $request->getResponseType());
     $this->assertSame($scope, $request->getScope());
     $this->assertSame($state, $request->getState());
     $params = $request->toArray();
     $this->assertArrayHasKey('nonce', $params);
     $this->assertSame('bar', $params['nonce']);
 }
 /**
  * Generates an URI representing the authorization request.
  *
  * @param Request $request
  * @return string
  */
 public function createAuthorizationRequestUri(Request $request)
 {
     /* @var $clientInfo \InoOicClient\Client\ClientInfo */
     $clientInfo = $request->getClientInfo();
     if (!$clientInfo) {
         throw new \RuntimeException('Missing client info in request');
     }
     if (($endpointUri = $clientInfo->getAuthorizationEndpoint()) === null) {
         throw new Exception\MissingEndpointException('No endpoint specified');
     }
     $uri = new Uri($endpointUri);
     $params = array(Param::CLIENT_ID => $clientInfo->getClientId(), Param::REDIRECT_URI => $clientInfo->getRedirectUri(), Param::RESPONSE_TYPE => $this->arrayToSpaceDelimited($request->getResponseType()), Param::SCOPE => $this->arrayToSpaceDelimited($request->getScope()), Param::STATE => $request->getState());
     foreach ($params as $name => $value) {
         if (in_array($name, $this->requiredParams) && empty($value)) {
             throw new Exception\MissingFieldException($name);
         }
     }
     $uri->setQuery($params);
     return $uri->toString();
 }