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