Neos\Flow\Tests\Unit\Security\Authorization\FilterFirewallTest::configuredFiltersAreCreatedCorrectlyUsingNewSettingsFormat PHP Метод

configuredFiltersAreCreatedCorrectlyUsingNewSettingsFormat() публичный Метод

    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.');
    }