Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ProductUrlKeyAutogeneratorObserverTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
11 use \Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator;
12 
16 class ProductUrlKeyAutogeneratorObserverTest extends \PHPUnit\Framework\TestCase
17 {
21  private $productUrlPathGenerator;
22 
24  private $productUrlKeyAutogeneratorObserver;
25 
29  protected function setUp(): void
30  {
31  $this->productUrlPathGenerator = $this->getMockBuilder(ProductUrlPathGenerator::class)
32  ->disableOriginalConstructor()
33  ->setMethods(['getUrlKey'])
34  ->getMock();
35 
36  $this->productUrlKeyAutogeneratorObserver = (new ObjectManagerHelper($this))->getObject(
37  \Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogeneratorObserver::class,
38  [
39  'productUrlPathGenerator' => $this->productUrlPathGenerator
40  ]
41  );
42  }
43 
47  public function testExecuteWithUrlKey(): void
48  {
49  $urlKey = 'product_url_key';
50 
51  $product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
52  ->disableOriginalConstructor()
53  ->setMethods(['setUrlKey'])
54  ->getMock();
55  $product->expects($this->atLeastOnce())->method('setUrlKey')->with($urlKey);
56  $event = $this->getMockBuilder(\Magento\Framework\Event::class)
57  ->disableOriginalConstructor()
58  ->setMethods(['getProduct'])
59  ->getMock();
60  $event->expects($this->atLeastOnce())->method('getProduct')->willReturn($product);
62  $observer = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
63  ->disableOriginalConstructor()
64  ->setMethods(['getEvent'])
65  ->getMock();
66  $observer->expects($this->atLeastOnce())->method('getEvent')->willReturn($event);
67  $this->productUrlPathGenerator->expects($this->atLeastOnce())->method('getUrlKey')->with($product)
68  ->willReturn($urlKey);
69 
70  $this->productUrlKeyAutogeneratorObserver->execute($observer);
71  }
72 
76  public function testExecuteWithEmptyUrlKey(): void
77  {
78  $product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
79  ->disableOriginalConstructor()
80  ->setMethods(['setUrlKey'])
81  ->getMock();
82  $product->expects($this->never())->method('setUrlKey');
83  $event = $this->getMockBuilder(\Magento\Framework\Event::class)
84  ->disableOriginalConstructor()
85  ->setMethods(['getProduct'])
86  ->getMock();
87  $event->expects($this->atLeastOnce())->method('getProduct')->willReturn($product);
89  $observer = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
90  ->disableOriginalConstructor()
91  ->setMethods(['getEvent'])
92  ->getMock();
93  $observer->expects($this->atLeastOnce())->method('getEvent')->willReturn($event);
94  $this->productUrlPathGenerator->expects($this->atLeastOnce())->method('getUrlKey')->with($product)
95  ->willReturn(null);
96 
97  $this->productUrlKeyAutogeneratorObserver->execute($observer);
98  }
99 }