Skip to content

Commit 92d53a1

Browse files
committed
MC-20675: Admin: Add/edit/delete related, up-sells, cross-sells products
1 parent 7de0949 commit 92d53a1

File tree

2 files changed

+28
-30
lines changed

2 files changed

+28
-30
lines changed

dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Save/LinksTest.php

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use Magento\Catalog\Api\ProductRepositoryInterface;
1111
use Magento\Catalog\Model\Product;
12-
use Magento\Catalog\Model\ProductRepository;
12+
use Magento\Catalog\Api\Data\ProductInterface;
1313
use Magento\Framework\App\Request\Http as HttpRequest;
1414
use Magento\TestFramework\TestCase\AbstractBackendController;
1515

@@ -27,7 +27,7 @@ class LinksTest extends AbstractBackendController
2727
'related',
2828
];
2929

30-
/** @var ProductRepository $productRepository */
30+
/** @var ProductRepositoryInterface $productRepository */
3131
private $productRepository;
3232

3333
/**
@@ -48,20 +48,15 @@ protected function setUp()
4848
* @param array $postData
4949
* @return void
5050
*/
51-
public function testAddRelatedUpSellCrossSellProducts(array $postData)
51+
public function testAddRelatedUpSellCrossSellProducts(array $postData): void
5252
{
5353
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
5454
$this->getRequest()->setPostValue($postData);
5555
$this->dispatch('backend/catalog/product/save');
56-
57-
/** @var Product $product */
5856
$product = $this->productRepository->get('simple');
59-
60-
$expectedLinks = $this->getExpectedLinks($postData['links']);
61-
$actualLinks = $this->getActualLinks($product);
6257
$this->assertEquals(
63-
$expectedLinks,
64-
$actualLinks,
58+
$this->getExpectedLinks($postData['links']),
59+
$this->getActualLinks($product),
6560
"Expected linked products do not match actual linked products!"
6661
);
6762
}
@@ -111,7 +106,7 @@ private function getExpectedLinks(array $links): array
111106
foreach ($this->linkTypes as $linkType) {
112107
$expectedLinks[$linkType] = [];
113108
foreach ($links[$linkType] as $productData) {
114-
$expectedLinks[$linkType][$productData['id']] = $productData;
109+
$expectedLinks[$linkType][] = $productData['id'];
115110
}
116111
}
117112

@@ -121,10 +116,10 @@ private function getExpectedLinks(array $links): array
121116
/**
122117
* Get an array of received related, up-sells, cross-sells products
123118
*
124-
* @param Product $product
119+
* @param ProductInterface|Product $product
125120
* @return array
126121
*/
127-
private function getActualLinks(Product $product): array
122+
private function getActualLinks(ProductInterface $product): array
128123
{
129124
$actualLinks = [];
130125
foreach ($this->linkTypes as $linkType) {
@@ -141,11 +136,9 @@ private function getActualLinks(Product $product): array
141136
$products = $product->getRelatedProducts();
142137
break;
143138
}
144-
/** @var Product $product */
139+
/** @var ProductInterface|Product $productItem */
145140
foreach ($products as $productItem) {
146-
$actualLinks[$linkType][$productItem->getId()] = [
147-
'id' => $productItem->getId(),
148-
];
141+
$actualLinks[$linkType][] = $productItem->getId();
149142
}
150143
}
151144

dev/tests/integration/testsuite/Magento/Catalog/Model/Product/LinksTest.php

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77

88
namespace Magento\Catalog\Model\Product;
99

10+
use Magento\Catalog\Api\Data\ProductInterface;
1011
use Magento\Catalog\Api\Data\ProductLinkInterface;
1112
use Magento\Catalog\Api\ProductRepositoryInterface;
1213
use Magento\Catalog\Model\Product;
1314
use Magento\Catalog\Model\ProductLink\Link;
14-
use Magento\Catalog\Model\ProductRepository;
15+
use Magento\Catalog\Model\ResourceModel\Product as ProductResource;
1516
use Magento\TestFramework\Helper\Bootstrap;
1617
use Magento\TestFramework\ObjectManager;
1718
use PHPUnit\Framework\TestCase;
@@ -61,12 +62,15 @@ class LinksTest extends TestCase
6162
],
6263
];
6364

64-
/** @var ProductRepository $productRepository */
65+
/** @var ProductRepositoryInterface $productRepository */
6566
private $productRepository;
6667

6768
/** @var ObjectManager */
6869
private $objectManager;
6970

71+
/** @var ProductResource */
72+
private $productResource;
73+
7074
/**
7175
* @inheritdoc
7276
*/
@@ -75,6 +79,7 @@ protected function setUp()
7579
parent::setUp();
7680
$this->objectManager = Bootstrap::getObjectManager();
7781
$this->productRepository = $this->objectManager->create(ProductRepositoryInterface::class);
82+
$this->productResource = $this->objectManager->create(ProductResource::class);
7883
}
7984

8085
/**
@@ -90,24 +95,23 @@ protected function setUp()
9095
*/
9196
public function testEditRemoveRelatedUpSellCrossSellProducts(array $data): void
9297
{
93-
/** @var Product $product */
98+
/** @var ProductInterface|Product $product */
9499
$product = $this->productRepository->get('simple');
95100
$this->setCustomProductLinks($product, $this->getProductData($data['defaultLinks']));
96101
$this->productRepository->save($product);
97102

98103
$productData = $this->getProductData($data['productLinks']);
99104
$this->setCustomProductLinks($product, $productData);
100-
$product->save();
105+
$this->productResource->save($product);
101106

102107
$product = $this->productRepository->get('simple');
103108
$expectedLinks = isset($data['expectedProductLinks'])
104109
? $this->getProductData($data['expectedProductLinks'])
105110
: $productData;
106-
$actualLinks = $this->getActualLinks($product);
107111

108112
$this->assertEquals(
109113
$expectedLinks,
110-
$actualLinks,
114+
$this->getActualLinks($product),
111115
"Expected linked products do not match actual linked products!"
112116
);
113117
}
@@ -187,19 +191,20 @@ private function getProductData(array $productFixture): array
187191
foreach ($this->linkTypes as $linkType) {
188192
$productData[$linkType] = [];
189193
foreach ($productFixture as $data) {
190-
$productData[$linkType][$data['id']] = $data;
194+
$productData[$linkType][] = $data;
191195
}
192196
}
197+
193198
return $productData;
194199
}
195200

196201
/**
197202
* Link related, up-sells, cross-sells products received from the array
198203
*
199-
* @param Product $product
204+
* @param ProductInterface|Product $product
200205
* @param array $productData
201206
*/
202-
private function setCustomProductLinks(Product $product, array $productData): void
207+
private function setCustomProductLinks(ProductInterface $product, array $productData): void
203208
{
204209
$productLinks = [];
205210
foreach ($productData as $linkType => $links) {
@@ -221,10 +226,10 @@ private function setCustomProductLinks(Product $product, array $productData): vo
221226
/**
222227
* Get an array of received related, up-sells, cross-sells products
223228
*
224-
* @param Product $product
229+
* @param ProductInterface|Product $product
225230
* @return array
226231
*/
227-
private function getActualLinks(Product $product): array
232+
private function getActualLinks(ProductInterface $product): array
228233
{
229234
$actualLinks = [];
230235
foreach ($this->linkTypes as $linkType) {
@@ -241,9 +246,9 @@ private function getActualLinks(Product $product): array
241246
$products = $product->getRelatedProducts();
242247
break;
243248
}
244-
/** @var Product $product */
249+
/** @var ProductInterface|Product $productItem */
245250
foreach ($products as $productItem) {
246-
$actualLinks[$linkType][$productItem->getId()] = [
251+
$actualLinks[$linkType][] = [
247252
'id' => $productItem->getId(),
248253
'sku' => $productItem->getSku(),
249254
'position' => $productItem->getPosition(),

0 commit comments

Comments
 (0)