Skip to content

Commit

Permalink
Adds test around string formatter
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobemerick committed Oct 19, 2016
1 parent a0d1b00 commit 5e0875b
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src/ParameterParser.php
Expand Up @@ -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;
}

Expand Down
131 changes: 95 additions & 36 deletions tests/unit/src/ParameterParserTest.php
Expand Up @@ -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' ],
]
);

Expand All @@ -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);
}
}

0 comments on commit 5e0875b

Please sign in to comment.