diff --git a/src/ParameterParser.php b/src/ParameterParser.php index 25a4a5d..183ba8e 100644 --- a/src/ParameterParser.php +++ b/src/ParameterParser.php @@ -225,7 +225,7 @@ protected function formatString($value, array $parameter) } break; default: - throw new \Exception('unrecognized string format'); + // this is an open-type property break; } diff --git a/tests/unit/src/ParameterParserTest.php b/tests/unit/src/ParameterParserTest.php index 3231331..64bfe82 100644 --- a/tests/unit/src/ParameterParserTest.php +++ b/tests/unit/src/ParameterParserTest.php @@ -576,65 +576,127 @@ public function testCastTypeHandlesNumber() public function testCastTypeHandlesString() { $value = 1337; + $parameter = [ + 'type' => 'string', + ]; $reflectedParameterParser = new ReflectionClass(ParameterParser::class); $reflectedCastType = $reflectedParameterParser->getMethod('castType'); $reflectedCastType->setAccessible(true); - $parameterParser = new ParameterParser; + $parameterParser = $this->getMockBuilder(ParameterParser::class) + ->setMethods([ 'formatString' ]) + ->getMock(); + $parameterParser->expects($this->once()) + ->method('formatString') + ->with($value, $parameter) + ->will($this->returnArgument(0)); + $result = $reflectedCastType->invokeArgs( $parameterParser, [ $value, - [ 'type' => 'string' ], + $parameter, ] ); $this->assertSame((string) $value, $result); } - public function testCastTypeHandlesDate() + /** + * @expectedException Exception + * @expectedExceptionMessage invalid parameter type value + */ + public function testCastTypeBailsOnUnknownType() + { + $reflectedParameterParser = new ReflectionClass(ParameterParser::class); + $reflectedCastType = $reflectedParameterParser->getMethod('castType'); + $reflectedCastType->setAccessible(true); + + $parameterParser = new ParameterParser; + $reflectedCastType->invokeArgs( + $parameterParser, + [ + '', + [ 'type' => 'invalid' ], + ] + ); + } + + public function testFormatStringIgnoresFormatlessParameter() + { + $value = 'some string'; + + $reflectedParameterParser = new ReflectionClass(ParameterParser::class); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); + + $parameterParser = new ParameterParser; + $result = $reflectedFormatString->invokeArgs( + $parameterParser, + [ + $value, + [] + ] + ); + + $this->assertSame($value, $result); + } + + public function testFormatStringHandlesDate() { $value = '2016-10-18'; $expectedValue = DateTime::createFromFormat('Y-m-d', $value); $reflectedParameterParser = new ReflectionClass(ParameterParser::class); - $reflectedCastType = $reflectedParameterParser->getMethod('castType'); - $reflectedCastType->setAccessible(true); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); $parameterParser = new ParameterParser; - $result = $reflectedCastType->invokeArgs( + $result = $reflectedFormatString->invokeArgs( $parameterParser, [ $value, - [ - 'type' => 'string', - 'format' => 'date', - ], + [ 'format' => 'date' ], ] ); $this->assertEquals($expectedValue, $result); } - public function testCastTypeHandlesDateTime() + public function testFormatStringHandlesDateFailures() + { + $value = 'invalid date'; + + $reflectedParameterParser = new ReflectionClass(ParameterParser::class); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); + + $parameterParser = new ParameterParser; + $reflectedFormatString->invokeArgs( + $parameterParser, + [ + $value, + [ 'format' => 'date' ], + ] + ); + } + + public function testFormatStringHandlesDateTime() { $value = '2016-10-18T+07:00'; $expectedValue = new DateTime($value); $reflectedParameterParser = new ReflectionClass(ParameterParser::class); - $reflectedCastType = $reflectedParameterParser->getMethod('castType'); - $reflectedCastType->setAccessible(true); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); $parameterParser = new ParameterParser; - $result = $reflectedCastType->invokeArgs( + $result = $reflectedFormatString->invokeArgs( $parameterParser, [ $value, - [ - 'type' => 'string', - 'format' => 'date-time', - ], + [ 'format' => 'date-time' ], ] ); @@ -644,44 +706,41 @@ public function testCastTypeHandlesDateTime() /** * @expectedException AvalancheDevelopment\SwaggerRouterMiddleware\Exception\BadRequest */ - public function testCastTypeHandlesDateTimeFailures() + public function testFormatStringHandlesDateTimeFailures() { $value = 'invalid date'; $reflectedParameterParser = new ReflectionClass(ParameterParser::class); - $reflectedCastType = $reflectedParameterParser->getMethod('castType'); - $reflectedCastType->setAccessible(true); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); $parameterParser = new ParameterParser; - $reflectedCastType->invokeArgs( + $reflectedFormatString->invokeArgs( $parameterParser, [ $value, - [ - 'type' => 'string', - 'format' => 'date-time', - ], + [ 'format' => 'date-time' ], ] ); } - /** - * @expectedException Exception - * @expectedExceptionMessage invalid parameter type value - */ - public function testCastTypeBailsOnUnknownType() + public function testFormatStringIgnoresOnUnmatchedFormat() { + $value = 'some value'; + $reflectedParameterParser = new ReflectionClass(ParameterParser::class); - $reflectedCastType = $reflectedParameterParser->getMethod('castType'); - $reflectedCastType->setAccessible(true); + $reflectedFormatString = $reflectedParameterParser->getMethod('formatString'); + $reflectedFormatString->setAccessible(true); $parameterParser = new ParameterParser; - $reflectedCastType->invokeArgs( + $result = $reflectedFormatString->invokeArgs( $parameterParser, [ - '', - [ 'type' => 'invalid' ], + $value, + [ 'format' => 'random' ], ] ); + + $this->assertSame($value, $result); } }