Skip to content

Commit 1a6efc9

Browse files
author
Magento CICD
authored
merge magento/2.2-develop into magento-qwerty/PR-2
2 parents fd732b4 + c52240b commit 1a6efc9

File tree

4 files changed

+80
-5
lines changed

4 files changed

+80
-5
lines changed

app/code/Magento/Quote/Model/Quote.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,9 @@ public function addProduct(
16201620
$item = $this->getItemByProduct($candidate);
16211621
if (!$item) {
16221622
$item = $this->itemProcessor->init($candidate, $request);
1623+
$item->setQuote($this);
1624+
$item->setOptions($candidate->getCustomOptions());
1625+
$item->setProduct($candidate);
16231626
// Add only item that is not in quote already
16241627
$this->addItem($item);
16251628
}

app/code/Magento/Quote/Model/Quote/Item/Processor.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ public function init(Product $product, $request)
7171
return $item;
7272
}
7373

74-
$item->setOptions($product->getCustomOptions());
75-
$item->setProduct($product);
76-
7774
if ($request->getResetCount() && !$product->getStickWithinParent() && $item->getId() === $request->getId()) {
7875
$item->setData(CartItemInterface::KEY_QTY, 0);
7976
}

app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ class QuoteTest extends \PHPUnit\Framework\TestCase
142142
*/
143143
private $customerDataFactoryMock;
144144

145+
/**
146+
* @var \PHPUnit_Framework_MockObject_MockObject
147+
*/
148+
private $itemProcessor;
149+
145150
/**
146151
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
147152
*/
@@ -223,7 +228,9 @@ protected function setUp()
223228
$this->filterBuilderMock = $this->getMockBuilder(\Magento\Framework\Api\FilterBuilder::class)
224229
->disableOriginalConstructor()
225230
->getMock();
226-
231+
$this->itemProcessor = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item\Processor::class)
232+
->disableOriginalConstructor()
233+
->getMock();
227234
$this->extensionAttributesJoinProcessorMock = $this->createMock(\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface::class);
228235
$this->customerDataFactoryMock = $this->createPartialMock(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class, ['create']);
229236
$this->quote = (new ObjectManager($this))
@@ -249,6 +256,7 @@ protected function setUp()
249256
'objectCopyService' => $this->objectCopyServiceMock,
250257
'extensionAttributesJoinProcessor' => $this->extensionAttributesJoinProcessorMock,
251258
'customerDataFactory' => $this->customerDataFactoryMock,
259+
'itemProcessor' => $this->itemProcessor,
252260
'data' => [
253261
'reserved_order_id' => 1000001
254262
]
@@ -853,6 +861,69 @@ public function testAddProductItemPreparation()
853861
$this->assertEquals($expectedResult, $result);
854862
}
855863

864+
public function testAddProductItemNew()
865+
{
866+
$itemMock = $this->createMock(\Magento\Quote\Model\Quote\Item::class);
867+
868+
$expectedResult = $itemMock;
869+
$requestMock = $this->createMock(
870+
\Magento\Framework\DataObject::class
871+
);
872+
$this->objectFactoryMock->expects($this->once())
873+
->method('create')
874+
->with($this->equalTo(['qty' => 1]))
875+
->will($this->returnValue($requestMock));
876+
877+
$typeInstanceMock = $this->createPartialMock(\Magento\Catalog\Model\Product\Type\Simple::class, [
878+
'prepareForCartAdvanced'
879+
]);
880+
881+
$productMock = $this->createPartialMock(\Magento\Catalog\Model\Product::class, [
882+
'getParentProductId',
883+
'setStickWithinParent',
884+
'__wakeup'
885+
]);
886+
887+
$collectionMock = $this->createMock(\Magento\Quote\Model\ResourceModel\Quote\Item\Collection::class);
888+
889+
$itemMock->expects($this->any())
890+
->method('representProduct')
891+
->will($this->returnValue(false));
892+
893+
$iterator = new \ArrayIterator([$itemMock]);
894+
$collectionMock->expects($this->any())
895+
->method('getIterator')
896+
->will($this->returnValue($iterator));
897+
898+
$this->quoteItemCollectionFactoryMock->expects($this->once())
899+
->method('create')
900+
->will($this->returnValue($collectionMock));
901+
902+
$this->productMock->expects($this->once())
903+
->method('isSalable')
904+
->willReturn(true);
905+
$this->itemProcessor
906+
->expects($this->once())
907+
->method('init')
908+
->willReturn($itemMock);
909+
$itemMock->expects($this->once())
910+
->method('setProduct');
911+
$itemMock->expects($this->once())
912+
->method('setOptions');
913+
$itemMock->expects($this->any())
914+
->method('setQuote')
915+
->with($this->quote);
916+
$typeInstanceMock->expects($this->once())
917+
->method('prepareForCartAdvanced')
918+
->will($this->returnValue([$productMock]));
919+
$this->productMock->expects($this->once())
920+
->method('getTypeInstance')
921+
->will($this->returnValue($typeInstanceMock));
922+
923+
$result = $this->quote->addProduct($this->productMock, null);
924+
$this->assertEquals($expectedResult, $result);
925+
}
926+
856927
public function testValidateMiniumumAmount()
857928
{
858929
$storeId = 1;

app/code/Magento/Sales/Controller/Adminhtml/Order/Create.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ protected function _processActionData($action = null)
154154
$this->_eventManager->dispatch('adminhtml_sales_order_create_process_data_before', $eventData);
155155

156156
/**
157-
* Saving order data
157+
* Import post data, in order to make order quote valid
158158
*/
159159
if ($data = $this->getRequest()->getPost('order')) {
160160
$this->_getOrderCreateModel()->importPostData($data);
@@ -210,6 +210,8 @@ protected function _processActionData($action = null)
210210
$this->_getOrderCreateModel()->applySidebarData($data);
211211
}
212212

213+
$this->_eventManager->dispatch('adminhtml_sales_order_create_process_item_before', $eventData);
214+
213215
/**
214216
* Adding product to quote from shopping cart, wishlist etc.
215217
*/
@@ -256,6 +258,8 @@ protected function _processActionData($action = null)
256258
$this->_getOrderCreateModel()->moveQuoteItem($moveItemId, $moveTo, $moveQty);
257259
}
258260

261+
$this->_eventManager->dispatch('adminhtml_sales_order_create_process_item_after', $eventData);
262+
259263
if ($paymentData = $this->getRequest()->getPost('payment')) {
260264
$this->_getOrderCreateModel()->getQuote()->getPayment()->addData($paymentData);
261265
}

0 commit comments

Comments
 (0)