Skip to content

Commit c1c060b

Browse files
authored
ENGCOM-6943: Unit test for ProductProcessUrlRewriteRemovingObserver #26912
2 parents a4379fd + 8be8e9a commit c1c060b

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\CatalogUrlRewrite\Test\Unit\Observer;
10+
11+
use Magento\Catalog\Model\Product;
12+
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
13+
use Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver;
14+
use Magento\Framework\Event;
15+
use Magento\Framework\Event\Observer;
16+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
17+
use Magento\UrlRewrite\Model\UrlPersistInterface;
18+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
19+
use PHPUnit\Framework\MockObject\MockObject;
20+
use PHPUnit\Framework\TestCase;
21+
22+
/**
23+
* Unit test for Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver
24+
*/
25+
class ProductProcessUrlRewriteRemovingObserverTest extends TestCase
26+
{
27+
/*
28+
* Stub product ID
29+
*/
30+
private const STUB_PRODUCT_ID = 333;
31+
32+
/**
33+
* Testable Object
34+
*
35+
* @var ProductProcessUrlRewriteRemovingObserver
36+
*/
37+
private $observer;
38+
39+
/**
40+
* @var ObjectManager
41+
*/
42+
private $objectManager;
43+
44+
/**
45+
* @var Observer|MockObject
46+
*/
47+
private $observerMock;
48+
49+
/**
50+
* @var Event|MockObject
51+
*/
52+
private $eventMock;
53+
54+
/**
55+
* @var Product|MockObject
56+
*/
57+
private $productMock;
58+
59+
/**
60+
* @var UrlPersistInterface|MockObject
61+
*/
62+
private $urlPersistMock;
63+
64+
/**
65+
* @inheritdoc
66+
*/
67+
protected function setUp(): void
68+
{
69+
$this->objectManager = new ObjectManager($this);
70+
$this->observerMock = $this->createMock(Observer::class);
71+
72+
$this->eventMock = $this->getMockBuilder(Event::class)
73+
->disableOriginalConstructor()
74+
->setMethods(['getProduct'])
75+
->getMock();
76+
77+
$this->productMock = $this->getMockBuilder(Product::class)
78+
->disableOriginalConstructor()
79+
->setMethods(['getId'])
80+
->getMock();
81+
82+
$this->urlPersistMock = $this->getMockBuilder(UrlPersistInterface::class)
83+
->disableOriginalConstructor()
84+
->getMock();
85+
86+
$this->observer = $this->objectManager->getObject(
87+
ProductProcessUrlRewriteRemovingObserver::class,
88+
[
89+
'urlPersist' => $this->urlPersistMock
90+
]
91+
);
92+
}
93+
94+
/**
95+
* Test for execute(), covers test case for removing product URLs from storage
96+
*/
97+
public function testRemoveProductUrlsFromStorage(): void
98+
{
99+
$this->observerMock
100+
->expects($this->once())
101+
->method('getEvent')
102+
->willReturn($this->eventMock);
103+
104+
$this->eventMock
105+
->expects($this->once())
106+
->method('getProduct')
107+
->willReturn($this->productMock);
108+
109+
$this->productMock
110+
->expects($this->exactly(2))
111+
->method('getId')
112+
->willReturn(self::STUB_PRODUCT_ID);
113+
114+
$this->urlPersistMock->expects($this->once())
115+
->method('deleteByData')
116+
->with([
117+
UrlRewrite::ENTITY_ID => self::STUB_PRODUCT_ID,
118+
UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
119+
]);
120+
121+
$this->observer->execute($this->observerMock);
122+
}
123+
124+
/**
125+
* Test for execute(), covers test case for removing product URLs when the product doesn't have an ID
126+
*/
127+
public function testRemoveProductUrlsWithEmptyProductId()
128+
{
129+
$this->observerMock
130+
->expects($this->once())
131+
->method('getEvent')
132+
->willReturn($this->eventMock);
133+
134+
$this->eventMock
135+
->expects($this->once())
136+
->method('getProduct')
137+
->willReturn($this->productMock);
138+
139+
$this->productMock
140+
->expects($this->once())
141+
->method('getId')
142+
->willReturn(null);
143+
144+
$this->urlPersistMock->expects($this->never())->method('deleteByData');
145+
146+
$this->observer->execute($this->observerMock);
147+
}
148+
}

0 commit comments

Comments
 (0)