/** @test */
 public function itValidateARequest()
 {
     $expectedViolations = [new ConstraintViolation('id', 'String value found, but an integer is required', 'type', 'body'), new ConstraintViolation('X-Required-Header', 'The property X-Required-Header is required', 'required', 'header'), new ConstraintViolation('limit', 'String value found, but an integer is required', 'type', 'query')];
     $headersSchema = $this->toObject(['type' => 'object', 'required' => ['X-Required-Header'], 'properties' => ['X-Required-Header' => ['type' => 'string']]]);
     $bodySchema = $this->toObject(['type' => 'object', 'properties' => ['id' => ['type' => 'integer', 'format' => 'int32']]]);
     $queryParametersSchema = $this->toObject(['type' => 'object', 'properties' => ['limit' => ['type' => 'integer']]]);
     $uri = $this->prophesize(UriInterface::class);
     $uri->getQuery()->willreturn('limit=invalid');
     $request = $this->prophesize(RequestInterface::class);
     $request->getMethod()->willReturn('POST');
     $request->getUri()->willReturn($uri);
     $request->getBody()->willReturn('{"id": "invalid"}');
     $request->getHeaderLine('Content-Type')->willReturn('application/json');
     $request->getHeaders()->willReturn([]);
     $definition = $this->prophesize(RequestDefinition::class);
     $definition->getContentTypes()->willReturn(['application/json']);
     $definition->hasBodySchema()->willReturn(true);
     $definition->getBodySchema()->willReturn($bodySchema);
     $definition->hasHeadersSchema()->willReturn(true);
     $definition->getHeadersSchema()->willReturn($headersSchema);
     $definition->hasQueryParametersSchema()->willReturn(true);
     $definition->getQueryParametersSchema()->willReturn($queryParametersSchema);
     $this->messageValidator->validateRequest($request->reveal(), $definition->reveal());
     assertThat($this->messageValidator->hasViolations(), isTrue());
     assertThat($this->messageValidator->getViolations(), containsOnlyInstancesOf(ConstraintViolation::class));
     assertThat($this->messageValidator->getViolations(), equalTo($expectedViolations));
 }
Beispiel #2
0
 /**
  * Validate a Request message
  * If the config option "withRequestValidation" is set to FALSE it won't validate the Request
  *
  * @param RequestInterface $request
  * @param RequestDefinition $definition
  *
  * @throws ConstraintViolations
  */
 private function validateRequest(RequestInterface $request, RequestDefinition $definition)
 {
     if ($this->config['validateRequest'] === false) {
         return;
     }
     $this->messageValidator->validateRequest($request, $definition);
     if ($this->messageValidator->hasViolations()) {
         throw new RequestViolations($this->messageValidator->getViolations());
     }
 }