From f3000de555ca0f10a415de8a066feace7fcdab4c Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@magento.com>
Date: Wed, 22 Nov 2017 18:19:28 +0200
Subject: [PATCH] MAGETWO-83343: Customer shopping cart not accessible in admin
 order

---
 .../Magento/Sales/Model/AdminOrder/Create.php |  3 +-
 .../Test/Unit/Model/AdminOrder/CreateTest.php | 52 ++++++++++++++++++-
 2 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Sales/Model/AdminOrder/Create.php b/app/code/Magento/Sales/Model/AdminOrder/Create.php
index 69f4d19e4dd..c111a050ac3 100644
--- a/app/code/Magento/Sales/Model/AdminOrder/Create.php
+++ b/app/code/Magento/Sales/Model/AdminOrder/Create.php
@@ -715,9 +715,10 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
         $this->_cart = $this->quoteFactory->create();
 
         $customerId = (int)$this->getSession()->getCustomerId();
+        $storeId = (int)$this->getSession()->getStoreId();
         if ($customerId) {
             try {
-                $this->_cart = $this->quoteRepository->getForCustomer($customerId);
+                $this->_cart = $this->quoteRepository->getForCustomer($customerId, [$storeId]);
             } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
                 $this->_cart->setStore($this->getSession()->getStore());
                 $customerData = $this->customerRepository->getById($customerId);
diff --git a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php
index b284a529d2a..fc2341b02e9 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php
@@ -26,6 +26,7 @@ use Magento\Quote\Model\Quote\Item;
 use Magento\Quote\Model\Quote\Item\Updater;
 use Magento\Sales\Model\AdminOrder\Create;
 use Magento\Sales\Model\AdminOrder\Product;
+use Magento\Quote\Model\QuoteFactory;
 use PHPUnit_Framework_MockObject_MockObject as MockObject;
 
 /**
@@ -41,6 +42,16 @@ class CreateTest extends \PHPUnit\Framework\TestCase
      */
     private $adminOrderCreate;
 
+    /**
+     * @var \Magento\Quote\Api\CartRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $quoteRepository;
+
+    /**
+     * @var \Magento\Quote\Model\QuoteFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $quoteFactory;
+
     /**
      * @var SessionQuote|MockObject
      */
@@ -78,12 +89,22 @@ class CreateTest extends \PHPUnit\Framework\TestCase
 
     protected function setUp()
     {
-        $this->sessionQuote = $this->createMock(SessionQuote::class);
         $this->formFactory = $this->createPartialMock(FormFactory::class, ['create']);
+        $this->quoteFactory = $this->createPartialMock(QuoteFactory::class, ['create']);
         $this->customerFactory = $this->createPartialMock(CustomerInterfaceFactory::class, ['create']);
 
         $this->itemUpdater = $this->createMock(Updater::class);
 
+        $this->quoteRepository = $this->getMockBuilder(\Magento\Quote\Api\CartRepositoryInterface::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getForCustomer'])
+            ->getMockForAbstractClass();
+
+        $this->sessionQuote = $this->getMockBuilder(\Magento\Backend\Model\Session\Quote::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getQuote', 'getStoreId', 'getCustomerId'])
+            ->getMock();
+
         $this->customerMapper = $this->getMockBuilder(Mapper::class)
             ->setMethods(['toFlatArray'])
             ->disableOriginalConstructor()
@@ -105,6 +126,8 @@ class CreateTest extends \PHPUnit\Framework\TestCase
                 'quoteItemUpdater' => $this->itemUpdater,
                 'customerMapper' => $this->customerMapper,
                 'dataObjectHelper' => $this->dataObjectHelper,
+                'quoteRepository' => $this->quoteRepository,
+                'quoteFactory' => $this->quoteFactory,
             ]
         );
     }
@@ -266,4 +289,31 @@ class CreateTest extends \PHPUnit\Framework\TestCase
         $object = $this->adminOrderCreate->applyCoupon($couponCode);
         self::assertEquals($this->adminOrderCreate, $object);
     }
+
+    public function testGetCustomerCart()
+    {
+        $storeId = 2;
+        $customerId = 2;
+        $cartResult = [
+            'cart' => true
+        ];
+
+        $this->quoteFactory->expects($this->once())
+            ->method('create');
+
+        $this->sessionQuote->expects($this->once())
+            ->method('getStoreId')
+            ->willReturn($storeId);
+
+        $this->sessionQuote->expects($this->once())
+            ->method('getCustomerId')
+            ->willReturn($customerId);
+
+        $this->quoteRepository->expects($this->once())
+            ->method('getForCustomer')
+            ->with($customerId, [$storeId])
+            ->willReturn($cartResult);
+
+        $this->assertEquals($cartResult, $this->adminOrderCreate->getCustomerCart());
+    }
 }
-- 
GitLab