From eecf8501a30ff52677bd5611e7bec9323ca7d9f2 Mon Sep 17 00:00:00 2001 From: Oleksandr Karpenko <okarpenko@ebay.com> Date: Tue, 5 Apr 2016 16:03:43 +0300 Subject: [PATCH] MAGETWO-50996: Some Customer data was removed after creating offline order --- .../Magento/Sales/Model/AdminOrder/Create.php | 3 ++- .../Test/Unit/Model/AdminOrder/CreateTest.php | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Sales/Model/AdminOrder/Create.php b/app/code/Magento/Sales/Model/AdminOrder/Create.php index 3449bb7ad10..0bf781111fa 100644 --- a/app/code/Magento/Sales/Model/AdminOrder/Create.php +++ b/app/code/Magento/Sales/Model/AdminOrder/Create.php @@ -1560,11 +1560,13 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\ { $customer = $this->getQuote()->getCustomer(); $form = $this->_createCustomerForm($customer); + $customerData = $this->customerMapper->toFlatArray($customer); // emulate request $request = $form->prepareRequest($accountData); $data = $form->extractData($request); $data = $form->restoreData($data); + $data = array_merge($customerData, array_filter($data)); $customer = $this->customerFactory->create(); $this->dataObjectHelper->populateWithArray( $customer, @@ -1574,7 +1576,6 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\ $this->getQuote()->updateCustomerData($customer); $data = []; - $customerData = $this->customerMapper->toFlatArray($customer); foreach ($form->getAttributes() as $attribute) { $code = sprintf('customer_%s', $attribute->getAttributeCode()); $data[$code] = isset($customerData[$attribute->getAttributeCode()]) 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 6c02813d2cd..677e7f48af3 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php @@ -76,6 +76,11 @@ class CreateTest extends \PHPUnit_Framework_TestCase */ protected $accountManagementMock; + /** + * @var \Magento\Framework\Api\DataObjectHelper|\PHPUnit_Framework_MockObject_MockObject + */ + protected $dataObjectHelper; + /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -171,6 +176,9 @@ class CreateTest extends \PHPUnit_Framework_TestCase '', false ); + $this->dataObjectHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper') + ->disableOriginalConstructor() + ->getMock(); $objectManagerHelper = new ObjectManagerHelper($this); $this->adminOrderCreate = $objectManagerHelper->getObject( @@ -195,6 +203,7 @@ class CreateTest extends \PHPUnit_Framework_TestCase 'customerMapper' => $this->customerMapper, 'objectFactory' => $this->objectFactory, 'accountManagement' => $this->accountManagementMock, + 'dataObjectHelper' => $this->dataObjectHelper, ] ); } @@ -242,8 +251,11 @@ class CreateTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->getMock('Magento\Framework\App\RequestInterface'))); $customerMock = $this->getMock('Magento\Customer\Api\Data\CustomerInterface', [], [], '', false); - $this->customerMapper->expects($this->any())->method('toFlatArray') - ->will($this->returnValue(['email' => 'user@example.com', 'group_id' => 1])); + $this->customerMapper->expects($this->atLeastOnce()) + ->method('toFlatArray') + ->willReturn(['email' => 'user@example.com', 'group_id' => 1, 'gender' => 1]); + + $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false); $quoteMock->expects($this->any())->method('getCustomer')->will($this->returnValue($customerMock)); $quoteMock->expects($this->once()) @@ -255,6 +267,13 @@ class CreateTest extends \PHPUnit_Framework_TestCase 'customer_tax_class_id' => $taxClassId ] ); + $this->dataObjectHelper->expects($this->once()) + ->method('populateWithArray') + ->with( + $customerMock, + ['email' => 'user@example.com', 'group_id' => 1, 'gender' => 1], + '\Magento\Customer\Api\Data\CustomerInterface' + ); $this->formFactoryMock->expects($this->any())->method('create')->will($this->returnValue($customerFormMock)); $this->sessionQuoteMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock)); -- GitLab