/**
  * @param string $type
  * @param Account $account
  *
  * @return bool
  */
 public function isAccountAddressGranted($type, Account $account = null)
 {
     if ($this->isManualEditGranted($type)) {
         return true;
     }
     $hasPermissions = $this->securityFacade->isGranted($this->getClassPermission('VIEW', $this->accountAddressClass));
     if (!$hasPermissions) {
         return false;
     }
     if (!$account) {
         return false;
     }
     return (bool) $this->orderAddressProvider->getAccountAddresses($account, $type);
 }
 /**
  * @dataProvider accountAddressPermissions
  * @param string $type
  * @param string $expectedPermission
  * @param object $loggedUser
  */
 public function testGetAccountAddressesGrantedView($type, $expectedPermission, $loggedUser)
 {
     $this->securityFacade->expects($this->any())->method('getLoggedUser')->will($this->returnValue($loggedUser));
     $account = new Account();
     $addresses = [new AccountAddress()];
     $this->securityFacade->expects($this->exactly(2))->method('isGranted')->will($this->returnValueMap([[$expectedPermission, null, false], ['VIEW;entity:' . $this->accountAddressClass, null, true]]));
     $repository = $this->assertAccountAddressRepositoryCall();
     $repository->expects($this->never())->method('getAddressesByType');
     $repository->expects($this->once())->method('getDefaultAddressesByType')->with($account, $type, $this->aclHelper)->will($this->returnValue($addresses));
     $this->assertEquals($addresses, $this->provider->getAccountAddresses($account, $type));
     // cache
     $this->assertEquals($addresses, $this->provider->getAccountAddresses($account, $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;
 }