Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
MultiDimensionProviderTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
10 use \Magento\Framework\Indexer\MultiDimensionProvider;
11 use \Magento\Framework\Indexer\DimensionProviderInterface;
12 use \Magento\Framework\Indexer\Dimension;
13 
14 class MultiDimensionProviderTest extends \PHPUnit\Framework\TestCase
15 {
19  public function testWithNoDataProviders()
20  {
21  // prepare expected dimensions
22  $expectedDimensions = [[]];
23 
24  // collect actual dimensions
25  $multiDimensionProvider = new MultiDimensionProvider([]);
26 
27  $actualDimensions = [];
28  foreach ($multiDimensionProvider as $dimension) {
29  $actualDimensions[] = $dimension;
30  }
31 
32  $this->assertSame($expectedDimensions, $actualDimensions);
33  }
34 
58  {
59  // prepare expected dimensions
60  $dimensionXData = [
61  $this->getDimensionMock('x', '1'),
62  $this->getDimensionMock('x', '2'),
63  $this->getDimensionMock('x', '3'),
64  ];
65 
66  $dimensionYData = [
67  $this->getDimensionMock('y', '1'),
68  $this->getDimensionMock('y', '2'),
69  $this->getDimensionMock('y', '3'),
70  $this->getDimensionMock('y', '4'),
71  $this->getDimensionMock('y', '5'),
72  ];
73 
74  $dimensionZData = [
75  $this->getDimensionMock('z', '1'),
76  $this->getDimensionMock('z', '2'),
77  ];
78 
79  $expectedDimensions = [];
80 
81  foreach ($dimensionXData as $dimensionX) {
82  foreach ($dimensionYData as $dimensionY) {
83  foreach ($dimensionZData as $dimensionZ) {
84  $expectedDimensions[] = [
85  $dimensionX->getName() => $dimensionX,
86  $dimensionY->getName() => $dimensionY,
87  $dimensionZ->getName() => $dimensionZ,
88  ];
89  }
90  }
91  }
92 
93  // collect actual dimensions
94  $multiDimensionProvider = new MultiDimensionProvider(
95  [
96  $this->getDimensionProviderMock($dimensionXData),
97  $this->getDimensionProviderMock($dimensionYData),
98  $this->getDimensionProviderMock($dimensionZData),
99  ]
100  );
101 
102  $actualDimensions = [];
103  foreach ($multiDimensionProvider as $dimension) {
104  $actualDimensions[] = $dimension;
105  }
106 
107  $this->assertSame($expectedDimensions, $actualDimensions);
108  }
109 
114  {
115  // prepare expected dimensions
116  $dimensionXData = [
117  $this->getDimensionMock('x', '1'),
118  $this->getDimensionMock('x', '2'),
119  $this->getDimensionMock('x', '3'),
120  ];
121 
122  $dimensionZData = [
123  $this->getDimensionMock('z', '1'),
124  $this->getDimensionMock('z', '2'),
125  ];
126 
127  // collect actual dimensions
128  $multiDimensionProvider = new MultiDimensionProvider(
129  [
130  $this->getDimensionProviderMock($dimensionXData),
131  $this->getDimensionProviderMock($dimensionZData),
132  ]
133  );
134 
135  // first iteration
136  $actualDimensions1st = [];
137  foreach ($multiDimensionProvider as $dimension) {
138  $actualDimensions1st[] = $dimension;
139  }
140 
141  // second iteration
142  $actualDimensions2nd = [];
143  foreach ($multiDimensionProvider as $dimension) {
144  $actualDimensions2nd[] = $dimension;
145  }
146 
147  $this->assertSame($actualDimensions1st, $actualDimensions2nd);
148  }
149 
157  {
158  // collect actual dimensions
159  $multiDimensionProvider = new MultiDimensionProvider(
160  [
161  $this->getDimensionProviderMock([]),
162  $this->getDimensionProviderMock([]),
163  ]
164  );
165 
166  $actualDimensions = [];
167  foreach ($multiDimensionProvider as $dimension) {
168  $actualDimensions[] = $dimension;
169  }
170  }
171 
179  {
180 
181  // prepare expected dimensions
182  $dimensionXData = [
183  $this->getDimensionMock('x', '1'),
184  $this->getDimensionMock('x', '2'),
185  $this->getDimensionMock('x', '3'),
186  ];
187 
188  $dimensionYData = [
189  $this->getDimensionMock('y', '1'),
190  $this->getDimensionMock('y', '2'),
191  $this->getDimensionMock('y', '3'),
192  $this->getDimensionMock('y', '4'),
193  $this->getDimensionMock('y', '5'),
194  ];
195 
196  $dimensionZData = [];
197 
198  // collect actual dimensions
199  $multiDimensionProvider = new MultiDimensionProvider(
200  [
201  $this->getDimensionProviderMock($dimensionXData),
202  $this->getDimensionProviderMock($dimensionYData),
203  $this->getDimensionProviderMock($dimensionZData),
204  ]
205  );
206 
207  $actualDimensions = [];
208  foreach ($multiDimensionProvider as $dimension) {
209  $actualDimensions[] = $dimension;
210  }
211  }
212 
213  private function getDimensionProviderMock($dimensions)
214  {
215  $dimensionProviderMock = $this->getMockBuilder(DimensionProviderInterface::class)
216  ->disableOriginalConstructor()
217  ->disableOriginalClone()
218  ->disableArgumentCloning()
219  ->disallowMockingUnknownTypes()
220  ->setMethods(['getIterator'])
221  ->getMockForAbstractClass();
222 
223  $dimensionProviderMock->expects($this->any())
224  ->method('getIterator')
225  ->will(
226  $this->returnCallback(
227  function () use ($dimensions) {
228  return \SplFixedArray::fromArray($dimensions);
229  }
230  )
231  );
232 
233  return $dimensionProviderMock;
234  }
235 
236  private function getDimensionMock(string $name, string $value)
237  {
238  $dimensionMock = $this->getMockBuilder(Dimension::class)
239  ->disableOriginalConstructor()
240  ->disableOriginalClone()
241  ->disableArgumentCloning()
242  ->disallowMockingUnknownTypes()
243  ->setMethods(['getName', 'getValue'])
244  ->getMock();
245 
246  $dimensionMock->expects($this->any())
247  ->method('getName')
248  ->willReturn($name);
249 
250  $dimensionMock->expects($this->any())
251  ->method('getValue')
252  ->willReturn($value);
253 
254  return $dimensionMock;
255  }
256 }
$value
Definition: gender.phtml:16
if(!isset($_GET['name'])) $name
Definition: log.php:14