eZ\Publish\Core\Repository\Tests\Service\Integration\RoleBase::testCreateRoleWithPolicies PHP Method

testCreateRoleWithPolicies() public method

Test creating a role with policies.
    public function testCreateRoleWithPolicies()
    {
        $roleService = $this->repository->getRoleService();
        $limitation1 = new Limitation\ContentTypeLimitation();
        $limitation1->limitationValues = array('1', '3', '13');
        $limitation2 = new Limitation\SectionLimitation();
        $limitation2->limitationValues = array('2', '3');
        $limitation3 = new Limitation\OwnerLimitation();
        $limitation3->limitationValues = array('1', '2');
        $limitation4 = new Limitation\UserGroupLimitation();
        $limitation4->limitationValues = array('1');
        $policyCreateStruct1 = $roleService->newPolicyCreateStruct('content', 'read');
        $policyCreateStruct1->addLimitation($limitation1);
        $policyCreateStruct1->addLimitation($limitation2);
        $policyCreateStruct2 = $roleService->newPolicyCreateStruct('content', 'edit');
        $policyCreateStruct2->addLimitation($limitation3);
        $policyCreateStruct2->addLimitation($limitation4);
        $roleCreateStruct = $roleService->newRoleCreateStruct('ultimate_permissions');
        // @todo uncomment when support for multilingual names and descriptions is added EZP-24776
        // $roleCreateStruct->mainLanguageCode = 'eng-GB';
        // $roleCreateStruct->names = array( 'eng-GB' => 'Ultimate permissions' );
        // $roleCreateStruct->descriptions = array( 'eng-GB' => 'This is a role with ultimate permissions' );
        $roleCreateStruct->addPolicy($policyCreateStruct1);
        $roleCreateStruct->addPolicy($policyCreateStruct2);
        $createdRole = $roleService->createRole($roleCreateStruct);
        self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Role', $createdRole);
        self::assertGreaterThan(0, $createdRole->id);
        /* @todo uncomment when support for multilingual names and descriptions is added EZP-24776
                self::assertEquals(
                    array(
                        'eng-GB' => $roleCreateStruct->names['eng-GB']
                    ),
                    $createdRole->getNames()
                );
        
                self::assertEquals(
                    array(
                        'eng-GB' => $roleCreateStruct->descriptions['eng-GB']
                    ),
                    $createdRole->getDescriptions()
                );
                */
        $this->assertPropertiesCorrect(array('identifier' => $roleCreateStruct->identifier), $createdRole);
        self::assertCount(2, $createdRole->getPolicies());
        foreach ($createdRole->getPolicies() as $policy) {
            self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Policy', $policy);
            self::assertGreaterThan(0, $policy->id);
            self::assertEquals($createdRole->id, $policy->roleId);
            self::assertCount(2, $policy->getLimitations());
            foreach ($policy->getLimitations() as $limitation) {
                self::assertInstanceOf('\\eZ\\Publish\\API\\Repository\\Values\\User\\Limitation', $limitation);
                if ($policy->module == 'content' && $policy->function == 'read') {
                    switch ($limitation->getIdentifier()) {
                        case Limitation::CONTENTTYPE:
                            self::assertEquals($limitation1->limitationValues, $limitation->limitationValues);
                            break;
                        case Limitation::SECTION:
                            self::assertEquals($limitation2->limitationValues, $limitation->limitationValues);
                            break;
                        default:
                            self::fail('Created role contains limitations not defined with create struct');
                    }
                } elseif ($policy->module == 'content' && $policy->function == 'edit') {
                    switch ($limitation->getIdentifier()) {
                        case Limitation::OWNER:
                            self::assertEquals($limitation3->limitationValues, $limitation->limitationValues);
                            break;
                        case Limitation::USERGROUP:
                            self::assertEquals($limitation4->limitationValues, $limitation->limitationValues);
                            break;
                        default:
                            self::fail('Created role contains limitations not defined with create struct');
                    }
                } else {
                    self::fail('Created role contains policy not defined with create struct');
                }
            }
        }
    }