‪TYPO3CMS  ‪main
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 PHPUnit\Framework\Attributes\Test;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
30 final class ‪AbstractFinisherTest extends UnitTestCase
31 {
32  #[Test]
34  {
35  $subject = new ‪AbstractFinisherFixture();
36  self::assertNull($subject->parseOption('translation'));
37  }
38 
39  #[Test]
41  {
42  $subject = new ‪AbstractFinisherFixture();
43  $subject->options = [];
44  self::assertNull($subject->parseOption('foo'));
45  }
46 
47  #[Test]
49  {
50  $finisherContextMock = $this->createMock(FinisherContext::class);
51  $formRuntimeMock = $this->createMock(FormRuntime::class);
52  $formRuntimeMock->method('offsetExists')->with(self::anything())->willReturn(true);
53  $formRuntimeMock->method('offsetGet')->with(self::anything())->willReturn(null);
54  $finisherContextMock->method('getFormRuntime')->willReturn($formRuntimeMock);
55  $finisherContextMock->method('getFinisherVariableProvider')->willReturn(new ‪FinisherVariableProvider());
56 
57  $subject = new ‪AbstractFinisherFixture();
58  $subject->options = [];
59  $subject->defaultOptions = [
60  'subject' => 'defaultValue',
61  ];
62  $subject->finisherContext = $finisherContextMock;
63  self::assertSame('defaultValue', $subject->parseOption('subject'));
64  }
65 
66  #[Test]
68  {
69  $finisherContextMock = $this->createMock(FinisherContext::class);
70  $formRuntimeMock = $this->createMock(FormRuntime::class);
71  $formRuntimeMock->method('offsetExists')->with(self::anything())->willReturn(true);
72  $formRuntimeMock->method('offsetGet')->with(self::anything())->willReturn('');
73  $finisherContextMock->method('getFormRuntime')->willReturn($formRuntimeMock);
74 
75  $subject = new ‪AbstractFinisherFixture();
76  $subject->options = [
77  'subject' => '{element-identifier-1}',
78  ];
79  $subject->defaultOptions = [
80  'subject' => 'defaultValue',
81  ];
82  $subject->finisherContext = $finisherContextMock;
83  self::assertSame('defaultValue', $subject->parseOption('subject'));
84  }
85 
86  #[Test]
88  {
89  $formRuntimeMock = $this->createMock(FormRuntime::class);
90  $input = ['bar', 'foobar', ['x', 'y']];
91  $expected = ['bar', 'foobar', ['x', 'y']];
92  $subject = new ‪AbstractFinisherFixture();
93  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
94  }
95 
96  #[Test]
98  {
99  $formRuntimeMock = $this->createMock(FormRuntime::class);
100  $input = 'foobar';
101  $expected = 'foobar';
102  $subject = new ‪AbstractFinisherFixture();
103  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
104  }
105 
106  #[Test]
108  {
109  $elementIdentifier = 'element-identifier-1';
110  $input = '{' . $elementIdentifier . '}';
111  $expected = 'element-value';
112  $formRuntimeMock = $this->createMock(FormRuntime::class);
113  $formRuntimeMock->method('offsetExists')->with($elementIdentifier)->willReturn(true);
114  $formRuntimeMock->method('offsetGet')->with($elementIdentifier)->willReturn($expected);
115  $subject = new ‪AbstractFinisherFixture();
116  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
117  }
118 
119  #[Test]
121  {
122  $elementIdentifier1 = 'element-identifier-1';
123  $elementValue1 = 'element-value-1';
124  $elementIdentifier2 = 'element-identifier-2';
125  $elementValue2 = 'element-value-2';
126  $input = '{' . $elementIdentifier1 . '},{' . $elementIdentifier2 . '}';
127  $expected = $elementValue1 . ',' . $elementValue2;
128  $formRuntimeMock = $this->createMock(FormRuntime::class);
129  $formRuntimeMock->method('offsetExists')->willReturnMap([
130  [$elementIdentifier1, true],
131  [$elementIdentifier2, true],
132  ]);
133  $formRuntimeMock->method('offsetGet')->willReturnMap([
134  [$elementIdentifier1, $elementValue1],
135  [$elementIdentifier2, $elementValue2],
136  ]);
137  $subject = new ‪AbstractFinisherFixture();
138  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
139  }
140 
141  #[Test]
143  {
144  $elementIdentifier = 'element-identifier-1';
145  $input = '{' . $elementIdentifier . '}';
146  $expected = ['bar', 'foobar'];
147  $formRuntimeMock = $this->createMock(FormRuntime::class);
148  $formRuntimeMock->method('offsetExists')->with($elementIdentifier)->willReturn(true);
149  $formRuntimeMock->method('offsetGet')->with($elementIdentifier)->willReturn($expected);
150  $subject = new ‪AbstractFinisherFixture();
151  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
152  }
153 
154  #[Test]
156  {
157  $elementIdentifier1 = 'element-identifier-1';
158  $elementValue1 = ['klaus', 'fritz'];
159  $elementIdentifier2 = 'element-identifier-2';
160  $elementValue2 = ['stan', 'steve'];
161  $input = [
162  '{' . $elementIdentifier1 . '}',
163  'static value',
164  'norbert' => [
165  'lisa',
166  '{' . $elementIdentifier1 . '}',
167  '{' . $elementIdentifier2 . '}',
168  ],
169  ];
170  $expected = [
171  ['klaus', 'fritz'],
172  'static value',
173  'norbert' => [
174  'lisa',
175  ['klaus', 'fritz'],
176  ['stan', 'steve'],
177  ],
178  ];
179  $formRuntimeMock = $this->createMock(FormRuntime::class);
180  $formRuntimeMock->method('offsetExists')->willReturnMap([
181  [$elementIdentifier1, true],
182  [$elementIdentifier2, true],
183  ]);
184  $formRuntimeMock->method('offsetGet')->willReturnMap([
185  [$elementIdentifier1, $elementValue1],
186  [$elementIdentifier2, $elementValue2],
187  ]);
188  $subject = new ‪AbstractFinisherFixture();
189  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
190  }
191 
192  #[Test]
194  {
195  $elementIdentifier = 'element-identifier-1';
196  $input = '{' . $elementIdentifier . '}';
197  $expected = '{' . $elementIdentifier . '}';
198  $formRuntimeMock = $this->createMock(FormRuntime::class);
199  $formRuntimeMock->method('offsetExists')->with($elementIdentifier)->willReturn(true);
200  $formRuntimeMock->method('offsetGet')->with($elementIdentifier)->willReturn($expected);
201  $finisherContextMock = $this->createMock(FinisherContext::class);
202  $finisherContextMock->method('getFinisherVariableProvider')->willReturn(new ‪FinisherVariableProvider());
203  $subject = new ‪AbstractFinisherFixture();
204  $subject->finisherContext = $finisherContextMock;
205  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
206  }
207 
208  #[Test]
210  {
211  $input = '{__currentTimestamp}';
212  $expected = '#^([0-9]{10})$#';
213  $formRuntimeMock = $this->createMock(FormRuntime::class);
214  $subject = new ‪AbstractFinisherFixture();
215  self::assertMatchesRegularExpression($expected, (string)$subject->substituteRuntimeReferences($input, $formRuntimeMock));
216  }
217 
218  #[Test]
220  {
221  $elementIdentifier1 = 'element-identifier-1';
222  $elementValue1 = 'norbert';
223  $elementIdentifier2 = 'element-identifier-2';
224  $elementValue2 = ['stan', 'steve'];
225  $input = [
226  '{' . $elementIdentifier1 . '}' => [
227  'lisa',
228  '{' . $elementIdentifier2 . '}',
229  ],
230  ];
231  $expected = [
232  'norbert' => [
233  'lisa',
234  ['stan', 'steve'],
235  ],
236  ];
237  $formRuntimeMock = $this->createMock(FormRuntime::class);
238  $formRuntimeMock->method('offsetExists')->willReturnMap([
239  [$elementIdentifier1, true],
240  [$elementIdentifier2, true],
241  ]);
242  $formRuntimeMock->method('offsetGet')->willReturnMap([
243  [$elementIdentifier1, $elementValue1],
244  [$elementIdentifier2, $elementValue2],
245  ]);
246  $subject = new ‪AbstractFinisherFixture();
247  self::assertSame($expected, $subject->substituteRuntimeReferences($input, $formRuntimeMock));
248  }
249 
250  #[Test]
252  {
253  $date = new \DateTime('@1574415600');
254  $formRuntimeMock = $this->createMock(FormRuntime::class);
255  $formRuntimeMock->method('offsetExists')->with('date-1')->willReturn(true);
256  $formRuntimeMock->method('offsetGet')->with('date-1')->willReturn($date);
257  $stringableElement = new class () implements ‪StringableFormElementInterface {
261  public function valueToString($value): string
262  {
263  return $value->format('Y-m-d');
264  }
265  };
266  $formDefinitionMock = $this->createMock(FormDefinition::class);
267  $formDefinitionMock->method('getElementByIdentifier')->with('date-1')->willReturn($stringableElement);
268  $formRuntimeMock->method('getFormDefinition')->willReturn($formDefinitionMock);
269  $subject = new ‪AbstractFinisherFixture();
270  self::assertSame('When: 2019-11-22', $subject->substituteRuntimeReferences('When: {date-1}', $formRuntimeMock));
271  }
272 
273  #[Test]
275  {
276  $formRuntimeMock = $this->createMock(FormRuntime::class);
277  $formRuntimeMock->method('offsetExists')->with('date-1')->willReturn(true);
278  $formRuntimeMock->method('offsetGet')->with('date-1')->willReturn(new \DateTime());
279  $formDefinitionMock = $this->createMock(FormDefinition::class);
280  $formRuntimeMock->method('getFormDefinition')->willReturn($formDefinitionMock);
281  $this->expectException(FinisherException::class);
282  $this->expectExceptionCode(1574362327);
283  $subject = new ‪AbstractFinisherFixture();
284  $subject->substituteRuntimeReferences('When: {date-1}', $formRuntimeMock);
285  }
286 
287  #[Test]
289  {
290  $elementIdentifier = 'element-identifier-1';
291  $input = 'BEFORE {' . $elementIdentifier . '} AFTER';
292  $formRuntimeMock = $this->createMock(FormRuntime::class);
293  $formRuntimeMock->method('offsetExists')->with($elementIdentifier)->willReturn(true);
294  $formRuntimeMock->method('offsetGet')->with($elementIdentifier)->willReturn(['value-1', 'value-2']);
295  $this->expectException(FinisherException::class);
296  $this->expectExceptionCode(1519239265);
297  $subject = new ‪AbstractFinisherFixture();
298  $subject->substituteRuntimeReferences($input, $formRuntimeMock);
299  }
300 }
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:155
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsStringIfInputIsString
‪substituteRuntimeReferencesReturnsStringIfInputIsString()
Definition: AbstractFinisherTest.php:97
‪TYPO3\CMS\Form\Domain\Finishers\FinisherVariableProvider
Definition: FinisherVariableProvider.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:120
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesConvertsObjectsToString
‪substituteRuntimeReferencesConvertsObjectsToString()
Definition: AbstractFinisherTest.php:251
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement
‪substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement()
Definition: AbstractFinisherTest.php:193
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:107
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys
‪substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys()
Definition: AbstractFinisherTest.php:219
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray
‪substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray()
Definition: AbstractFinisherTest.php:288
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsArrayIfInputIsArray
‪substituteRuntimeReferencesReturnsArrayIfInputIsArray()
Definition: AbstractFinisherTest.php:87
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameNotExistsWithinOptions
‪parseOptionReturnsNullIfOptionNameNotExistsWithinOptions()
Definition: AbstractFinisherTest.php:40
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:142
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions
‪parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions()
Definition: AbstractFinisherTest.php:48
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameIsTranslation
‪parseOptionReturnsNullIfOptionNameIsTranslation()
Definition: AbstractFinisherTest.php:33
‪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:37
‪TYPO3\CMS\Form\Domain\Model\FormDefinition
Definition: FormDefinition.php:224
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\Fixtures\AbstractFinisherFixture
Definition: AbstractFinisherFixture.php:28
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement
‪substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement()
Definition: AbstractFinisherTest.php:274
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest
Definition: AbstractFinisherTest.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty
‪parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty()
Definition: AbstractFinisherTest.php:67
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers
Definition: AbstractFinisherTest.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger
‪substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger()
Definition: AbstractFinisherTest.php:209