/**
  * Populate customer model
  *
  * @param Quote $quote
  * @return void
  */
 public function populateCustomerInfo(QuoteEntity $quote)
 {
     $customer = $quote->getCustomer();
     if (!$customer->getId()) {
         $customer = $this->accountManagement->createAccountWithPasswordHash($customer, $quote->getPasswordHash());
         $quote->setCustomer($customer);
     } else {
         $this->customerRepository->save($customer);
     }
     if (!$quote->getBillingAddress()->getId() && $customer->getDefaultBilling()) {
         $quote->getBillingAddress()->importCustomerAddressData($this->customerAddressRepository->getById($customer->getDefaultBilling()));
         $quote->getBillingAddress()->setCustomerAddressId($customer->getDefaultBilling());
     }
     if (!$quote->getShippingAddress()->getSameAsBilling() && !$quote->getBillingAddress()->getId() && $customer->getDefaultShipping()) {
         $quote->getShippingAddress()->importCustomerAddressData($this->customerAddressRepository->getById($customer->getDefaultShipping()));
         $quote->getShippingAddress()->setCustomerAddressId($customer->getDefaultShipping());
     }
 }
 /**
  * @magentoDbIsolation enabled
  */
 public function testCreateNewCustomerWithPasswordHash()
 {
     $email = '*****@*****.**';
     $storeId = 1;
     $firstname = 'Tester';
     $lastname = 'McTest';
     $groupId = 1;
     $newCustomerEntity = $this->customerFactory->create()->setStoreId($storeId)->setEmail($email)->setFirstname($firstname)->setLastname($lastname)->setGroupId($groupId);
     /** @var \Magento\Framework\Math\Random $mathRandom */
     $password = $this->objectManager->get('Magento\\Framework\\Math\\Random')->getRandomString(AccountManagement::MIN_PASSWORD_LENGTH);
     /** @var \Magento\Framework\Encryption\EncryptorInterface $encryptor */
     $encryptor = $this->objectManager->get('Magento\\Framework\\Encryption\\EncryptorInterface');
     $passwordHash = $encryptor->getHash($password, true);
     $savedCustomer = $this->accountManagement->createAccountWithPasswordHash($newCustomerEntity, $passwordHash);
     $this->assertNotNull($savedCustomer->getId());
     $this->assertEquals($email, $savedCustomer->getEmail());
     $this->assertEquals($storeId, $savedCustomer->getStoreId());
     $this->assertEquals($firstname, $savedCustomer->getFirstname());
     $this->assertEquals($lastname, $savedCustomer->getLastname());
     $this->assertEquals($groupId, $savedCustomer->getGroupId());
     $this->assertTrue(!$savedCustomer->getSuffix());
     $this->assertEquals($savedCustomer->getId(), $this->accountManagement->authenticate($email, $password)->getId());
 }