public function testApply($properties, array $filterParameters, array $expected)
{
$request = Request::create('/api/dummies', 'GET', $filterParameters);
$requestStack = new RequestStack();
$requestStack->push($request);
$queryBuilder = $this->repository->createQueryBuilder('o');
$filter = new SearchFilter($this->managerRegistry, $requestStack, $this->iriConverter, $this->propertyAccessor, null, $properties);
$filter->apply($queryBuilder, new QueryNameGenerator(), $this->resourceClass, 'op');
$actualDql = $queryBuilder->getQuery()->getDQL();
$expectedDql = $expected['dql'];
$this->assertEquals($expectedDql, $actualDql);
if (!empty($expected['parameters'])) {
foreach ($expected['parameters'] as $parameterName => $expectedParameterValue) {
$queryParameter = $queryBuilder->getQuery()->getParameter($parameterName);
$this->assertNotNull($queryParameter, sprintf('Expected query parameter "%s" to be set', $parameterName));
$actualParameterValue = $queryParameter->getValue();
$this->assertEquals($expectedParameterValue, $actualParameterValue, sprintf('Expected query parameter "%s" to be "%s"', $parameterName, var_export($expectedParameterValue, true)));
}
}
}