Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Protected Member Functions
TemplateTest Class Reference
Inheritance diagram for TemplateTest:

Public Member Functions

 testFilter ()
 
 testAfterFilter ()
 
 testAfterFilterCallbackReset ()
 
 testVarDirective ($construction, $variables, $expectedResult)
 
 varDirectiveDataProvider ()
 
 testLoopPattern ($construction, $variables, $expectedResult)
 
 loopPatternDataProvider ()
 
 getTemplateAndExpectedResults ($type)
 

Protected Member Functions

 setUp ()
 

Detailed Description

Definition at line 9 of file TemplateTest.php.

Member Function Documentation

◆ getTemplateAndExpectedResults()

getTemplateAndExpectedResults (   $type)
Parameters
$type
Returns
array

Definition at line 255 of file TemplateTest.php.

256  {
257  switch ($type) {
258  case 'noLoopTag':
259  $template = $expected = '';
260  break;
261  case 'noBodyTag':
262  $template = <<<TEMPLATE
263 <ul>
264 {{for item in order.all_visible_items}}{{/for}}
265 </ul>
266 TEMPLATE;
267  $expected = <<<TEMPLATE
268 <ul>
269 {{for item in order.all_visible_items}}{{/for}}
270 </ul>
271 TEMPLATE;
272  break;
273  case 'noItemTag':
274  $template = <<<TEMPLATE
275 <ul>
276 {{for in order.all_visible_items}}
277  <li>
278  {{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
279  </li>
280 {{/for}}
281 </ul>
282 TEMPLATE;
283  $expected = <<<TEMPLATE
284 <ul>
285 {{for in order.all_visible_items}}
286  <li>
287  {{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
288  </li>
289 {{/for}}
290 </ul>
291 TEMPLATE;
292  break;
293  case 'noItemNoBodyTag':
294  $template = <<<TEMPLATE
295 <ul>
296 {{for in order.all_visible_items}}
297 
298 {{/for}}
299 </ul>
300 TEMPLATE;
301  $expected = <<<TEMPLATE
302 <ul>
303 {{for in order.all_visible_items}}
304 
305 {{/for}}
306 </ul>
307 TEMPLATE;
308  break;
309  case 'noItemNoDataNoBodyTag':
310  $template = <<<TEMPLATE
311 <ul>
312 {{for in }}
313 
314 {{/for}}
315 </ul>
316 TEMPLATE;
317  $expected = <<<TEMPLATE
318 <ul>
319 {{for in }}
320 
321 {{/for}}
322 </ul>
323 TEMPLATE;
324  break;
325  default:
326  $template = <<<TEMPLATE
327 <ul>
328  {{for item in order.all_visible_items}}
329  <li>
330  index: {{var loop.index}} sku: {{var item.sku}}
331  name: {{var item.name}} price: {{var item.price}} quantity: {{var item.ordered_qty}}
332  </li>
333  {{/for}}
334 </ul>
335 TEMPLATE;
336  $expected = <<<TEMPLATE
337 <ul>
338 
339  <li>
340  index: 0 sku: ABC123
341  name: Product ABC price: 123 quantity: 2
342  </li>
343 
344  <li>
345  index: 1 sku: DOREMI
346  name: Product DOREMI price: 456 quantity: 1
347  </li>
348 
349 </ul>
350 TEMPLATE;
351  }
352  return [$template, ['order' => $this->getObjectData()], $expected];
353  }
$type
Definition: item.phtml:13
$template
Definition: export.php:12

◆ loopPatternDataProvider()

loopPatternDataProvider ( )
Returns
array

Definition at line 222 of file TemplateTest.php.

223  {
224  return [
225  'no loop tag' => $this->getTemplateAndExpectedResults('noLoopTag'),
226  'no loop body tag' => $this->getTemplateAndExpectedResults('noBodyTag'),
227  'no item tag' => $this->getTemplateAndExpectedResults('noItemTag'),
228  'no item, no body tags' => $this->getTemplateAndExpectedResults('noItemNoBodyTag'),
229  'no item, no data, no body tags' => $this->getTemplateAndExpectedResults('noItemNoDataNoBodyTag'),
230  ];
231  }

◆ setUp()

setUp ( )
protected

Definition at line 16 of file TemplateTest.php.

17  {
18  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
19  $this->templateFilter = $objectManager->getObject(\Magento\Framework\Filter\Template::class);
20  }
$objectManager
Definition: bootstrap.php:17

◆ testAfterFilter()

testAfterFilter ( )

@covers \Magento\Framework\Filter\Template::afterFilter @covers \Magento\Framework\Filter\Template::addAfterFilterCallback

Definition at line 77 of file TemplateTest.php.

78  {
79  $value = 'test string';
80  $expectedResult = 'TEST STRING';
81 
82  // Build arbitrary object to pass into the addAfterFilterCallback method
83  $callbackObject = $this->getMockBuilder('stdObject')
84  ->setMethods(['afterFilterCallbackMethod'])
85  ->getMock();
86 
87  $callbackObject->expects($this->once())
88  ->method('afterFilterCallbackMethod')
89  ->with($value)
90  ->will($this->returnValue($expectedResult));
91 
92  // Add callback twice to ensure that the check in addAfterFilterCallback prevents the callback from being called
93  // more than once
94  $this->templateFilter->addAfterFilterCallback([$callbackObject, 'afterFilterCallbackMethod']);
95  $this->templateFilter->addAfterFilterCallback([$callbackObject, 'afterFilterCallbackMethod']);
96 
97  $this->assertEquals($expectedResult, $this->templateFilter->filter($value));
98  }
$value
Definition: gender.phtml:16

◆ testAfterFilterCallbackReset()

testAfterFilterCallbackReset ( )

@covers \Magento\Framework\Filter\Template::afterFilter @covers \Magento\Framework\Filter\Template::addAfterFilterCallback @covers \Magento\Framework\Filter\Template::resetAfterFilterCallbacks

Definition at line 105 of file TemplateTest.php.

106  {
107  $value = 'test string';
108  $expectedResult = 'TEST STRING';
109 
110  // Build arbitrary object to pass into the addAfterFilterCallback method
111  $callbackObject = $this->getMockBuilder('stdObject')
112  ->setMethods(['afterFilterCallbackMethod'])
113  ->getMock();
114 
115  $callbackObject->expects($this->once())
116  ->method('afterFilterCallbackMethod')
117  ->with($value)
118  ->will($this->returnValue($expectedResult));
119 
120  $this->templateFilter->addAfterFilterCallback([$callbackObject, 'afterFilterCallbackMethod']);
121 
122  // Callback should run and filter content
123  $this->assertEquals($expectedResult, $this->templateFilter->filter($value));
124 
125  // Callback should *not* run as callbacks should be reset
126  $this->assertEquals($value, $this->templateFilter->filter($value));
127  }
$value
Definition: gender.phtml:16

◆ testFilter()

testFilter ( )

Definition at line 22 of file TemplateTest.php.

23  {
24  $this->templateFilter->setVariables(
25  [
26  'customer' => new \Magento\Framework\DataObject(['firstname' => 'Felicia', 'lastname' => 'Henry']),
27  'company' => 'A. L. Price',
28  'street1' => '687 Vernon Street',
29  'city' => 'Parker Dam',
30  'region' => 'CA',
31  'postcode' => '92267',
32  'telephone' => '760-663-5876',
33  ]
34  );
35 
36  $template = <<<TEMPLATE
37 {{var customer.firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var customer.getLastname()}}
38 {{depend company}}{{var company}}{{/depend}}
39 {{if street1}}{{var street1}}
40 {{/if}}
41 {{depend street2}}{{var street2}}{{/depend}}
42 {{depend street3}}{{var street3}}{{/depend}}
43 {{depend street4}}{{var street4}}{{/depend}}
44 {{if city}}{{var city}}, {{/if}}{{if region}}{{var region}}, {{/if}}{{if postcode}}{{var postcode}}{{/if}}
45 {{var country}}
46 {{depend telephone}}T: {{var telephone}}{{/depend}}
47 {{depend fax}}F: {{var fax}}{{/depend}}
48 {{depend vat_id}}VAT: {{var vat_id}}{{/depend}}
49 TEMPLATE;
50 
51  $expectedResult = <<<EXPECTED_RESULT
52 Felicia Henry
53 A. L. Price
54 687 Vernon Street
55 
56 
57 
58 
59 Parker Dam, CA, 92267
60 
61 T: 760-663-5876
62 
63 
64 EXPECTED_RESULT;
65 
66  $this->assertEquals(
67  $expectedResult,
68  $this->templateFilter->filter($template),
69  'Template was processed incorrectly'
70  );
71  }
$template
Definition: export.php:12

◆ testLoopPattern()

testLoopPattern (   $construction,
  $variables,
  $expectedResult 
)

@covers \Magento\Framework\Filter\Template::filterFor @dataProvider loopPatternDataProvider

Definition at line 213 of file TemplateTest.php.

214  {
215  $this->templateFilter->setVariables($variables);
216  $this->assertEquals($expectedResult, $this->invokeMethod($this->templateFilter, 'filterFor', [$construction]));
217  }

◆ testVarDirective()

testVarDirective (   $construction,
  $variables,
  $expectedResult 
)

@covers \Magento\Framework\Filter\Template::varDirective @covers \Magento\Framework\Filter\Template::getVariable @covers \Magento\Framework\Filter\Template::getStackArgs @dataProvider varDirectiveDataProvider

Definition at line 135 of file TemplateTest.php.

136  {
137  $this->templateFilter->setVariables($variables);
138  $this->assertEquals($expectedResult, $this->templateFilter->filter($construction));
139  }

◆ varDirectiveDataProvider()

varDirectiveDataProvider ( )
Returns
array

Definition at line 144 of file TemplateTest.php.

145  {
146  /* @var $dataObjectVariable \Magento\Framework\DataObject|\PHPUnit_Framework_MockObject_MockObject */
147  $dataObjectVariable = $this->getMockBuilder(\Magento\Framework\DataObject::class)
148  ->disableOriginalConstructor()
149  ->disableProxyingToOriginalMethods()
150  ->setMethods(['bar'])
151  ->getMock();
152  $dataObjectVariable->expects($this->once())
153  ->method('bar')
154  ->willReturn('DataObject Method Return');
155 
156  /* @var $nonDataObjectVariable \Magento\Framework\Escaper|\PHPUnit_Framework_MockObject_MockObject */
157  $nonDataObjectVariable = $this->getMockBuilder(\Magento\Framework\Escaper::class)
158  ->disableOriginalConstructor()
159  ->getMock();
160  $nonDataObjectVariable->expects($this->once())
161  ->method('escapeHtml')
162  ->willReturnArgument(0);
163 
164  return [
165  'no variables' => [
166  '{{var}}',
167  [],
168  '{{var}}',
169  ],
170  'invalid variable' => [
171  '{{var invalid}}',
172  ['foobar' => 'barfoo'],
173  '',
174  ],
175  'string variable' => [
176  '{{var foobar}}',
177  ['foobar' => 'barfoo'],
178  'barfoo',
179  ],
180  'array argument to method' => [
181  '{{var foo.bar([param_1:value_1, param_2:$value_2, param_3:[a:$b, c:$d]])}}',
182  [
183  'foo' => $dataObjectVariable,
184  'value_2' => 'lorem',
185  'b' => 'bee',
186  'd' => 'dee',
187  ],
188  'DataObject Method Return'
189  ],
190  'non DataObject method call' => [
191  '{{var foo.escapeHtml($value)}}',
192  [
193  'foo' => $nonDataObjectVariable,
194  'value' => 'lorem'
195  ],
196  'lorem'
197  ],
198  'non DataObject undefined method call' => [
199  '{{var foo.undefinedMethod($value)}}',
200  [
201  'foo' => $nonDataObjectVariable,
202  'value' => 'lorem'
203  ],
204  ''
205  ],
206  ];
207  }

The documentation for this class was generated from the following file: