Skip to content

Commit 7680729

Browse files
author
Oleksii Korshenko
committed
MAGETWO-70866: Enabling the use of looping (for in ..) into Template.php #9401
- Merge Pull Request #9401 from thiagolima-bm/magento2:develop - Merged commits: 1. 7717a56 2. 3026960 3. 18ed2eb 4. e77cedf 5. 6da53be 6. a69e9cd 7. 104e664 8. 28e9d61 9. 9111eb5 10. 37f49b7 11. 28ec3f8 12. 8fd5123
2 parents c955c32 + 8fd5123 commit 7680729

File tree

3 files changed

+553
-134
lines changed

3 files changed

+553
-134
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
<?php
2+
/**
3+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Filter;
7+
8+
/**
9+
* Class TemplateTest
10+
* @package Magento\Framework\Filter
11+
*/
12+
class TemplateTest extends \PHPUnit_Framework_TestCase
13+
{
14+
/**
15+
* @var \Magento\Framework\Filter\Template
16+
*/
17+
private $templateFilter;
18+
19+
protected function setUp()
20+
{
21+
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
22+
$this->templateFilter = $objectManager->getObject('Magento\Framework\Filter\Template');
23+
}
24+
25+
/**
26+
* @param array $results
27+
* @param array $values
28+
* @dataProvider getFilterForDataProvider
29+
*/
30+
public function testFilterFor($results, $values)
31+
{
32+
33+
$this->templateFilter->setVariables(array('order' => $this->getOrder(), 'things' => $this->getThings()));
34+
$this->assertEquals($results, $this->invokeMethod($this->templateFilter, 'filterFor', [$values]));
35+
36+
}
37+
38+
/**
39+
* @return \Magento\Framework\DataObject
40+
*/
41+
private function getOrder()
42+
{
43+
$order = new \Magento\Framework\DataObject();
44+
45+
$visibleItems = [
46+
[
47+
'sku' => 'ABC123',
48+
'name' => 'Product ABC',
49+
'price' => '123',
50+
'ordered_qty' => '2'
51+
]
52+
];
53+
54+
$order->setAllVisibleItems($visibleItems);
55+
return $order;
56+
57+
}
58+
59+
public function getThings()
60+
{
61+
return [
62+
['name' => 'Richard', 'age' => 24],
63+
['name' => 'Jane', 'age' => 12],
64+
['name' => 'Spot', 'age' => 7],
65+
];
66+
67+
}
68+
69+
/**
70+
* @return array
71+
*/
72+
public function getFilterForDataProvider()
73+
{
74+
$template = <<<TEMPLATE
75+
<ul>
76+
{{for thing in things}}
77+
<li>
78+
{{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
79+
</li>
80+
{{/for}}
81+
</ul>
82+
TEMPLATE;
83+
84+
$expectedResult = <<<EXPECTED_RESULT
85+
<ul>
86+
87+
<li>
88+
0 name: Richard, lastname: , age: 24
89+
</li>
90+
91+
<li>
92+
1 name: Jane, lastname: , age: 12
93+
</li>
94+
95+
<li>
96+
2 name: Spot, lastname: , age: 7
97+
</li>
98+
99+
</ul>
100+
EXPECTED_RESULT;
101+
102+
$template2 = <<<TEMPLATE
103+
<ul>
104+
{{for item in order.all_visible_items}}
105+
<li>
106+
index: {{var loop.index}} sku: {{var item.sku}} name: {{var item.name}} price: {{var item.price}} quantity: {{var item.ordered_qty}}
107+
</li>
108+
{{/for}}
109+
</ul>
110+
TEMPLATE;
111+
112+
$expectedResult2 = <<<EXPECTED_RESULT
113+
<ul>
114+
115+
<li>
116+
index: 0 sku: ABC123 name: Product ABC price: 123 quantity: 2
117+
</li>
118+
119+
</ul>
120+
EXPECTED_RESULT;
121+
return [
122+
[
123+
$expectedResult,
124+
$template
125+
],
126+
[
127+
$expectedResult2,
128+
$template2
129+
]
130+
];
131+
}
132+
133+
134+
/**
135+
* Call protected/private method of a class.
136+
*
137+
* @param object &$object
138+
* @param string $methodName
139+
* @param array $parameters
140+
*
141+
* @return mixed Method return.
142+
*/
143+
private function invokeMethod(&$object, $methodName, array $parameters = [])
144+
{
145+
$reflection = new \ReflectionClass(get_class($object));
146+
$method = $reflection->getMethod($methodName);
147+
$method->setAccessible(true);
148+
149+
return $method->invokeArgs($object, $parameters);
150+
}
151+
}

0 commit comments

Comments
 (0)