Skip to content

Commit 8fd5123

Browse files
committed
adding unit test
1 parent 28ec3f8 commit 8fd5123

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed

lib/internal/Magento/Framework/Filter/Test/Unit/TemplateTest.php

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,186 @@ public function varDirectiveDataProvider()
179179
],
180180
];
181181
}
182+
183+
/**
184+
* @covers \Magento\Framework\Filter\Template::filterFor
185+
* @dataProvider loopPatternDataProvider
186+
*/
187+
public function testLoopPattern($construction, $variables, $expectedResult)
188+
{
189+
190+
$this->templateFilter->setVariables($variables);
191+
$this->assertEquals($expectedResult, $this->invokeMethod($this->templateFilter, 'filterFor', [$construction]));
192+
}
193+
194+
195+
/**
196+
* @return array
197+
*/
198+
public function loopPatternDataProvider()
199+
{
200+
201+
return [
202+
'no loop tag' => $this->getTemplateAndExpectedResults('noLoopTag'),
203+
'no loop body tag' => $this->getTemplateAndExpectedResults('noBodyTag'),
204+
'no item tag' => $this->getTemplateAndExpectedResults('noItemTag'),
205+
'no item, no body tags' => $this->getTemplateAndExpectedResults('noItemNoBodyTag'),
206+
'no item, no data, no body tags' => $this->getTemplateAndExpectedResults('noItemNoDataNoBodyTag'),
207+
208+
];
209+
}
210+
211+
/**
212+
* Call protected/private method of a class.
213+
*
214+
* @param object &$object
215+
* @param string $methodName
216+
* @param array $parameters
217+
*
218+
* @return mixed Method return.
219+
*/
220+
private function invokeMethod(&$object, $methodName, array $parameters = [])
221+
{
222+
$reflection = new \ReflectionClass(get_class($object));
223+
$method = $reflection->getMethod($methodName);
224+
$method->setAccessible(true);
225+
226+
return $method->invokeArgs($object, $parameters);
227+
}
228+
229+
/**
230+
* @param $type
231+
* @return array
232+
*/
233+
public function getTemplateAndExpectedResults($type)
234+
{
235+
236+
switch ($type) {
237+
case 'noLoopTag':
238+
$template = $expected = '';
239+
break;
240+
case 'noBodyTag':
241+
$template = <<<TEMPLATE
242+
<ul>
243+
{{for item in order.all_visible_items}}{{/for}}
244+
</ul>
245+
TEMPLATE;
246+
$expected = <<<TEMPLATE
247+
<ul>
248+
{{for item in order.all_visible_items}}{{/for}}
249+
</ul>
250+
TEMPLATE;
251+
break;
252+
case 'noItemTag':
253+
$template = <<<TEMPLATE
254+
<ul>
255+
{{for in order.all_visible_items}}
256+
<li>
257+
{{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
258+
</li>
259+
{{/for}}
260+
</ul>
261+
TEMPLATE;
262+
$expected = <<<TEMPLATE
263+
<ul>
264+
{{for in order.all_visible_items}}
265+
<li>
266+
{{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
267+
</li>
268+
{{/for}}
269+
</ul>
270+
TEMPLATE;
271+
break;
272+
case 'noItemNoBodyTag':
273+
$template = <<<TEMPLATE
274+
<ul>
275+
{{for in order.all_visible_items}}
276+
277+
{{/for}}
278+
</ul>
279+
TEMPLATE;
280+
$expected = <<<TEMPLATE
281+
<ul>
282+
{{for in order.all_visible_items}}
283+
284+
{{/for}}
285+
</ul>
286+
TEMPLATE;
287+
break;
288+
case 'noItemNoDataNoBodyTag':
289+
$template = <<<TEMPLATE
290+
<ul>
291+
{{for in }}
292+
293+
{{/for}}
294+
</ul>
295+
TEMPLATE;
296+
$expected = <<<TEMPLATE
297+
<ul>
298+
{{for in }}
299+
300+
{{/for}}
301+
</ul>
302+
TEMPLATE;
303+
break;
304+
default:
305+
$template = <<<TEMPLATE
306+
<ul>
307+
{{for item in order.all_visible_items}}
308+
<li>
309+
index: {{var loop.index}} sku: {{var item.sku}} name: {{var item.name}} price: {{var item.price}} quantity: {{var item.ordered_qty}}
310+
</li>
311+
{{/for}}
312+
</ul>
313+
TEMPLATE;
314+
$expected = <<<TEMPLATE
315+
<ul>
316+
317+
<li>
318+
index: 0 sku: ABC123 name: Product ABC price: 123 quantity: 2
319+
</li>
320+
321+
<li>
322+
index: 1 sku: DOREMI name: Product DOREMI price: 456 quantity: 1
323+
</li>
324+
325+
</ul>
326+
TEMPLATE;
327+
328+
}
329+
return [
330+
$template,
331+
['order' => $this->getObjectData()],
332+
$expected
333+
];
334+
}
335+
336+
/**
337+
* @return object
338+
*/
339+
private function getObjectData()
340+
{
341+
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
342+
$dataObject = $objectManager->getObject('\Magento\Framework\DataObject');
343+
344+
/* $var @dataObject \Magento\Framework\DataObject */
345+
346+
$visibleItems = [
347+
[
348+
'sku' => 'ABC123',
349+
'name' => 'Product ABC',
350+
'price' => '123',
351+
'ordered_qty' => '2'
352+
],
353+
[
354+
'sku' => 'DOREMI',
355+
'name' => 'Product DOREMI',
356+
'price' => '456',
357+
'ordered_qty' => '1'
358+
]
359+
];
360+
361+
$dataObject->setAllVisibleItems($visibleItems);
362+
return $dataObject;
363+
}
182364
}

0 commit comments

Comments
 (0)