2 declare(strict_types = 1);
18 use Prophecy\Argument;
19 use Prophecy\Prophecy\ObjectProphecy;
25 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
37 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
38 AbstractFinisher::class,
44 $this->assertNull($mockAbstractFinisher->_call(
'parseOption',
'translation'));
52 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
53 AbstractFinisher::class,
59 $mockAbstractFinisher->_set(
'options', []);
61 $this->assertNull($mockAbstractFinisher->_call(
'parseOption',
'foo'));
69 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
70 AbstractFinisher::class,
76 $mockAbstractFinisher->_set(
'options', []);
78 $this->assertNull($mockAbstractFinisher->_call(
'parseOption',
'foo'));
86 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
87 AbstractFinisher::class,
93 $mockAbstractFinisher->_set(
'options', [
99 $this->assertSame($expected, $mockAbstractFinisher->_call(
'parseOption',
'foo1'));
107 $expected =
'defaultValue';
109 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
110 AbstractFinisher::class,
117 'translateFinisherOption'
121 $mockAbstractFinisher
122 ->expects($this->any())
123 ->method(
'translateFinisherOption')
124 ->willReturnArgument(0);
126 $mockAbstractFinisher->_set(
'options', []);
127 $mockAbstractFinisher->_set(
'defaultOptions', [
128 'subject' => $expected
131 $finisherContextProphecy = $this->prophesize(FinisherContext::class);
133 $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
134 $formRuntimeProphecy->offsetExists(Argument::cetera())->willReturn(
true);
135 $formRuntimeProphecy->offsetGet(Argument::cetera())->willReturn(
null);
137 $finisherContextProphecy->getFormRuntime(Argument::cetera())
138 ->willReturn($formRuntimeProphecy->reveal());
139 $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())
142 $mockAbstractFinisher->_set(
'finisherContext', $finisherContextProphecy->reveal());
144 $this->assertSame($expected, $mockAbstractFinisher->_call(
'parseOption',
'subject'));
152 $elementIdentifier =
'element-identifier-1';
153 $expected =
'defaultValue';
155 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
156 AbstractFinisher::class,
163 'translateFinisherOption'
167 $mockAbstractFinisher
168 ->expects($this->any())
169 ->method(
'translateFinisherOption')
170 ->willReturnArgument(0);
172 $mockAbstractFinisher->_set(
'options', [
173 'subject' =>
'{' . $elementIdentifier .
'}'
175 $mockAbstractFinisher->_set(
'defaultOptions', [
176 'subject' => $expected
179 $finisherContextProphecy = $this->prophesize(FinisherContext::class);
182 $elementIdentifier =>
''
185 $finisherContextProphecy->getFormRuntime(Argument::cetera())
186 ->willReturn($formRuntimeProphecy->reveal());
188 $mockAbstractFinisher->_set(
'finisherContext', $finisherContextProphecy->reveal());
190 $this->assertSame($expected, $mockAbstractFinisher->_call(
'parseOption',
'subject'));
198 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
199 AbstractFinisher::class,
206 'translateFinisherOption'
210 $elementIdentifier =
'element-identifier-1';
211 $elementValue =
'element-value-1';
212 $elementReferenceName =
'{' . $elementIdentifier .
'}';
214 $translationValue =
'subject: ' . $elementReferenceName;
215 $expected =
'subject: ' . $elementValue;
217 $mockAbstractFinisher
218 ->expects($this->any())
219 ->method(
'translateFinisherOption')
220 ->willReturn($translationValue);
222 $mockAbstractFinisher->_set(
'options', [
226 $finisherContextProphecy = $this->prophesize(FinisherContext::class);
229 $elementIdentifier => $elementValue
232 $finisherContextProphecy->getFormRuntime(Argument::cetera())
233 ->willReturn($formRuntimeProphecy->reveal());
235 $mockAbstractFinisher->_set(
'finisherContext', $finisherContextProphecy->reveal());
237 $this->assertSame($expected, $mockAbstractFinisher->_call(
'parseOption',
'subject'));
245 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
246 AbstractFinisher::class,
252 $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
254 $input = [
'bar',
'foobar', [
'x',
'y']];
255 $expected = [
'bar',
'foobar', [
'x',
'y']];
257 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
265 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
266 AbstractFinisher::class,
272 $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
275 $expected =
'foobar';
277 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
285 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
286 AbstractFinisher::class,
292 $elementIdentifier =
'element-identifier-1';
293 $input =
'{' . $elementIdentifier .
'}';
294 $expected =
'element-value';
297 $elementIdentifier => $expected
300 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
308 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
309 AbstractFinisher::class,
315 $elementIdentifier1 =
'element-identifier-1';
316 $elementValue1 =
'element-value-1';
317 $elementIdentifier2 =
'element-identifier-2';
318 $elementValue2 =
'element-value-2';
320 $input =
'{' . $elementIdentifier1 .
'},{' . $elementIdentifier2 .
'}';
321 $expected = $elementValue1 .
',' . $elementValue2;
324 $elementIdentifier1 => $elementValue1,
325 $elementIdentifier2 => $elementValue2
328 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
336 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
337 AbstractFinisher::class,
343 $elementIdentifier =
'element-identifier-1';
344 $input =
'{' . $elementIdentifier .
'}';
345 $expected = [
'bar',
'foobar'];
348 $elementIdentifier => $expected
351 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
359 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
360 AbstractFinisher::class,
366 $elementIdentifier1 =
'element-identifier-1';
367 $elementValue1 = [
'klaus',
'fritz'];
368 $elementIdentifier2 =
'element-identifier-2';
369 $elementValue2 = [
'stan',
'steve'];
372 '{' . $elementIdentifier1 .
'}',
376 '{' . $elementIdentifier1 .
'}',
377 '{' . $elementIdentifier2 .
'}',
391 $elementIdentifier1 => $elementValue1,
392 $elementIdentifier2 => $elementValue2
395 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
403 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
404 AbstractFinisher::class,
410 $elementIdentifier =
'element-identifier-1';
411 $input =
'{' . $elementIdentifier .
'}';
412 $expected =
'{' . $elementIdentifier .
'}';
415 $elementIdentifier => $expected
418 $finisherContextProphecy = $this->prophesize(FinisherContext::class);
420 $mockAbstractFinisher->_set(
'finisherContext', $finisherContextProphecy->reveal());
422 $this->assertSame($expected, $mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
430 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
431 AbstractFinisher::class,
437 $input =
'{__currentTimestamp}';
438 $expected =
'#^([0-9]{10})$#';
440 $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
442 $this->assertEquals(1, preg_match($expected, (
string)$mockAbstractFinisher->_call(
'substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal())));
450 $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
451 AbstractFinisher::class,
457 $elementIdentifier =
'element-identifier-1';
458 $input =
'BEFORE {' . $elementIdentifier .
'} AFTER';
461 $elementIdentifier => [
'value-1',
'value-2']
464 $finisherContextProphecy = $this->prophesize(FinisherContext::class);
466 $mockAbstractFinisher->_set(
'finisherContext', $finisherContextProphecy->reveal());
468 $this->expectException(FinisherException::class);
469 $this->expectExceptionCode(1519239265);
471 $mockAbstractFinisher->_call(
472 'substituteRuntimeReferences',
474 $formRuntimeProphecy->reveal()
485 $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
486 foreach ($values as $key => $value) {
487 $formRuntimeProphecy->offsetExists(Argument::exact($key))->willReturn(
true);
488 $formRuntimeProphecy->offsetGet(Argument::exact($key))->willReturn($value);
490 return $formRuntimeProphecy;