‪TYPO3CMS  ‪main
CollectionValidatorTest.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;
21 use Symfony\Component\DependencyInjection\ContainerBuilder;
34 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
35 
36 final class ‪CollectionValidatorTest extends FunctionalTestCase
37 {
38  protected function ‪setUp(): void
39  {
40  parent::setUp();
41  ‪$GLOBALS['LANG'] = $this->get(LanguageServiceFactory::class)->create('default');
42  $request = (new ‪ServerRequest())->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
43  ‪$GLOBALS['TYPO3_REQUEST'] = $request;
44  }
45 
46  #[Test]
48  {
49  $subject = $this->get(CollectionValidator::class);
50  $subject->setOptions([]);
51  self::assertFalse($subject->validate(null)->hasErrors());
52  }
53 
54  #[Test]
56  {
57  $subject = $this->get(CollectionValidator::class);
58  $subject->setOptions([]);
59  self::assertTrue($subject->validate(new \stdClass())->hasErrors());
60  }
61 
62  #[Test]
64  {
65  $mockValidatorResolver = $this->getAccessibleMock(
66  ValidatorResolver::class,
67  ['createValidator', 'buildBaseValidatorConjunction', 'getBaseValidatorConjunction'],
68  [$this->get(ReflectionService::class)]
69  );
71  $container = $this->get('service_container');
72  $container->set(ValidatorResolver::class, $mockValidatorResolver);
73  $subject = $container->get(CollectionValidator::class);
74  $subject->setOptions(['elementValidator' => 'EmailAddress']);
75  $emailAddressValidator = new ‪EmailAddressValidator();
76  $emailAddressValidator->setOptions([]);
77  $mockValidatorResolver->expects(self::exactly(4))
78  ->method('createValidator')
79  ->with('EmailAddress')
80  ->willReturn($emailAddressValidator);
81  $arrayOfEmailAddresses = [
82  'foo@bar.de',
83  'not a valid address',
84  'dummy@typo3.org',
85  'also not valid',
86  ];
87  $result = $subject->validate($arrayOfEmailAddresses);
88  self::assertTrue($result->hasErrors());
89  self::assertCount(2, $result->getFlattenedErrors());
90  }
91 
92  #[Test]
94  {
95  $A = new class () {
96  public $b = [];
97  public $integer = 5;
98  };
99  $B = new class () {
100  public $a;
101  public $c;
102  public $integer = 'Not an integer';
103  };
104  $A->b = [$B];
105  $B->a = $A;
106  $B->c = [$A];
107 
108  // Create validators
109  $aValidator = $this->getMockBuilder(AbstractGenericObjectValidator::class)
110  ->onlyMethods(['translateErrorMessage'])
111  ->getMock();
112  $aValidator->setOptions([]);
113 
114  $subject = $this->get(CollectionValidator::class);
115  $subject->setOptions(['elementValidator' => 'Integer']);
116  $integerValidator = new ‪IntegerValidator();
117  $integerValidator->setOptions([]);
118  $mockValidatorResolver = $this->getAccessibleMock(
119  ValidatorResolver::class,
120  ['createValidator', 'buildBaseValidatorConjunction', 'getBaseValidatorConjunction'],
121  [$this->get(ReflectionService::class)]
122  );
123  $mockValidatorResolver
124  ->method('createValidator')
125  ->with('Integer')
126  ->willReturn($integerValidator);
127  // Add validators to properties
128  $aValidator->addPropertyValidator('b', $subject);
129  $aValidator->addPropertyValidator('integer', $integerValidator);
130 
131  $result = $aValidator->validate($A)->getFlattenedErrors();
132  self::assertEquals(1221560494, $result['b.0'][0]->getCode());
133  }
134 
135  #[Test]
137  {
138  $entity = new ‪Entity('Foo');
139  $elementType = Entity::class;
140  $objectStorage = new ‪ObjectStorage();
141  $objectStorage->attach($entity);
142  $aValidator = new ‪GenericObjectValidator();
143  $aValidator->setOptions([]);
144  $mockValidatorResolver = $this->getAccessibleMock(
145  ValidatorResolver::class,
146  ['createValidator', 'buildBaseValidatorConjunction', 'getBaseValidatorConjunction'],
147  [$this->get(ReflectionService::class)]
148  );
149  $mockValidatorResolver->expects(self::never())->method('createValidator');
150  $subject = $this->get(CollectionValidator::class);
151  $subject->setOptions(['elementType' => $elementType]);
152  $subject->validate($objectStorage);
153  }
154 }
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\collectionValidatorValidatesEveryElementOfACollectionWithTheGivenElementValidator
‪collectionValidatorValidatesEveryElementOfACollectionWithTheGivenElementValidator()
Definition: CollectionValidatorTest.php:63
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator
Definition: AlphanumericValidatorTest.php:18
‪TYPO3\CMS\Extbase\Validation\Validator\CollectionValidator
Definition: CollectionValidator.php:29
‪TYPO3\CMS\Extbase\Validation\ValidatorResolver
Definition: ValidatorResolver.php:38
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\setUp
‪setUp()
Definition: CollectionValidatorTest.php:38
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\collectionValidatorReturnsNoErrorsForANullValue
‪collectionValidatorReturnsNoErrorsForANullValue()
Definition: CollectionValidatorTest.php:47
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Fixtures\Entity
Definition: Entity.php:26
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\collectionValidatorFailsForAValueNotBeingACollection
‪collectionValidatorFailsForAValueNotBeingACollection()
Definition: CollectionValidatorTest.php:55
‪TYPO3\CMS\Extbase\Persistence\ObjectStorage
Definition: ObjectStorage.php:34
‪TYPO3\CMS\Extbase\Reflection\ReflectionService
Definition: ReflectionService.php:28
‪TYPO3\CMS\Extbase\Validation\Validator\EmailAddressValidator
Definition: EmailAddressValidator.php:26
‪TYPO3\CMS\Extbase\Validation\Validator\GenericObjectValidator
Definition: GenericObjectValidator.php:24
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Extbase\Validation\Validator\AbstractGenericObjectValidator
Definition: AbstractGenericObjectValidator.php:27
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\collectionValidatorValidatesNestedObjectStructuresWithoutEndlessLooping
‪collectionValidatorValidatesNestedObjectStructuresWithoutEndlessLooping()
Definition: CollectionValidatorTest.php:93
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest
Definition: CollectionValidatorTest.php:37
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\Validator\CollectionValidatorTest\collectionValidatorCallsCollectionElementValidatorWhenValidatingObjectStorages
‪collectionValidatorCallsCollectionElementValidatorWhenValidatingObjectStorages()
Definition: CollectionValidatorTest.php:136
‪TYPO3\CMS\Extbase\Validation\Validator\IntegerValidator
Definition: IntegerValidator.php:24