added some validation

This commit is contained in:
Fabien Potencier 2018-04-04 08:24:09 +02:00
parent c11a8eb92e
commit 6fc1cc3ec3
2 changed files with 34 additions and 6 deletions

View File

@ -25,8 +25,20 @@ class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy
private $exclusions;
private $requestStack;
/**
* @param array $exclusions each exclusion must have a "code" and "urls" keys
*/
public function __construct(RequestStack $requestStack, array $exclusions, $actionLevel)
{
foreach ($exclusions as $exclusion) {
if (!array_key_exists('code', $exclusion)) {
throw new \LogicException(sprintf('An exclusion must have a "code" key'));
}
if (!array_key_exists('urls', $exclusion)) {
throw new \LogicException(sprintf('An exclusion must have a "urls" key'));
}
}
parent::__construct($actionLevel);
$this->requestStack = $requestStack;
@ -49,8 +61,8 @@ class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy
}
$urlBlacklist = null;
if (count($exclusion['url'])) {
return !preg_match('{('.implode('|', $exclusion['url']).')}i', $request->getPathInfo());
if (count($exclusion['urls'])) {
return !preg_match('{('.implode('|', $exclusion['urls']).')}i', $request->getPathInfo());
}
return false;

View File

@ -20,6 +20,22 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
class HttpCodeActivationStrategyTest extends TestCase
{
/**
* @expectedException \LogicException
*/
public function testExclusionsWithoutCode()
{
new HttpCodeActivationStrategy(new RequestStack(), array(array('urls' => array())), Logger::WARNING);
}
/**
* @expectedException \LogicException
*/
public function testExclusionsWithoutUrls()
{
new HttpCodeActivationStrategy(new RequestStack(), array(array('code' => 404)), Logger::WARNING);
}
/**
* @dataProvider isActivatedProvider
*/
@ -31,10 +47,10 @@ class HttpCodeActivationStrategyTest extends TestCase
$strategy = new HttpCodeActivationStrategy(
$requestStack,
array(
array('code' => 403, 'url' => array()),
array('code' => 404, 'url' => array()),
array('code' => 405, 'url' => array()),
array('code' => 400, 'url' => array('^/400/a', '^/400/b')),
array('code' => 403, 'urls' => array()),
array('code' => 404, 'urls' => array()),
array('code' => 405, 'urls' => array()),
array('code' => 400, 'urls' => array('^/400/a', '^/400/b')),
),
Logger::WARNING
);