public function testRole()
 {
     $name = 'test role#$%';
     $role = new AccountUserRole();
     $account = new Account();
     $organization = new Organization();
     $this->assertEmpty($role->getId());
     $this->assertEmpty($role->getLabel());
     $this->assertEmpty($role->getRole());
     $this->assertEmpty($role->getOrganization());
     $this->assertEmpty($role->getAccount());
     $role->setAccount($account);
     $role->setOrganization($organization);
     $this->assertEquals($organization, $role->getOrganization());
     $this->assertEquals($account, $role->getAccount());
     $role->setLabel($name);
     $this->assertEquals($name, $role->getLabel());
     $this->assertEquals(AccountUserRole::PREFIX_ROLE, $role->getPrefix());
     $role->setRole($name);
     $this->assertStringStartsWith(AccountUserRole::PREFIX_ROLE . 'TEST_ROLE_', $role->getRole());
     $this->assertEquals($name, (string) $role);
 }
 /**
  * @param AccountUserRole $role
  * @param Account|null    $newAccount
  * @param AccountUser[]   $appendUsers
  * @param AccountUser[]   $removedUsers
  * @param AccountUser[]   $assignedUsers
  * @param AccountUser[]   $expectedUsersWithRole
  * @param AccountUser[]   $expectedUsersWithoutRole
  * @param bool            $changeAccountProcessed
  * @dataProvider processWithAccountProvider
  */
 public function testProcessWithAccount(AccountUserRole $role, $newAccount, array $appendUsers, array $removedUsers, array $assignedUsers, array $expectedUsersWithRole, array $expectedUsersWithoutRole, $changeAccountProcessed = true)
 {
     // Array of persisted users
     /** @var AccountUser[] $persistedUsers */
     $persistedUsers = [];
     $request = new Request();
     $request->setMethod('POST');
     $appendForm = $this->getMock('Symfony\\Component\\Form\\FormInterface');
     $appendForm->expects($this->once())->method('getData')->willReturn($appendUsers);
     $removeForm = $this->getMock('Symfony\\Component\\Form\\FormInterface');
     $removeForm->expects($this->once())->method('getData')->willReturn($removedUsers);
     $form = $this->getMock('Symfony\\Component\\Form\\FormInterface');
     $form->expects($this->once())->method('submit')->with($request)->willReturnCallback(function () use($role, $newAccount) {
         $role->setAccount($newAccount);
         $role->setOrganization($newAccount->getOrganization());
     });
     $form->expects($this->once())->method('isValid')->willReturn(true);
     $form->expects($this->any())->method('get')->willReturnMap([['appendUsers', $appendForm], ['removeUsers', $removeForm]]);
     $this->formFactory->expects($this->once())->method('create')->willReturn($form);
     $objectManager = $this->getMock('Doctrine\\Common\\Persistence\\ObjectManager');
     $objectManager->expects($this->any())->method('persist')->willReturnCallback(function ($entity) use(&$persistedUsers) {
         if ($entity instanceof AccountUser) {
             $persistedUsers[spl_object_hash($entity)] = $entity;
         }
     });
     $this->managerRegistry->expects($this->any())->method('getManagerForClass')->with(get_class($role))->willReturn($objectManager);
     $this->roleRepository->expects($changeAccountProcessed ? $this->once() : $this->never())->method('getAssignedUsers')->with($role)->willReturn($assignedUsers);
     /** @var \PHPUnit_Framework_MockObject_MockObject|AccountUserRoleUpdateHandler $handler */
     $handler = $this->getMockBuilder('\\OroB2B\\Bundle\\AccountBundle\\Form\\Handler\\AccountUserRoleUpdateHandler')->setMethods(['processPrivileges'])->setConstructorArgs([$this->formFactory, $this->privilegeConfig])->getMock();
     $this->setRequirementsForHandler($handler);
     $handler->setRequest($request);
     $handler->createForm($role);
     $handler->process($role);
     foreach ($expectedUsersWithRole as $expectedUser) {
         $this->assertEquals($persistedUsers[spl_object_hash($expectedUser)]->getRole($role->getRole()), $role);
     }
     foreach ($expectedUsersWithoutRole as $expectedUser) {
         $this->assertEquals($persistedUsers[spl_object_hash($expectedUser)]->getRole($role->getRole()), null);
     }
 }
 /**
  * @param ObjectManager $manager
  * @param string $roleLabel
  */
 protected function loadRoleWithoutAccount(ObjectManager $manager, $roleLabel)
 {
     $entity = new AccountUserRole();
     $entity->setLabel($roleLabel);
     $entity->setOrganization($this->getDefaultOrganization($manager));
     $this->setReference($entity->getLabel(), $entity);
     $manager->persist($entity);
 }