public function configuredFiltersAreCreatedCorrectlyUsingNewSettingsFormat()
{
$resolveRequestPatternClassCallback = function () {
$args = func_get_args();
if ($args[0] === 'Uri') {
return 'mockPatternURI';
} elseif ($args[0] === 'TYPO3\\TestRequestPattern') {
return 'mockPatternTest';
}
};
$resolveInterceptorClassCallback = function () {
$args = func_get_args();
if ($args[0] === 'AccessGrant') {
return 'mockInterceptorAccessGrant';
} elseif ($args[0] === 'TYPO3\\TestSecurityInterceptor') {
return 'mockInterceptorTest';
}
};
$mockRequestPattern1 = $this->createMock(Uri::class);
$mockRequestPattern2 = $this->createMock(Uri::class);
$getObjectCallback = function () use(&$mockRequestPattern1, &$mockRequestPattern2) {
$args = func_get_args();
if ($args[0] === 'mockPatternURI') {
$this->assertSame(['uriPattern' => '/some/url/.*'], $args[1]);
return $mockRequestPattern1;
} elseif ($args[0] === 'mockPatternTest') {
$this->assertSame(['uriPattern' => '/some/url/blocked.*'], $args[1]);
return $mockRequestPattern2;
} elseif ($args[0] === 'mockInterceptorAccessGrant') {
return 'AccessGrant';
} elseif ($args[0] === 'mockInterceptorTest') {
return 'InterceptorTest';
} elseif ($args[0] === RequestFilter::class) {
if ($args[1] == $mockRequestPattern1 && $args[2] === 'AccessGrant') {
return 'filter1';
}
if ($args[1] == $mockRequestPattern2 && $args[2] === 'InterceptorTest') {
return 'filter2';
}
}
};
$mockObjectManager = $this->createMock(ObjectManagerInterface::class);
$mockObjectManager->expects($this->any())->method('get')->will($this->returnCallback($getObjectCallback));
$mockPatternResolver = $this->getMockBuilder(RequestPatternResolver::class)->disableOriginalConstructor()->getMock();
$mockPatternResolver->expects($this->any())->method('resolveRequestPatternClass')->will($this->returnCallback($resolveRequestPatternClassCallback));
$mockInterceptorResolver = $this->getMockBuilder(InterceptorResolver::class)->disableOriginalConstructor()->getMock();
$mockInterceptorResolver->expects($this->any())->method('resolveInterceptorClass')->will($this->returnCallback($resolveInterceptorClassCallback));
$settings = ['Some.Package:AllowedUris' => ['pattern' => 'Uri', 'patternOptions' => ['uriPattern' => '/some/url/.*'], 'interceptor' => 'AccessGrant'], 'Some.Package:TestPattern' => ['pattern' => 'TYPO3\\TestRequestPattern', 'patternOptions' => ['uriPattern' => '/some/url/blocked.*'], 'interceptor' => 'TYPO3\\TestSecurityInterceptor']];
$firewall = $this->getAccessibleMock(FilterFirewall::class, ['blockIllegalRequests'], [], '', false);
$firewall->_set('objectManager', $mockObjectManager);
$firewall->_set('requestPatternResolver', $mockPatternResolver);
$firewall->_set('interceptorResolver', $mockInterceptorResolver);
$firewall->_call('buildFiltersFromSettings', $settings);
$result = $firewall->_get('filters');
$this->assertEquals(['filter1', 'filter2'], $result, 'The filters were not built correctly.');
}