/**
  * Filters query parameter bag
  *
  * @param string       $filterName
  * @param ParameterBag $bag
  *
  * @return ParameterBag
  */
 public function filter($filterName, ParameterBag $bag)
 {
     $expectedParams = $this->filters[$filterName];
     // Given parameters
     foreach ($bag->all() as $name => $value) {
         if (!isset($expectedParams[$name])) {
             throw new \InvalidArgumentException(sprintf('Unknow parameter "%s"', $name));
         }
         $options = $expectedParams[$name];
         if (0 < count($options['roles']) && !$this->authorizationChecker->isGranted($options['roles'])) {
             throw new AccessDeniedException(sprintf('User has not the required role to use "%s" parameter', $name));
         }
         $this->validator->validate($name, $options, $value);
         $bag->set($name, $this->caster->cast($options, $value));
     }
     // Expected parameters
     foreach ($expectedParams as $name => $options) {
         Validator::checkMissingParameter($name, $options, $bag);
         if (!$bag->has($name) && isset($options['default'])) {
             $bag->set($name, $this->caster->getDefaultValue($options));
         }
     }
     return $bag;
 }
 /**
  * Tests "checkMissingParameter" without missing parameter
  */
 public function test_checkMissingParameter_success()
 {
     $parameterBag = new ParameterBag(['one' => 1, 'two' => 2]);
     \Gl3n\HttpQueryStringFilterBundle\Validator::checkMissingParameter('two', ['required' => true], $parameterBag);
     $this->boolean(true)->isTrue();
 }