Skip to content

Commit bf644f8

Browse files
author
Yu Tang
committed
MAGETWO-28256: Bundle Integration API Refactoring
- Fix static errors
1 parent 249141f commit bf644f8

File tree

4 files changed

+69
-51
lines changed

4 files changed

+69
-51
lines changed

app/code/Magento/Bundle/Model/LinkManagement.php

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,11 @@ public function saveChild(
156156
protected function mapProductLinkToSelectionModel(
157157
\Magento\Bundle\Model\Selection $selectionModel,
158158
\Magento\Bundle\Api\Data\LinkInterface $productLink,
159-
$linkedProductId = null,
160-
$parentProductId = null
159+
$linkedProductId,
160+
$parentProductId
161161
) {
162-
if (!is_null($linkedProductId)) {
163-
$selectionModel->setProductId($linkedProductId);
164-
}
165-
if (!is_null($parentProductId)) {
166-
$selectionModel->setParentProductId($parentProductId);
167-
}
168-
if (!is_null($productLink->getId())) {
169-
$selectionModel->setSelectionId($productLink->getId());
170-
}
162+
$selectionModel->setProductId($linkedProductId);
163+
$selectionModel->setParentProductId($parentProductId);
171164
if (!is_null($productLink->getOptionId())) {
172165
$selectionModel->setOptionId($productLink->getOptionId());
173166
}
@@ -205,10 +198,6 @@ public function addChild(
205198
throw new InputException('Product with specified sku: "%1" is not a bundle product', [$product->getSku()]);
206199
}
207200

208-
if ($linkedProduct->getId()) {
209-
throw new InputException('Id field should not be set for new product link');
210-
}
211-
212201
$options = $this->optionCollection->create();
213202
$options->setIdFilter($optionId);
214203
$existingOption = $options->getFirstItem();

app/code/Magento/Bundle/Model/OptionRepository.php

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ public function deleteById($productSku, $optionId)
148148

149149
/**
150150
* {@inheritdoc}
151-
* @SuppressWarnings(PHPMD.NPathComplexity)
152151
*/
153152
public function save(
154153
\Magento\Catalog\Api\Data\ProductInterface $product,
@@ -158,11 +157,13 @@ public function save(
158157
$option->setParentId($product->getId());
159158

160159
$optionId = $option->getOptionId();
160+
$linksToAdd = [];
161161
if (!$optionId) {
162162
$option->setDefaultTitle($option->getTitle());
163-
$linksToAdd = is_array($option->getProductLinks()) ? $option->getProductLinks() : [];
163+
if (is_array($option->getProductLinks())) {
164+
$linksToAdd = $option->getProductLinks();
165+
}
164166
} else {
165-
$existingLinks = $this->linkManagement->getChildren($product->getSku(), $optionId);
166167
$optionCollection = $this->type->getOptionsCollection($product);
167168
$optionCollection->setIdFilter($option->getOptionId());
168169

@@ -174,32 +175,7 @@ public function save(
174175
}
175176

176177
$option->setData(array_merge($existingOption->getData(), $option->getData()));
177-
178-
$linksToAdd = [];
179-
$linksToUpdate = [];
180-
$linksToDelete = [];
181-
if (is_array($option->getProductLinks())) {
182-
$productLinks = $option->getProductLinks();
183-
foreach ($productLinks as $productLink) {
184-
if (!$productLink->getId()) {
185-
$linksToAdd[] = $productLink;
186-
} else {
187-
$linksToUpdate[] = $productLink;
188-
}
189-
}
190-
/** @var \Magento\Bundle\Api\Data\LinkInterface[] $linksToDelete */
191-
$linksToDelete = array_udiff($existingLinks, $productLinks, [$this, 'compareLinks']);
192-
}
193-
foreach ($linksToUpdate as $linkedProduct) {
194-
$this->linkManagement->saveChild($product, $linkedProduct);
195-
}
196-
foreach ($linksToDelete as $linkedProduct) {
197-
$this->linkManagement->removeChild(
198-
$product->getSku(),
199-
$option->getOptionId(),
200-
$linkedProduct->getSku()
201-
);
202-
}
178+
$this->updateOptionSelection($product, $option);
203179
}
204180

205181
try {
@@ -216,6 +192,49 @@ public function save(
216192
return $option->getOptionId();
217193
}
218194

195+
/**
196+
* Update option selections
197+
*
198+
* @param \Magento\Catalog\Api\Data\ProductInterface $product
199+
* @param \Magento\Bundle\Api\Data\OptionInterface $option
200+
*/
201+
protected function updateOptionSelection(
202+
\Magento\Catalog\Api\Data\ProductInterface $product,
203+
\Magento\Bundle\Api\Data\OptionInterface $option
204+
) {
205+
$optionId = $option->getOptionId();
206+
$existingLinks = $this->linkManagement->getChildren($product->getSku(), $optionId);
207+
$linksToAdd = [];
208+
$linksToUpdate = [];
209+
$linksToDelete = [];
210+
if (is_array($option->getProductLinks())) {
211+
$productLinks = $option->getProductLinks();
212+
foreach ($productLinks as $productLink) {
213+
if (!$productLink->getId()) {
214+
$linksToAdd[] = $productLink;
215+
} else {
216+
$linksToUpdate[] = $productLink;
217+
}
218+
}
219+
/** @var \Magento\Bundle\Api\Data\LinkInterface[] $linksToDelete */
220+
$linksToDelete = array_udiff($existingLinks, $linksToUpdate, [$this, 'compareLinks']);
221+
}
222+
foreach ($linksToUpdate as $linkedProduct) {
223+
$this->linkManagement->saveChild($product, $linkedProduct);
224+
}
225+
foreach ($linksToDelete as $linkedProduct) {
226+
$this->linkManagement->removeChild(
227+
$product->getSku(),
228+
$option->getOptionId(),
229+
$linkedProduct->getSku()
230+
);
231+
}
232+
foreach ($linksToAdd as $linkedProduct) {
233+
$this->linkManagement->addChild($product, $option->getOptionId(), $linkedProduct);
234+
}
235+
return;
236+
}
237+
219238
/**
220239
* @param string $productSku
221240
* @return \Magento\Catalog\Api\Data\ProductInterface

dev/tests/unit/testsuite/Magento/Bundle/Model/OptionRepositoryTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,8 @@ public function testSaveNewOption()
510510
);
511511
$optionMock->expects($this->once())->method('setStoreId')->with($storeId)->willReturnSelf();
512512
$optionMock->expects($this->once())->method('setParentId')->with($productId)->willReturnSelf();
513-
$optionMock->method('getOptionId')->will($this->onConsecutiveCalls(null, $optionId, $optionId, $optionId));
513+
$optionMock->method('getOptionId')
514+
->will($this->onConsecutiveCalls(null, $optionId, $optionId, $optionId, $optionId));
514515

515516
$productLink1 = $this->getMock('\Magento\Bundle\Api\Data\LinkInterface');
516517
$productLink2 = $this->getMock('\Magento\Bundle\Api\Data\LinkInterface');

dev/tests/unit/testsuite/Magento/Catalog/Model/Plugin/ProductRepository/TransactionWrapperTest.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
namespace Magento\Catalog\Model\Plugin;
6+
namespace Magento\Catalog\Model\Plugin\ProductRepository;
77

88
class TransactionWrapperTest extends \PHPUnit_Framework_TestCase
99
{
@@ -50,11 +50,10 @@ protected function setUp()
5050
$this->subjectMock = $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface', [], [], '', false);
5151
$this->productMock = $this->getMock('Magento\Catalog\Api\Data\ProductInterface', [], [], '', false);
5252
$productMock = $this->productMock;
53-
$saveOption = $this->saveOption;
54-
$this->closureMock = function () use ($productMock, $saveOption) {
53+
$this->closureMock = function () use ($productMock) {
5554
return $productMock;
5655
};
57-
$this->rollbackClosureMock = function () use ($productMock, $saveOption) {
56+
$this->rollbackClosureMock = function () use ($productMock) {
5857
throw new \Exception(self::ERROR_MSG);
5958
};
6059

@@ -104,7 +103,12 @@ public function testAroundDeleteRollBack()
104103
$this->resourceMock->expects($this->once())->method('beginTransaction');
105104
$this->resourceMock->expects($this->once())->method('rollBack');
106105

107-
$this->model->aroundDelete($this->subjectMock, $this->rollbackClosureMock, $this->productMock, $this->saveOption);
106+
$this->model->aroundDelete(
107+
$this->subjectMock,
108+
$this->rollbackClosureMock,
109+
$this->productMock,
110+
$this->saveOption
111+
);
108112
}
109113

110114
public function testAroundDeleteByIdCommit()
@@ -127,6 +131,11 @@ public function testAroundDeleteByIdRollBack()
127131
$this->resourceMock->expects($this->once())->method('beginTransaction');
128132
$this->resourceMock->expects($this->once())->method('rollBack');
129133

130-
$this->model->aroundDelete($this->subjectMock, $this->rollbackClosureMock, $this->productMock, $this->saveOption);
134+
$this->model->aroundDelete(
135+
$this->subjectMock,
136+
$this->rollbackClosureMock,
137+
$this->productMock,
138+
$this->saveOption
139+
);
131140
}
132141
}

0 commit comments

Comments
 (0)