Skip to content

Commit 0228243

Browse files
committed
Merge remote-tracking branch 'tango-ce/MAGETWO-51921' into MAGETWO-52779
2 parents fc00d97 + c9e51ef commit 0228243

File tree

2 files changed

+176
-1
lines changed

2 files changed

+176
-1
lines changed

app/code/Magento/CmsUrlRewrite/Observer/ProcessUrlRewriteSavingObserver.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Magento\UrlRewrite\Model\UrlPersistInterface;
1010
use Magento\Framework\Event\ObserverInterface;
1111
use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
12+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
1213

1314
class ProcessUrlRewriteSavingObserver implements ObserverInterface
1415
{
@@ -42,8 +43,14 @@ public function execute(EventObserver $observer)
4243
{
4344
/** @var $cmsPage \Magento\Cms\Model\Page */
4445
$cmsPage = $observer->getEvent()->getObject();
45-
if ($cmsPage->dataHasChangedFor('identifier')) {
46+
47+
if ($cmsPage->dataHasChangedFor('identifier') || $cmsPage->dataHasChangedFor('store_id')) {
4648
$urls = $this->cmsPageUrlRewriteGenerator->generate($cmsPage);
49+
50+
$this->urlPersist->deleteByData([
51+
UrlRewrite::ENTITY_ID => $cmsPage->getId(),
52+
UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE,
53+
]);
4754
$this->urlPersist->replace($urls);
4855
}
4956
}
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\CmsUrlRewrite\Test\Unit\Observer;
7+
8+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
9+
use Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver;
10+
use Magento\UrlRewrite\Model\UrlPersistInterface;
11+
use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
12+
use Magento\Framework\Event\Observer as EventObserver;
13+
use Magento\Framework\Event;
14+
use Magento\Cms\Model\Page;
15+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
16+
17+
/**
18+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
19+
*/
20+
class ProcessUrlRewriteSavingObserverTest extends \PHPUnit_Framework_TestCase
21+
{
22+
/**
23+
* @var ObjectManagerHelper
24+
*/
25+
protected $objectManagerHelper;
26+
27+
/**
28+
* @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
protected $urlPersistMock;
31+
32+
/**
33+
* @var CmsPageUrlRewriteGenerator|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
protected $cmsPageUrlRewriteGeneratorMock;
36+
37+
/**
38+
* @var EventObserver|\PHPUnit_Framework_MockObject_MockObject
39+
*/
40+
protected $eventObserverMock;
41+
42+
/**
43+
* @var Page|\PHPUnit_Framework_MockObject_MockObject
44+
*/
45+
protected $pageMock;
46+
47+
/**
48+
* @var Event|\PHPUnit_Framework_MockObject_MockObject
49+
*/
50+
protected $eventMock;
51+
52+
/**
53+
* @var ProcessUrlRewriteSavingObserver
54+
*/
55+
protected $observer;
56+
57+
/**
58+
* @return void
59+
*/
60+
protected function setUp()
61+
{
62+
$this->objectManagerHelper = new ObjectManagerHelper($this);
63+
64+
$this->urlPersistMock = $this->getMockBuilder(UrlPersistInterface::class)
65+
->getMockForAbstractClass();
66+
$this->cmsPageUrlRewriteGeneratorMock = $this->getMockBuilder(CmsPageUrlRewriteGenerator::class)
67+
->disableOriginalConstructor()
68+
->getMock();
69+
$this->pageMock = $this->getMockBuilder(Page::class)
70+
->setMethods(['getId', 'dataHasChangedFor'])
71+
->disableOriginalConstructor()
72+
->getMock();
73+
$this->eventMock = $this->getMockBuilder(Event::class)
74+
->setMethods(['getObject'])
75+
->disableOriginalConstructor()
76+
->getMock();
77+
$this->eventObserverMock = $this->getMockBuilder(EventObserver::class)
78+
->disableOriginalConstructor()
79+
->getMock();
80+
81+
$this->eventObserverMock->expects($this->once())
82+
->method('getEvent')
83+
->willReturn($this->eventMock);
84+
$this->eventMock->expects($this->once())
85+
->method('getObject')
86+
->willReturn($this->pageMock);
87+
88+
$this->observer = $this->objectManagerHelper->getObject(
89+
ProcessUrlRewriteSavingObserver::class,
90+
[
91+
'cmsPageUrlRewriteGenerator' => $this->cmsPageUrlRewriteGeneratorMock,
92+
'urlPersist' => $this->urlPersistMock,
93+
]
94+
);
95+
}
96+
97+
/**
98+
* @param bool $identifierChanged
99+
* @param bool $storeIdChanged
100+
* @return void
101+
* @dataProvider executeDataProvider
102+
*/
103+
public function testExecute($identifierChanged, $storeIdChanged)
104+
{
105+
$pageId = 1;
106+
$urls = ['first url', 'second url'];
107+
108+
$this->pageMock->expects($this->any())
109+
->method('dataHasChangedFor')
110+
->willReturnMap([
111+
['identifier', $identifierChanged],
112+
['store_id', $storeIdChanged],
113+
]);
114+
$this->pageMock->expects($this->once())
115+
->method('getId')
116+
->willReturn($pageId);
117+
$this->cmsPageUrlRewriteGeneratorMock->expects($this->once())
118+
->method('generate')
119+
->with($this->pageMock)
120+
->willReturn($urls);
121+
$this->urlPersistMock->expects($this->once())
122+
->method('deleteByData')
123+
->with([
124+
UrlRewrite::ENTITY_ID => $pageId,
125+
UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE,
126+
]);
127+
$this->urlPersistMock->expects($this->once())
128+
->method('replace')
129+
->with($urls);
130+
131+
$this->observer->execute($this->eventObserverMock);
132+
}
133+
134+
/**
135+
* return array
136+
*/
137+
public function executeDataProvider()
138+
{
139+
return [
140+
['identifier' => true, 'storeIdChanged' => true],
141+
['identifier' => true, 'storeIdChanged' => false],
142+
['identifier' => false, 'storeIdChanged' => true],
143+
];
144+
}
145+
146+
/**
147+
* @return void
148+
*/
149+
public function testExecuteWithoutDataChanged()
150+
{
151+
$this->pageMock->expects($this->any())
152+
->method('dataHasChangedFor')
153+
->willReturnMap([
154+
['identifier', false],
155+
['store_id', false],
156+
]);
157+
$this->pageMock->expects($this->never())
158+
->method('getId');
159+
$this->cmsPageUrlRewriteGeneratorMock->expects($this->never())
160+
->method('generate');
161+
$this->urlPersistMock->expects($this->never())
162+
->method('deleteByData');
163+
$this->urlPersistMock->expects($this->never())
164+
->method('replace');
165+
166+
$this->observer->execute($this->eventObserverMock);
167+
}
168+
}

0 commit comments

Comments
 (0)