Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ChildrenUrlRewriteGeneratorTest.php
Go to the documentation of this file.
1 <?php
7 
10 
11 class ChildrenUrlRewriteGeneratorTest extends \PHPUnit\Framework\TestCase
12 {
14  private $childrenUrlRewriteGenerator;
15 
17  private $category;
18 
20  private $childrenCategoriesProvider;
21 
23  private $categoryUrlRewriteGeneratorFactory;
24 
26  private $categoryUrlRewriteGenerator;
27 
29  private $mergeDataProvider;
30 
32  private $serializerMock;
33 
34  protected function setUp()
35  {
36  $this->serializerMock = $this->getMockBuilder(Json::class)
37  ->disableOriginalConstructor()
38  ->getMock();
39  $this->childrenCategoriesProvider = $this->getMockBuilder(
40  \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider::class
41  )->disableOriginalConstructor()->getMock();
42  $this->category = $this->getMockBuilder(\Magento\Catalog\Model\Category::class)
43  ->disableOriginalConstructor()->getMock();
44  $this->categoryUrlRewriteGeneratorFactory = $this->getMockBuilder(
45  \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGeneratorFactory::class
46  )->disableOriginalConstructor()->setMethods(['create'])->getMock();
47  $this->categoryUrlRewriteGenerator = $this->getMockBuilder(
48  \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator::class
49  )->disableOriginalConstructor()->getMock();
50  $mergeDataProviderFactory = $this->createPartialMock(
51  \Magento\UrlRewrite\Model\MergeDataProviderFactory::class,
52  ['create']
53  );
54  $this->mergeDataProvider = new \Magento\UrlRewrite\Model\MergeDataProvider();
55  $mergeDataProviderFactory->expects($this->once())->method('create')->willReturn($this->mergeDataProvider);
56 
57  $this->childrenUrlRewriteGenerator = (new ObjectManager($this))->getObject(
58  \Magento\CatalogUrlRewrite\Model\Category\ChildrenUrlRewriteGenerator::class,
59  [
60  'childrenCategoriesProvider' => $this->childrenCategoriesProvider,
61  'categoryUrlRewriteGeneratorFactory' => $this->categoryUrlRewriteGeneratorFactory,
62  'mergeDataProviderFactory' => $mergeDataProviderFactory
63  ]
64  );
65  }
66 
67  public function testNoChildrenCategories()
68  {
69  $this->childrenCategoriesProvider->expects($this->once())->method('getChildren')->with($this->category, true)
70  ->will($this->returnValue([]));
71 
72  $this->assertEquals([], $this->childrenUrlRewriteGenerator->generate('store_id', $this->category));
73  }
74 
75  public function testGenerate()
76  {
77  $storeId = 'store_id';
78  $saveRewritesHistory = 'flag';
79 
80  $childCategory = $this->getMockBuilder(\Magento\Catalog\Model\Category::class)
81  ->disableOriginalConstructor()->getMock();
82  $childCategory->expects($this->once())->method('setStoreId')->with($storeId);
83  $childCategory->expects($this->once())->method('setData')
84  ->with('save_rewrites_history', $saveRewritesHistory);
85  $this->childrenCategoriesProvider->expects($this->once())->method('getChildren')->with($this->category, true)
86  ->will($this->returnValue([$childCategory]));
87  $this->category->expects($this->any())->method('getData')->with('save_rewrites_history')
88  ->will($this->returnValue($saveRewritesHistory));
89  $this->categoryUrlRewriteGeneratorFactory->expects($this->once())->method('create')
90  ->will($this->returnValue($this->categoryUrlRewriteGenerator));
91  $url1 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
92  $url1->setRequestPath('category-1')
93  ->setStoreId(1);
94  $url2 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
95  $url2->setRequestPath('category-2')
96  ->setStoreId(2);
97  $url3 = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite([], $this->serializerMock);
98  $url3->setRequestPath('category-1')
99  ->setStoreId(1);
100  $this->categoryUrlRewriteGenerator->expects($this->once())->method('generate')
101  ->with($childCategory, false, 1)
102  ->will($this->returnValue([$url1, $url2, $url3]));
103 
104  $this->assertEquals(
105  ['category-1_1' => $url1, 'category-2_2' => $url2],
106  $this->childrenUrlRewriteGenerator->generate($storeId, $this->category, 1)
107  );
108  }
109 }