/** * @param Request $request * @param array $operationDefinition * * @throws MalformedContentException * @throws UnsupportedException */ public function coerceRequest(Request $request, array $operationDefinition) { $content = $this->contentDecoder->decodeContent($request, $operationDefinition); if (!isset($operationDefinition['parameters'])) { return; } $paramBagMapping = ['query' => 'query', 'path' => 'attributes', 'header' => 'headers']; foreach ($operationDefinition['parameters'] as $paramDefinition) { $paramName = $paramDefinition['name']; if ($paramDefinition['in'] === 'body') { if ($content !== null) { $request->attributes->set($paramName, $content); } continue; } if (!isset($paramBagMapping[$paramDefinition['in']])) { throw new UnsupportedException("Unsupported parameter 'in' value in definition '{$paramDefinition['in']}'"); } $paramBagName = $paramBagMapping[$paramDefinition['in']]; if (!$request->{$paramBagName}->has($paramName)) { continue; } $request->attributes->set($paramName, ParameterCoercer::coerceParameter($paramDefinition, $request->{$paramBagName}->get($paramName))); } }
/** * @test */ public function willConstructDate() { $coercer = new RequestCoercer($this->contentDecoderMock); $request = new Request(['foo' => "2015-01-01"], [], [], [], [], []); $operationDefinition = ['parameters' => [['name' => 'foo', 'in' => 'query', 'type' => 'string', 'format' => 'date']]]; $coercer->coerceRequest($request, $operationDefinition); $expected = ParameterCoercer::coerceParameter($operationDefinition['parameters'][0], "2015-01-01"); // Sanity check $this->assertInstanceOf('DateTime', $expected); $this->assertEquals($expected, $request->attributes->get('foo')); }
/** * @dataProvider unsupportedPrimitiveConversionProvider * @test * * @expectedException \KleijnWeb\SwaggerBundle\Exception\UnsupportedException * * @param array $spec * @param mixed $value */ public function willThrowUnsupportedExceptionInPredefinedCases($spec, $value) { $spec = array_merge(['type' => 'string', 'name' => $value], $spec); ParameterCoercer::coerceParameter($spec, $value); }