‪TYPO3CMS  11.5
AbstractFinisherTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Prophecy\Argument;
21 use Prophecy\Prophecy\ObjectProphecy;
30 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
31 
35 class ‪AbstractFinisherTest extends UnitTestCase
36 {
37  use \Prophecy\PhpUnit\ProphecyTrait;
42  {
43  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
44  AbstractFinisher::class,
45  [],
46  '',
47  false
48  );
49 
50  self::assertNull($mockAbstractFinisher->_call('parseOption', 'translation'));
51  }
52 
57  {
58  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
59  AbstractFinisher::class,
60  [],
61  '',
62  false
63  );
64 
65  $mockAbstractFinisher->_set('options', []);
66 
67  self::assertNull($mockAbstractFinisher->_call('parseOption', 'foo'));
68  }
69 
74  {
75  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
76  AbstractFinisher::class,
77  [],
78  '',
79  false
80  );
81 
82  $mockAbstractFinisher->_set('options', []);
83 
84  self::assertNull($mockAbstractFinisher->_call('parseOption', 'foo'));
85  }
86 
90  public function ‪parseOptionReturnsBoolOptionValuesAsBool(): void
91  {
92  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
93  AbstractFinisher::class,
94  [],
95  '',
96  false
97  );
98 
99  $mockAbstractFinisher->_set('options', [
100  'foo1' => false,
101  ]);
102 
103  $expected = false;
104 
105  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'foo1'));
106  }
107 
112  {
113  $expected = 'defaultValue';
114 
115  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
116  AbstractFinisher::class,
117  [],
118  '',
119  false,
120  false,
121  true,
122  [
123  'translateFinisherOption',
124  ]
125  );
126 
127  $mockAbstractFinisher
128  ->method('translateFinisherOption')
129  ->willReturnArgument(0);
130 
131  $mockAbstractFinisher->_set('options', []);
132  $mockAbstractFinisher->_set('defaultOptions', [
133  'subject' => $expected,
134  ]);
135 
136  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
137 
138  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
139  $formRuntimeProphecy->offsetExists(Argument::cetera())->willReturn(true);
140  $formRuntimeProphecy->offsetGet(Argument::cetera())->willReturn(null);
141 
142  $finisherContextProphecy->getFormRuntime(Argument::cetera())
143  ->willReturn($formRuntimeProphecy->reveal());
144  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())
145  ->willReturn(new ‪FinisherVariableProvider());
146 
147  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
148 
149  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
150  }
151 
156  {
157  $elementIdentifier = 'element-identifier-1';
158  $expected = 'defaultValue';
159 
160  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
161  AbstractFinisher::class,
162  [],
163  '',
164  false,
165  false,
166  true,
167  [
168  'translateFinisherOption',
169  ]
170  );
171 
172  $mockAbstractFinisher
173  ->method('translateFinisherOption')
174  ->willReturnArgument(0);
175 
176  $mockAbstractFinisher->_set('options', [
177  'subject' => '{' . $elementIdentifier . '}',
178  ]);
179  $mockAbstractFinisher->_set('defaultOptions', [
180  'subject' => $expected,
181  ]);
182 
183  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
184 
185  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
186  $elementIdentifier => '',
187  ]);
188 
189  $finisherContextProphecy->getFormRuntime(Argument::cetera())
190  ->willReturn($formRuntimeProphecy->reveal());
191 
192  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
193 
194  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
195  }
196 
201  {
202  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
203  AbstractFinisher::class,
204  [],
205  '',
206  false,
207  false,
208  true,
209  [
210  'translateFinisherOption',
211  ]
212  );
213 
214  $elementIdentifier = 'element-identifier-1';
215  $elementValue = 'element-value-1';
216  $elementReferenceName = '{' . $elementIdentifier . '}';
217 
218  $translationValue = 'subject: ' . $elementReferenceName;
219  $expected = 'subject: ' . $elementValue;
220 
221  $mockAbstractFinisher
222  ->method('translateFinisherOption')
223  ->willReturn($translationValue);
224 
225  $mockAbstractFinisher->_set('options', [
226  'subject' => '',
227  ]);
228 
229  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
230 
231  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
232  $elementIdentifier => $elementValue,
233  ]);
234 
235  $finisherContextProphecy->getFormRuntime(Argument::cetera())
236  ->willReturn($formRuntimeProphecy->reveal());
237 
238  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
239 
240  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
241  }
242 
247  {
248  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
249  AbstractFinisher::class,
250  [],
251  '',
252  false
253  );
254 
255  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
256 
257  $input = ['bar', 'foobar', ['x', 'y']];
258  $expected = ['bar', 'foobar', ['x', 'y']];
259 
260  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
261  }
262 
267  {
268  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
269  AbstractFinisher::class,
270  [],
271  '',
272  false
273  );
274 
275  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
276 
277  $input = 'foobar';
278  $expected = 'foobar';
279 
280  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
281  }
282 
287  {
288  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
289  AbstractFinisher::class,
290  [],
291  '',
292  false
293  );
294 
295  $elementIdentifier = 'element-identifier-1';
296  $input = '{' . $elementIdentifier . '}';
297  $expected = 'element-value';
298 
299  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
300  $elementIdentifier => $expected,
301  ]);
302 
303  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
304  }
305 
310  {
311  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
312  AbstractFinisher::class,
313  [],
314  '',
315  false
316  );
317 
318  $elementIdentifier1 = 'element-identifier-1';
319  $elementValue1 = 'element-value-1';
320  $elementIdentifier2 = 'element-identifier-2';
321  $elementValue2 = 'element-value-2';
322 
323  $input = '{' . $elementIdentifier1 . '},{' . $elementIdentifier2 . '}';
324  $expected = $elementValue1 . ',' . $elementValue2;
325 
326  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
327  $elementIdentifier1 => $elementValue1,
328  $elementIdentifier2 => $elementValue2,
329  ]);
330 
331  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
332  }
333 
338  {
339  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
340  AbstractFinisher::class,
341  [],
342  '',
343  false
344  );
345 
346  $elementIdentifier = 'element-identifier-1';
347  $input = '{' . $elementIdentifier . '}';
348  $expected = ['bar', 'foobar'];
349 
350  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
351  $elementIdentifier => $expected,
352  ]);
353 
354  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
355  }
356 
361  {
362  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
363  AbstractFinisher::class,
364  [],
365  '',
366  false
367  );
368 
369  $elementIdentifier1 = 'element-identifier-1';
370  $elementValue1 = ['klaus', 'fritz'];
371  $elementIdentifier2 = 'element-identifier-2';
372  $elementValue2 = ['stan', 'steve'];
373 
374  $input = [
375  '{' . $elementIdentifier1 . '}',
376  'static value',
377  'norbert' => [
378  'lisa',
379  '{' . $elementIdentifier1 . '}',
380  '{' . $elementIdentifier2 . '}',
381  ],
382  ];
383  $expected = [
384  ['klaus', 'fritz'],
385  'static value',
386  'norbert' => [
387  'lisa',
388  ['klaus', 'fritz'],
389  ['stan', 'steve'],
390  ],
391  ];
392 
393  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
394  $elementIdentifier1 => $elementValue1,
395  $elementIdentifier2 => $elementValue2,
396  ]);
397 
398  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
399  }
400 
405  {
406  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
407  AbstractFinisher::class,
408  [],
409  '',
410  false
411  );
412 
413  $elementIdentifier = 'element-identifier-1';
414  $input = '{' . $elementIdentifier . '}';
415  $expected = '{' . $elementIdentifier . '}';
416 
417  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
418  $elementIdentifier => $expected,
419  ]);
420 
421  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
422  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())->willReturn(new ‪FinisherVariableProvider());
423  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
424 
425  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
426  }
427 
432  {
433  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
434  AbstractFinisher::class,
435  [],
436  '',
437  false
438  );
439 
440  $input = '{__currentTimestamp}';
441  $expected = '#^([0-9]{10})$#';
442 
443  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
444 
445  self::assertMatchesRegularExpression(
446  $expected,
447  (string)$mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal())
448  );
449  }
450 
455  {
456  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
457  AbstractFinisher::class,
458  [],
459  '',
460  false
461  );
462 
463  $elementIdentifier1 = 'element-identifier-1';
464  $elementValue1 = 'norbert';
465  $elementIdentifier2 = 'element-identifier-2';
466  $elementValue2 = ['stan', 'steve'];
467 
468  $input = [
469  '{' . $elementIdentifier1 . '}' => [
470  'lisa',
471  '{' . $elementIdentifier2 . '}',
472  ],
473  ];
474  $expected = [
475  'norbert' => [
476  'lisa',
477  ['stan', 'steve'],
478  ],
479  ];
480 
481  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
482  $elementIdentifier1 => $elementValue1,
483  $elementIdentifier2 => $elementValue2,
484  ]);
485 
486  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
487  }
488 
493  {
494  $date = new \DateTime('@1574415600');
495  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
496  'date-1' => $date,
497  ]);
498 
499  $stringableElement = new class () implements ‪StringableFormElementInterface {
503  public function valueToString($value): string
504  {
505  return $value->format('Y-m-d');
506  }
507  };
508  $formDefinitionProphecy = $this->prophesize(FormDefinition::class);
509  $formDefinitionProphecy->getElementByIdentifier('date-1')->willReturn($stringableElement);
510  $formRuntimeProphecy->getFormDefinition()->willReturn($formDefinitionProphecy->reveal());
511 
512  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
513  AbstractFinisher::class,
514  [],
515  '',
516  false
517  );
518  $result = $mockAbstractFinisher->_call(
519  'substituteRuntimeReferences',
520  'When: {date-1}',
521  $formRuntimeProphecy->reveal()
522  );
523 
524  self::assertSame('When: 2019-11-22', $result);
525  }
526 
531  {
532  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
533  'date-1' => new \DateTime(),
534  ]);
535 
536  $formDefinitionProphecy = $this->prophesize(FormDefinition::class);
537  $formDefinitionProphecy->getElementByIdentifier('date-1')->willReturn($this->prophesize(FormElementInterface::class)->reveal());
538  $formRuntimeProphecy->getFormDefinition()->willReturn($formDefinitionProphecy->reveal());
539 
540  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
541  AbstractFinisher::class,
542  [],
543  '',
544  false
545  );
546 
547  $this->expectException(FinisherException::class);
548  $this->expectExceptionCode(1574362327);
549 
550  $mockAbstractFinisher->_call(
551  'substituteRuntimeReferences',
552  'When: {date-1}',
553  $formRuntimeProphecy->reveal()
554  );
555  }
556 
561  {
562  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
563  AbstractFinisher::class,
564  [],
565  '',
566  false
567  );
568 
569  $elementIdentifier = 'element-identifier-1';
570  $input = 'BEFORE {' . $elementIdentifier . '} AFTER';
571 
572  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
573  $elementIdentifier => ['value-1', 'value-2'],
574  ]);
575 
576  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
577  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())->willReturn(new ‪FinisherVariableProvider());
578  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
579 
580  $this->expectException(FinisherException::class);
581  $this->expectExceptionCode(1519239265);
582 
583  $mockAbstractFinisher->_call(
584  'substituteRuntimeReferences',
585  $input,
586  $formRuntimeProphecy->reveal()
587  );
588  }
589 
594  protected function ‪createFormRuntimeProphecy(array $values): ObjectProphecy
595  {
596  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
597  foreach ($values as $key => $value) {
598  $formRuntimeProphecy->offsetExists(Argument::exact($key))->willReturn(true);
599  $formRuntimeProphecy->offsetGet(Argument::exact($key))->willReturn($value);
600  }
601  return $formRuntimeProphecy;
602  }
603 }
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:359
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsStringIfInputIsString
‪substituteRuntimeReferencesReturnsStringIfInputIsString()
Definition: AbstractFinisherTest.php:265
‪TYPO3\CMS\Form\Domain\Finishers\FinisherVariableProvider
Definition: FinisherVariableProvider.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:308
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\createFormRuntimeProphecy
‪ObjectProphecy< FormRuntime > createFormRuntimeProphecy(array $values)
Definition: AbstractFinisherTest.php:593
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesConvertsObjectsToString
‪substituteRuntimeReferencesConvertsObjectsToString()
Definition: AbstractFinisherTest.php:491
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement
‪substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement()
Definition: AbstractFinisherTest.php:403
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:285
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameNotExistsWithinDefaultOptions
‪parseOptionReturnsNullIfOptionNameNotExistsWithinDefaultOptions()
Definition: AbstractFinisherTest.php:72
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys
‪substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys()
Definition: AbstractFinisherTest.php:453
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray
‪substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray()
Definition: AbstractFinisherTest.php:559
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsArrayIfInputIsArray
‪substituteRuntimeReferencesReturnsArrayIfInputIsArray()
Definition: AbstractFinisherTest.php:245
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameNotExistsWithinOptions
‪parseOptionReturnsNullIfOptionNameNotExistsWithinOptions()
Definition: AbstractFinisherTest.php:55
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:336
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions
‪parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions()
Definition: AbstractFinisherTest.php:110
‪TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher
Definition: AbstractFinisher.php:42
‪TYPO3\CMS\Form\Domain\Model\FormElements\FormElementInterface
Definition: FormElementInterface.php:40
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameIsTranslation
‪parseOptionReturnsNullIfOptionNameIsTranslation()
Definition: AbstractFinisherTest.php:40
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsBoolOptionValuesAsBool
‪parseOptionReturnsBoolOptionValuesAsBool()
Definition: AbstractFinisherTest.php:89
‪TYPO3\CMS\Form\Domain\Finishers\Exception\FinisherException
Definition: FinisherException.php:25
‪TYPO3\CMS\Form\Domain\Model\FormElements\StringableFormElementInterface
Definition: StringableFormElementInterface.php:30
‪TYPO3\CMS\Form\Domain\Finishers\FinisherContext
Definition: FinisherContext.php:38
‪TYPO3\CMS\Form\Domain\Model\FormDefinition
Definition: FormDefinition.php:226
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement
‪substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement()
Definition: AbstractFinisherTest.php:529
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest
Definition: AbstractFinisherTest.php:36
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionResolvesFormElementReferenceFromTranslation
‪parseOptionResolvesFormElementReferenceFromTranslation()
Definition: AbstractFinisherTest.php:199
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty
‪parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty()
Definition: AbstractFinisherTest.php:154
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers
Definition: AbstractFinisherTest.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger
‪substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger()
Definition: AbstractFinisherTest.php:430