/** * @param \Magento\Framework\Event\Observer $observer * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function execute(\Magento\Framework\Event\Observer $observer) { try { $this->checkoutSession->loadCustomerQuote(); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addError($e->getMessage()); } catch (\Exception $e) { $this->messageManager->addException($e, __('Load customer quote error')); } }
/** * Tes merging of customer data into initialized quote object. * * Conditions: * 1. Quote without customer data is set to checkout session * 2. Customer without associated quote is set to checkout session * * Expected result: * Quote which is set to checkout session should contain customer data * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoAppIsolation enabled */ public function testLoadCustomerQuoteCustomerWithoutQuote() { $quote = $this->_checkoutSession->getQuote(); $this->assertEmpty($quote->getCustomerId(), 'Precondition failed: Customer data must not be set to quote'); $this->assertEmpty($quote->getCustomerEmail(), 'Precondition failed: Customer data must not be set to quote'); $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */ $customerRepository = $objectManager->create('Magento\\Customer\\Api\\CustomerRepositoryInterface'); $customer = $customerRepository->getById(1); /** @var \Magento\Customer\Model\Session $customerSession */ $customerSession = Bootstrap::getObjectManager()->get('Magento\\Customer\\Model\\Session'); $customerSession->setCustomerDataObject($customer); /** Ensure that customer data is still unavailable before SUT invocation */ $quote = $this->_checkoutSession->getQuote(); $this->assertEmpty($quote->getCustomerEmail(), 'Precondition failed: Customer data must not be set to quote'); /** Execute SUT */ $this->_checkoutSession->loadCustomerQuote(); $quote = $this->_checkoutSession->getQuote(); $this->_validateCustomerDataInQuote($quote); }
/** * Tes merging of customer data into initialized quote object. * * Conditions: * 1. Quote without customer data is set to checkout session * 2. Customer without associated quote is set to checkout session * * Expected result: * Quote which is set to checkout session should contain customer data * * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoAppIsolation enabled */ public function testLoadCustomerQuoteCustomerWithoutQuote() { /** Preconditions */ $customerIdFromFixture = 1; $quote = $this->_checkoutSession->getQuote(); $this->assertEmpty($quote->getCustomerId(), 'Precondition failed: Customer data must not be set to quote'); $this->assertEmpty($quote->getCustomerEmail(), 'Precondition failed: Customer data must not be set to quote'); /** @var \Magento\Customer\Service\V1\CustomerAccountServiceInterface $customerService */ $customerService = Bootstrap::getObjectManager()->get('Magento\\Customer\\Service\\V1\\CustomerAccountServiceInterface'); $customer = $customerService->getCustomer($customerIdFromFixture); /** @var \Magento\Customer\Model\Session $customerSession */ $customerSession = Bootstrap::getObjectManager()->get('Magento\\Customer\\Model\\Session'); $customerSession->setCustomerDataObject($customer); /** Ensure that customer data is still unavailable before SUT invocation */ $quote = $this->_checkoutSession->getQuote(); $this->assertEmpty($quote->getCustomerEmail(), 'Precondition failed: Customer data must not be set to quote'); /** Execute SUT */ $this->_checkoutSession->loadCustomerQuote(); $quote = $this->_checkoutSession->getQuote(); $this->_validateCustomerDataInQuote($quote); }
/** * Check if quote is virtual * * @return bool */ protected function isQuoteVirtual() { return $this->checkoutSession->loadCustomerQuote()->getQuote()->getIsVirtual(); }