Neos\Flow\Tests\Unit\Security\ContextTest::getRolesTakesInheritanceOfRolesIntoAccount PHP Метод

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

    public function getRolesTakesInheritanceOfRolesIntoAccount()
    {
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $everybodyRole */
        $everybodyRole = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Neos.Flow:Everybody']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $authenticatedUserRole */
        $authenticatedUserRole = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Neos.Flow:AuthenticatedUser']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole1 */
        $testRole1 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole1']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole2 */
        $testRole2 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole2']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole3 */
        $testRole3 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole3']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole4 */
        $testRole4 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole4']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole5 */
        $testRole5 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole5']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole6 */
        $testRole6 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole6']);
        /** @var Role|\PHPUnit_Framework_MockObject_MockObject $testRole7 */
        $testRole7 = $this->getAccessibleMock(Policy\Role::class, ['dummy'], ['Acme.Demo:TestRole7']);
        $mockAuthenticationManager = $this->createMock(AuthenticationManagerInterface::class);
        $mockAuthenticationManager->expects($this->atLeastOnce())->method('isAuthenticated')->will($this->returnValue(true));
        $mockPolicyService = $this->getAccessibleMock(Policy\PolicyService::class, ['getRole']);
        $mockPolicyService->expects($this->atLeastOnce())->method('getRole')->will($this->returnCallback(function ($roleIdentifier) use($everybodyRole, $authenticatedUserRole, $testRole1, $testRole2, $testRole3, $testRole4, $testRole5, $testRole6, $testRole7) {
            switch ($roleIdentifier) {
                case 'Neos.Flow:Everybody':
                    return $everybodyRole;
                case 'Neos.Flow:AuthenticatedUser':
                    return $authenticatedUserRole;
                case 'Acme.Demo:TestRole1':
                    return $testRole1;
                case 'Acme.Demo:TestRole2':
                    return $testRole2;
                case 'Acme.Demo:TestRole3':
                    return $testRole3;
                case 'Acme.Demo:TestRole4':
                    return $testRole4;
                case 'Acme.Demo:TestRole5':
                    return $testRole5;
                case 'Acme.Demo:TestRole6':
                    return $testRole6;
                case 'Acme.Demo:TestRole7':
                    return $testRole7;
            }
        }));
        // Set parents
        $testRole1->setParentRoles([$testRole2, $testRole3]);
        $testRole2->setParentRoles([$testRole4, $testRole5]);
        $testRole3->setParentRoles([$testRole6, $testRole7]);
        /** @var Account|\PHPUnit_Framework_MockObject_MockObject $account */
        $account = $this->getAccessibleMock(Account::class, ['dummy']);
        $this->inject($account, 'policyService', $mockPolicyService);
        $account->setRoles([$testRole1]);
        /** @var TokenInterface|\PHPUnit_Framework_MockObject_MockObject $mockToken */
        $mockToken = $this->createMock(TokenInterface::class);
        $mockToken->expects($this->atLeastOnce())->method('isAuthenticated')->will($this->returnValue(true));
        $mockToken->expects($this->atLeastOnce())->method('getAccount')->will($this->returnValue($account));
        /** @var Context|\PHPUnit_Framework_MockObject_MockObject $securityContext */
        $securityContext = $this->getAccessibleMock(Context::class, ['initialize', 'getAccount']);
        $securityContext->expects($this->any())->method('getAccount')->will($this->returnValue($account));
        $this->inject($securityContext, 'activeTokens', [$mockToken]);
        $this->inject($securityContext, 'policyService', $mockPolicyService);
        $this->inject($securityContext, 'authenticationManager', $mockAuthenticationManager);
        $expectedResult = ['Acme.Demo:TestRole1' => $testRole1, 'Acme.Demo:TestRole2' => $testRole2, 'Acme.Demo:TestRole3' => $testRole3, 'Acme.Demo:TestRole4' => $testRole4, 'Acme.Demo:TestRole5' => $testRole5, 'Acme.Demo:TestRole6' => $testRole6, 'Acme.Demo:TestRole7' => $testRole7, 'Neos.Flow:Everybody' => $everybodyRole, 'Neos.Flow:AuthenticatedUser' => $authenticatedUserRole];
        $result = $securityContext->getRoles();
        ksort($expectedResult);
        ksort($result);
        $this->assertSame(array_keys($expectedResult), array_keys($result));
    }
ContextTest