Skip to content

Commit dac45a7

Browse files
committed
MAGETWO-54211: Downloadable product has direct link in category after update applied
1 parent 2c15904 commit dac45a7

File tree

2 files changed

+216
-3
lines changed

2 files changed

+216
-3
lines changed

app/code/Magento/CatalogUrlRewrite/Observer/ProductProcessUrlRewriteSavingObserver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,17 @@ public function execute(\Magento\Framework\Event\Observer $observer)
4646
/** @var \Magento\Catalog\Model\Product $product */
4747
$product = $observer->getEvent()->getProduct();
4848

49-
$isChangedWebsites = $product->getIsChangedWebsites();
5049
if ($product->dataHasChangedFor('url_key')
5150
|| $product->getIsChangedCategories()
52-
|| $isChangedWebsites
51+
|| $product->getIsChangedWebsites()
5352
|| $product->dataHasChangedFor('visibility')
5453
) {
5554
$this->urlPersist->deleteByData([
5655
UrlRewrite::ENTITY_ID => $product->getId(),
5756
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
5857
UrlRewrite::REDIRECT_TYPE => 0,
5958
]);
60-
if (in_array($product->getVisibility(), $product->getVisibleInSiteVisibilities())) {
59+
if ($product->isVisibleInSiteVisibility()) {
6160
$this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
6261
}
6362
}
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
<?php
2+
3+
/**
4+
* Copyright © 2016 Magento. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
8+
namespace Magento\CatalogUrlRewrite\Test\Unit\Observer;
9+
10+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
11+
use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
12+
use Magento\Store\Model\Store;
13+
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
14+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
15+
16+
/**
17+
* Class AfterImportDataObserverTest
18+
*
19+
* @SuppressWarnings(PHPMD.TooManyFields)
20+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
21+
*/
22+
class AfterImportDataObserverTest extends \PHPUnit_Framework_TestCase
23+
{
24+
/**
25+
* @var \Magento\UrlRewrite\Model\UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject
26+
*/
27+
protected $urlPersist;
28+
29+
/**
30+
* @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject
31+
*/
32+
protected $event;
33+
34+
/**
35+
* @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject
36+
*/
37+
protected $observer;
38+
39+
/**
40+
* @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject
41+
*/
42+
protected $product;
43+
44+
/**
45+
* @var \Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator|\PHPUnit_Framework_MockObject_MockObject
46+
*/
47+
protected $productUrlRewriteGenerator;
48+
49+
/**
50+
* @var ObjectManager
51+
*/
52+
protected $objectManager;
53+
54+
/**
55+
* @var \Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver
56+
*/
57+
protected $model;
58+
59+
/**
60+
* Set up
61+
*/
62+
protected function setUp()
63+
{
64+
$this->urlPersist = $this->getMock(\Magento\UrlRewrite\Model\UrlPersistInterface::class, [], [], '', false);
65+
$this->product = $this->getMock(
66+
\Magento\Catalog\Model\Product::class,
67+
[
68+
'getId',
69+
'dataHasChangedFor',
70+
'isVisibleInSiteVisibility',
71+
'getIsChangedWebsites',
72+
'getIsChangedCategories'
73+
],
74+
[],
75+
'',
76+
false
77+
);
78+
$this->product->expects($this->any())->method('getId')->will($this->returnValue(3));
79+
$this->event = $this->getMock(\Magento\Framework\Event::class, ['getProduct'], [], '', false);
80+
$this->event->expects($this->any())->method('getProduct')->willReturn($this->product);
81+
$this->observer = $this->getMock(\Magento\Framework\Event\Observer::class, ['getEvent'], [], '', false);
82+
$this->observer->expects($this->any())->method('getEvent')->willReturn($this->event);
83+
$this->productUrlRewriteGenerator = $this->getMock(
84+
\Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator::class,
85+
['generate'],
86+
[],
87+
'',
88+
false
89+
);
90+
$this->productUrlRewriteGenerator->expects($this->any())
91+
->method('generate')
92+
->will($this->returnValue([3 => 'rewrite']));
93+
$this->objectManager = new ObjectManager($this);
94+
$this->model = $this->objectManager->getObject(
95+
\Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver::class,
96+
[
97+
'productUrlRewriteGenerator' => $this->productUrlRewriteGenerator,
98+
'urlPersist' => $this->urlPersist
99+
]
100+
);
101+
}
102+
103+
/**
104+
* Data provider
105+
*
106+
* @return array
107+
*/
108+
public function testUrlKeyDataProvider()
109+
{
110+
return [
111+
'url changed' => [
112+
'isChangedUrlKey' => true,
113+
'isChangedVisibility' => false,
114+
'isChangedWebsites' => false,
115+
'isChangedCategories' => false,
116+
'visibilityResult' => true,
117+
'expectedDeleteCount' => 1,
118+
'expectedReplaceCount' => 1
119+
],
120+
'no chnages' => [
121+
'isChangedUrlKey' => false,
122+
'isChangedVisibility' => false,
123+
'isChangedWebsites' => false,
124+
'isChangedCategories' => false,
125+
'visibilityResult' => true,
126+
'expectedDeleteCount' => 0,
127+
'expectedReplaceCount' => 0
128+
],
129+
'visibility changed' => [
130+
'isChangedUrlKey' => false,
131+
'isChangedVisibility' => true,
132+
'isChangedWebsites' => false,
133+
'isChangedCategories' => false,
134+
'visibilityResult' => true,
135+
'expectedDeleteCount' => 1,
136+
'expectedReplaceCount' => 1
137+
],
138+
'websites changed' => [
139+
'isChangedUrlKey' => false,
140+
'isChangedVisibility' => false,
141+
'isChangedWebsites' => true,
142+
'isChangedCategories' => false,
143+
'visibilityResult' => true,
144+
'expectedDeleteCount' => 1,
145+
'expectedReplaceCount' => 1
146+
],
147+
'categories changed' => [
148+
'isChangedUrlKey' => false,
149+
'isChangedVisibility' => false,
150+
'isChangedWebsites' => false,
151+
'isChangedCategories' => true,
152+
'visibilityResult' => true,
153+
'expectedDeleteCount' => 1,
154+
'expectedReplaceCount' => 1
155+
],
156+
'url changed invisible' => [
157+
'isChangedUrlKey' => true,
158+
'isChangedVisibility' => false,
159+
'isChangedWebsites' => false,
160+
'isChangedCategories' => false,
161+
'visibilityResult' => false,
162+
'expectedDeleteCount' => 1,
163+
'expectedReplaceCount' => 0
164+
],
165+
];
166+
}
167+
168+
/**
169+
* @param bool $isChangedUrlKey
170+
* @param bool $isChangedVisibility
171+
* @param bool $isChangedWebsites
172+
* @param bool $isChangedCategories
173+
* @param bool $visibilityResult
174+
* @param int $expectedDeleteCount
175+
* @param int $expectedReplaceCount
176+
*
177+
* @dataProvider testUrlKeyDataProvider
178+
*/
179+
public function testExecuteUrlKey(
180+
$isChangedUrlKey,
181+
$isChangedVisibility,
182+
$isChangedWebsites,
183+
$isChangedCategories,
184+
$visibilityResult,
185+
$expectedDeleteCount,
186+
$expectedReplaceCount
187+
) {
188+
189+
$this->product->expects($this->any())
190+
->method('dataHasChangedFor')
191+
->will($this->returnValueMap([
192+
['visibility', $isChangedVisibility],
193+
['url_key', $isChangedUrlKey]
194+
])
195+
);
196+
197+
$this->product->expects($this->any())
198+
->method('getIsChangedWebsites')
199+
->will($this->returnValue($isChangedWebsites));
200+
201+
$this->product->expects($this->any())
202+
->method('getIsChangedCategories')
203+
->will($this->returnValue($isChangedCategories));
204+
205+
$this->urlPersist->expects($this->exactly($expectedDeleteCount))->method('deleteByData')->with([
206+
UrlRewrite::ENTITY_ID => $this->product->getId(),
207+
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
208+
UrlRewrite::REDIRECT_TYPE => 0,
209+
]);
210+
$this->product->expects($this->any())->method('isVisibleInSiteVisibility')->will($this->returnValue($visibilityResult));
211+
$this->urlPersist->expects($this->exactly($expectedReplaceCount))->method('replace')->with([3 => 'rewrite']);
212+
$this->model->execute($this->observer);
213+
}
214+
}

0 commit comments

Comments
 (0)