‪TYPO3CMS  11.5
ResultTest.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\MockObject\MockObject;
22 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
23 
27 class ‪ResultTest extends UnitTestCase
28 {
29  protected ‪Result ‪$result;
30 
31  protected function ‪setUp(): void
32  {
33  parent::setUp();
34  $this->result = new ‪Result();
35  }
36 
37  public function ‪dataTypes(): array
38  {
39  return [
40  ['Error', 'Errors'],
41  ['Warning', 'Warnings'],
42  ['Notice', 'Notices'],
43  ];
44  }
45 
50  protected function ‪getMockMessage(string $type): MockObject
51  {
52  return $this->createMock('TYPO3\\CMS\\Extbase\\Error\\' . $type);
53  }
54 
61  public function ‪addedMessagesShouldBeRetrievableAgain(string $dataTypeInSingular, string $dataTypeInPlural): void
62  {
63  $message = $this->‪getMockMessage($dataTypeInSingular);
64  $addMethodName = 'add' . $dataTypeInSingular;
65  $this->result->{$addMethodName}($message);
66  $getterMethodName = 'get' . $dataTypeInPlural;
67  self::assertEquals([$message], $this->result->{$getterMethodName}());
68  }
69 
76  public function ‪getMessageShouldNotBeRecursive(string $dataTypeInSingular, string $dataTypeInPlural): void
77  {
78  $message = $this->getMockMessage($dataTypeInSingular);
79  $addMethodName = 'add' . $dataTypeInSingular;
80  $this->result->forProperty('foo')->{$addMethodName}($message);
81  $getterMethodName = 'get' . $dataTypeInPlural;
82  self::assertEquals([], $this->result->{$getterMethodName}());
83  }
84 
91  public function ‪getFirstMessageShouldReturnFirstMessage(string $dataTypeInSingular, string $dataTypeInPlural): void
92  {
93  $message1 = $this->getMockMessage($dataTypeInSingular);
94  $message2 = $this->getMockMessage($dataTypeInSingular);
95  $addMethodName = 'add' . $dataTypeInSingular;
96  $this->result->{$addMethodName}($message1);
97  $this->result->{$addMethodName}($message2);
98  $getterMethodName = 'getFirst' . $dataTypeInSingular;
99  self::assertSame($message1, $this->result->{$getterMethodName}());
100  }
101 
105  public function ‪forPropertyShouldReturnSubResult(): void
106  {
107  $container2 = $this->result->forProperty('foo.bar');
108  self::assertInstanceOf(Result::class, $container2);
109  self::assertSame($container2, $this->result->forProperty('foo')->forProperty('bar'));
110  }
111 
116  {
117  $container2 = $this->result->forProperty('');
118  self::assertSame($container2, $this->result);
119  }
120 
125  {
126  $container2 = $this->result->forProperty(null);
127  self::assertSame($container2, $this->result);
128  }
129 
136  public function ‪hasMessagesShouldReturnTrueIfTopLevelObjectHasMessages(string $dataTypeInSingular, string $dataTypeInPlural): void
137  {
138  $message = $this->getMockMessage($dataTypeInSingular);
139  $addMethodName = 'add' . $dataTypeInSingular;
140  $this->result->{$addMethodName}($message);
141  $methodName = 'has' . $dataTypeInPlural;
142  self::assertTrue($this->result->{$methodName}());
143  }
144 
151  public function ‪hasMessagesShouldReturnTrueIfSubObjectHasErrors(string $dataTypeInSingular, string $dataTypeInPlural): void
152  {
153  $addMethodName = 'add' . $dataTypeInSingular;
154  $methodName = 'has' . $dataTypeInPlural;
155  $message = $this->getMockMessage($dataTypeInSingular);
156  $this->result->forProperty('foo.bar')->{$addMethodName}($message);
157  self::assertTrue($this->result->{$methodName}());
158  }
159 
166  public function ‪hasMessagesShouldReturnFalseIfSubObjectHasNoErrors(string $dataTypeInSingular, string $dataTypeInPlural): void
167  {
168  $methodName = 'has' . $dataTypeInPlural;
169  $this->result->forProperty('foo.baz');
170  $this->result->forProperty('foo.bar');
171  self::assertFalse($this->result->{$methodName}());
172  }
173 
180  public function ‪getFlattenedMessagesShouldReturnAllSubMessages(string $dataTypeInSingular, string $dataTypeInPlural): void
181  {
182  $message1 = $this->getMockMessage($dataTypeInSingular);
183  $message2 = $this->getMockMessage($dataTypeInSingular);
184  $message3 = $this->getMockMessage($dataTypeInSingular);
185  $message4 = $this->getMockMessage($dataTypeInSingular);
186  $message5 = $this->getMockMessage($dataTypeInSingular);
187  $addMethodName = 'add' . $dataTypeInSingular;
188  $this->result->forProperty('foo.bar')->{$addMethodName}($message1);
189  $this->result->forProperty('foo.baz')->{$addMethodName}($message2);
190  $this->result->forProperty('foo')->{$addMethodName}($message3);
191  $this->result->{$addMethodName}($message4);
192  $this->result->{$addMethodName}($message5);
193  $getMethodName = 'getFlattened' . $dataTypeInPlural;
194  $expected = [
195  '' => [$message4, $message5],
196  'foo' => [$message3],
197  'foo.bar' => [$message1],
198  'foo.baz' => [$message2],
199  ];
200  self::assertEquals($expected, $this->result->{$getMethodName}());
201  }
202 
209  public function ‪getFlattenedMessagesShouldNotContainEmptyResults(string $dataTypeInSingular, string $dataTypeInPlural): void
210  {
211  $message1 = $this->getMockMessage($dataTypeInSingular);
212  $message2 = $this->getMockMessage($dataTypeInSingular);
213  $addMethodName = 'add' . $dataTypeInSingular;
214  $this->result->forProperty('foo.bar')->{$addMethodName}($message1);
215  $this->result->forProperty('foo.baz')->{$addMethodName}($message2);
216  $getMethodName = 'getFlattened' . $dataTypeInPlural;
217  $expected = [
218  'foo.bar' => [$message1],
219  'foo.baz' => [$message2],
220  ];
221  self::assertEquals($expected, $this->result->{$getMethodName}());
222  }
223 
227  public function ‪mergeShouldMergeTwoResults(): void
228  {
229  $notice1 = $this->getMockMessage('Notice');
230  $notice2 = $this->getMockMessage('Notice');
231  $notice3 = $this->getMockMessage('Notice');
232  $warning1 = $this->getMockMessage('Warning');
233  $warning2 = $this->getMockMessage('Warning');
234  $warning3 = $this->getMockMessage('Warning');
235  $error1 = $this->getMockMessage('Error');
236  $error2 = $this->getMockMessage('Error');
237  $error3 = $this->getMockMessage('Error');
238  $otherResult = new ‪Result();
239  $otherResult->addNotice($notice1);
240  $otherResult->forProperty('foo.bar')->addNotice($notice2);
241  $this->result->forProperty('foo')->addNotice($notice3);
242  $otherResult->addWarning($warning1);
243  $this->result->addWarning($warning2);
244  $this->result->addWarning($warning3);
245  $otherResult->forProperty('foo')->addError($error1);
246  $otherResult->forProperty('foo')->addError($error2);
247  $otherResult->addError($error3);
248  $this->result->merge($otherResult);
249  self::assertSame([$notice1], $this->result->getNotices(), 'Notices are not merged correctly without recursion');
250  self::assertSame([$notice3], $this->result->forProperty('foo')->getNotices(), 'Original sub-notices are overridden.');
251  self::assertSame([$notice2], $this->result->forProperty('foo')->forProperty('bar')->getNotices(), 'Sub-notices are not copied.');
252  self::assertSame([$warning2, $warning3, $warning1], $this->result->getWarnings());
253  self::assertSame([$error3], $this->result->getErrors());
254  self::assertSame([$error1, $error2], $this->result->forProperty('foo')->getErrors());
255  }
256 
260  public function ‪getFirstReturnsFalseOnEmptyResult(): void
261  {
262  $subject = new ‪Result();
263  self::assertFalse($subject->getFirstError());
264  self::assertFalse($subject->getFirstNotice());
265  self::assertFalse($subject->getFirstWarning());
266  }
267 }
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\forPropertyWithEmptyStringShouldReturnSelf
‪forPropertyWithEmptyStringShouldReturnSelf()
Definition: ResultTest.php:115
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getFirstMessageShouldReturnFirstMessage
‪getFirstMessageShouldReturnFirstMessage(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:91
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\forPropertyShouldReturnSubResult
‪forPropertyShouldReturnSubResult()
Definition: ResultTest.php:105
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\addedMessagesShouldBeRetrievableAgain
‪addedMessagesShouldBeRetrievableAgain(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:61
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\hasMessagesShouldReturnTrueIfSubObjectHasErrors
‪hasMessagesShouldReturnTrueIfSubObjectHasErrors(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:151
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest
Definition: ResultTest.php:28
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\hasMessagesShouldReturnTrueIfTopLevelObjectHasMessages
‪hasMessagesShouldReturnTrueIfTopLevelObjectHasMessages(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:136
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getMockMessage
‪MockObject getMockMessage(string $type)
Definition: ResultTest.php:50
‪TYPO3\CMS\Extbase\Error\Result
Definition: Result.php:24
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getFirstReturnsFalseOnEmptyResult
‪getFirstReturnsFalseOnEmptyResult()
Definition: ResultTest.php:260
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\$result
‪Result $result
Definition: ResultTest.php:29
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\forPropertyWithNullShouldReturnSelf
‪forPropertyWithNullShouldReturnSelf()
Definition: ResultTest.php:124
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getFlattenedMessagesShouldReturnAllSubMessages
‪getFlattenedMessagesShouldReturnAllSubMessages(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:180
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\hasMessagesShouldReturnFalseIfSubObjectHasNoErrors
‪hasMessagesShouldReturnFalseIfSubObjectHasNoErrors(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:166
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\setUp
‪setUp()
Definition: ResultTest.php:31
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\mergeShouldMergeTwoResults
‪mergeShouldMergeTwoResults()
Definition: ResultTest.php:227
‪TYPO3\CMS\Extbase\Tests\Unit\Error
Definition: ErrorTest.php:18
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\dataTypes
‪dataTypes()
Definition: ResultTest.php:37
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getFlattenedMessagesShouldNotContainEmptyResults
‪getFlattenedMessagesShouldNotContainEmptyResults(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:209
‪TYPO3\CMS\Extbase\Tests\Unit\Error\ResultTest\getMessageShouldNotBeRecursive
‪getMessageShouldNotBeRecursive(string $dataTypeInSingular, string $dataTypeInPlural)
Definition: ResultTest.php:76