/**
  * @param Order $order
  * @param array $accountAddresses
  * @param array $accountUserAddresses
  * @param array $expected
  *
  * @dataProvider groupedAddressDataProvider
  */
 public function testGetGroupedAddresses(Order $order, array $accountAddresses = [], array $accountUserAddresses = [], array $expected = [])
 {
     $this->provider->expects($this->any())->method('getAccountAddresses')->willReturn($accountAddresses);
     $this->provider->expects($this->any())->method('getAccountUserAddresses')->willReturn($accountUserAddresses);
     $this->manager->addEntity('au', 'OroB2B\\Bundle\\AccountBundle\\Entity\\AccountUserAddress');
     $this->manager->addEntity('a', 'OroB2B\\Bundle\\AccountBundle\\Entity\\AccountAddress');
     $this->assertEquals($expected, $this->manager->getGroupedAddresses($order, AddressType::TYPE_BILLING));
 }
 /**
  * @dataProvider permissionsDataProvider
  * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  *
  * @param string $userClass
  * @param string $addressType
  * @param array|null $isGranted
  * @param bool $hasAccountAddresses
  * @param bool $hasAccountUserAddresses
  * @param bool $hasEntity
  * @param bool $isAddressGranted
  * @param bool $isAccountAddressGranted
  * @param bool $isAccountUserAddressGranted
  */
 public function testIsAddressGranted($userClass, $addressType, $isGranted, $hasAccountAddresses, $hasAccountUserAddresses, $hasEntity, $isAddressGranted, $isAccountAddressGranted, $isAccountUserAddressGranted)
 {
     $this->orderAddressProvider->expects($this->any())->method('getAccountAddresses')->willReturn($hasAccountAddresses);
     $this->orderAddressProvider->expects($this->any())->method('getAccountUserAddresses')->willReturn($hasAccountUserAddresses);
     $this->securityFacade->expects($this->any())->method('getLoggedUser')->willReturn(new $userClass());
     $this->securityFacade->expects($this->any())->method('isGranted')->with($this->isType('string'))->will($this->returnValueMap((array) $isGranted));
     $order = null;
     $account = null;
     $accountUser = null;
     if ($hasEntity) {
         $account = new Account();
         $accountUser = new AccountUser();
     }
     $order = (new Order())->setAccount($account)->setAccountUser($accountUser);
     $this->assertEquals($isAddressGranted, $this->provider->isAddressGranted($order, $addressType));
     $this->assertEquals($isAccountAddressGranted, $this->provider->isAccountAddressGranted($addressType, $account));
     $this->assertEquals($isAccountUserAddressGranted, $this->provider->isAccountUserAddressGranted($addressType, $accountUser));
 }
 /**
  * @dataProvider accountUserAddressPermissions
  * @param string $type
  * @param array $expectedCalledPermissions
  * @param string $calledRepositoryMethod
  * @param array $addresses
  * @param object $loggedUser
  */
 public function testGetAccountUserAddresses($type, array $expectedCalledPermissions, $calledRepositoryMethod, array $addresses, $loggedUser)
 {
     $this->securityFacade->expects($this->any())->method('getLoggedUser')->will($this->returnValue($loggedUser));
     $accountUser = new AccountUser();
     $permissionsValueMap = [];
     foreach ($expectedCalledPermissions as $permission => $decision) {
         $permissionsValueMap[] = [$permission, null, $decision];
     }
     $this->securityFacade->expects($this->exactly(count($expectedCalledPermissions)))->method('isGranted')->will($this->returnValueMap($permissionsValueMap));
     $repository = $this->assertAccountUserAddressRepositoryCall();
     if ($calledRepositoryMethod) {
         $repository->expects($this->once())->method($calledRepositoryMethod)->with($accountUser, $type, $this->aclHelper)->will($this->returnValue($addresses));
     } else {
         $repository->expects($this->never())->method($this->anything());
     }
     $this->assertEquals($addresses, $this->provider->getAccountUserAddresses($accountUser, $type));
     // cache
     $this->assertEquals($addresses, $this->provider->getAccountUserAddresses($accountUser, $type));
 }
 /**
  * @param Order $order
  * @param string $type
  * @return array
  */
 public function getGroupedAddresses(Order $order, $type)
 {
     $addresses = [];
     $account = $order->getAccount();
     if ($account) {
         $accountAddresses = $this->orderAddressProvider->getAccountAddresses($account, $type);
         foreach ($accountAddresses as $accountAddress) {
             $addresses[self::ACCOUNT_LABEL][$this->getIdentifier($accountAddress)] = $accountAddress;
         }
     }
     $accountUser = $order->getAccountUser();
     if ($accountUser) {
         $accountUserAddresses = $this->orderAddressProvider->getAccountUserAddresses($accountUser, $type);
         if ($accountUserAddresses) {
             foreach ($accountUserAddresses as $accountUserAddress) {
                 $addresses[self::ACCOUNT_USER_LABEL][$this->getIdentifier($accountUserAddress)] = $accountUserAddress;
             }
         }
     }
     return $addresses;
 }
 /**
  * @param string $type
  * @return bool
  */
 public function isManualEditGranted($type)
 {
     OrderAddressProvider::assertType($type);
     $permission = sprintf(self::MANUAL_EDIT_ACTION, $type);
     return $this->securityFacade->isGranted($this->getPermission($permission));
 }