Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
UrlRewriteFinderTest.php
Go to the documentation of this file.
1 <?php
7 
12 use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
17 
23 class UrlRewriteFinderTest extends \PHPUnit\Framework\TestCase
24 {
26  private $databaseMapPoolMock;
27 
29  private $urlRewriteFactoryMock;
30 
32  private $urlRewritePrototypeMock;
33 
35  private $urlFinderMock;
36 
38  private $model;
39 
41  private $serializerMock;
42 
43  protected function setUp()
44  {
45  $this->serializerMock = $this->createMock(Json::class);
46  $this->databaseMapPoolMock = $this->createMock(DatabaseMapPool::class);
47  $this->urlFinderMock = $this->createMock(UrlFinderInterface::class);
48  $this->urlRewriteFactoryMock = $this->createPartialMock(UrlRewriteFactory::class, ['create']);
49  $this->urlRewritePrototypeMock = new UrlRewrite([], $this->serializerMock);
50 
51  $this->urlRewriteFactoryMock->expects($this->any())
52  ->method('create')
53  ->willReturn($this->urlRewritePrototypeMock);
54 
55  $urlRewriteClassesNamesArray = [
56  UrlRewriteFinder::ENTITY_TYPE_PRODUCT => DataProductUrlRewriteDatabaseMap::class,
57  UrlRewriteFinder::ENTITY_TYPE_CATEGORY => DataCategoryUrlRewriteDatabaseMap::class
58  ];
59 
60  $this->model = (new ObjectManager($this))->getObject(
61  UrlRewriteFinder::class,
62  [
63  'databaseMapPool' => $this->databaseMapPoolMock,
64  'urlFinder' => $this->urlFinderMock,
65  'urlRewriteFactory' => $this->urlRewriteFactoryMock,
66  'urlRewriteClassNames' => $urlRewriteClassesNamesArray
67  ]
68  );
69  }
70 
74  public function testGetByIdentifiersFallback()
75  {
76  $expected = [1, 2, 3];
77  $this->databaseMapPoolMock->expects($this->never())
78  ->method('getDataMap');
79 
80  $this->urlFinderMock->expects($this->exactly(7))
81  ->method('findAllByData')
82  ->willReturn($expected);
83 
84  $this->assertEquals($expected, $this->model->findAllByData(1, 1, UrlRewriteFinder::ENTITY_TYPE_CATEGORY));
85  $this->assertEquals($expected, $this->model->findAllByData(1, 1, UrlRewriteFinder::ENTITY_TYPE_PRODUCT));
86  $this->assertEquals($expected, $this->model->findAllByData('a', 1, UrlRewriteFinder::ENTITY_TYPE_PRODUCT), 1);
87  $this->assertEquals($expected, $this->model->findAllByData('a', 'a', UrlRewriteFinder::ENTITY_TYPE_PRODUCT), 1);
88  $this->assertEquals($expected, $this->model->findAllByData(1, 'a', UrlRewriteFinder::ENTITY_TYPE_PRODUCT), 1);
89  $this->assertEquals($expected, $this->model->findAllByData(1, 1, 'cms', 1));
90  $this->assertEquals($expected, $this->model->findAllByData(1, 1, 'cms'));
91  }
92 
96  public function testGetByIdentifiersProduct()
97  {
98  $data =[
99  [
100  'url_rewrite_id' => '1',
101  'entity_type' => 'product',
102  'entity_id' => '3',
103  'request_path' => 'request_path',
104  'target_path' => 'target_path',
105  'redirect_type' => 'redirect_type',
106  'store_id' => '4',
107  'description' => 'description',
108  'is_autogenerated' => '1',
109  'metadata' => '{}'
110  ]
111  ];
112 
113  $dataProductMapMock = $this->createMock(DataProductUrlRewriteDatabaseMap::class);
114  $this->databaseMapPoolMock->expects($this->once())
115  ->method('getDataMap')
116  ->with(DataProductUrlRewriteDatabaseMap::class, 1)
117  ->willReturn($dataProductMapMock);
118 
119  $this->urlFinderMock->expects($this->never())
120  ->method('findAllByData')
121  ->willReturn([]);
122 
123  $dataProductMapMock->expects($this->once())
124  ->method('getData')
125  ->willReturn($data);
126 
127  $urlRewriteResultArray = $this->model->findAllByData(1, 1, UrlRewriteFinder::ENTITY_TYPE_PRODUCT, 1);
128  $this->assertEquals($data[0], $urlRewriteResultArray[0]->toArray());
129  }
130 
135  {
136  $data =[
137  [
138  'url_rewrite_id' => '1',
139  'entity_type' => 'category',
140  'entity_id' => '3',
141  'request_path' => 'request_path',
142  'target_path' => 'target_path',
143  'redirect_type' => 'redirect_type',
144  'store_id' => '4',
145  'description' => 'description',
146  'is_autogenerated' => '1',
147  'metadata' => '{}'
148  ]
149  ];
150 
151  $dataCategoryMapMock = $this->createMock(DataCategoryUrlRewriteDatabaseMap::class);
152  $this->databaseMapPoolMock->expects($this->once())
153  ->method('getDataMap')
154  ->with(DataCategoryUrlRewriteDatabaseMap::class, 1)
155  ->willReturn($dataCategoryMapMock);
156 
157  $this->urlFinderMock->expects($this->never())
158  ->method('findAllByData')
159  ->willReturn([]);
160 
161  $dataCategoryMapMock->expects($this->once())
162  ->method('getData')
163  ->willReturn($data);
164 
165  $urlRewriteResultArray = $this->model->findAllByData(1, 1, UrlRewriteFinder::ENTITY_TYPE_CATEGORY, 1);
166  $this->assertEquals($data[0], $urlRewriteResultArray[0]->toArray());
167  }
168 }