‪TYPO3CMS  11.5
ValidatorResolverTest.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 
32 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 class ‪ValidatorResolverTest extends FunctionalTestCase
35 {
39  protected ‪$initializeDatabase = false;
40 
41  protected ‪$testExtensionsToLoad = [
42  'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/test_validators',
43  ];
44 
49  {
50  $subject = $this->get(ValidatorResolver::class);
51  $options = ['foo' => 'bar'];
53  ‪$validator = $subject->createValidator(CustomValidator::class, $options);
54  self::assertSame($options, ‪$validator->getOptions());
55  self::assertInstanceOf(IconFactory::class, ‪$validator->iconFactory);
56  }
57 
62  public function ‪createValidatorSetsOptions(): void
63  {
64  $subject = $this->get(ValidatorResolver::class);
65  $options = ['foo' => 'bar'];
66  ‪$validator = $subject->createValidator(CustomNotInjectableValidator::class, $options);
67  self::assertSame($options, ‪$validator->getOptions());
68  }
69 
74  {
75  $subject = $this->getAccessibleMock(
76  ValidatorResolver::class,
77  ['dummy']
78  );
79  $subject->injectReflectionService($this->get(ReflectionService::class));
80 
81  $subject->_call(
82  'buildBaseValidatorConjunction',
83  Model::class,
84  Model::class
85  );
86 
88  $baseValidatorConjunctions = $subject->_get('baseValidatorConjunctions');
89  self::assertIsArray($baseValidatorConjunctions);
90  self::assertCount(2, $baseValidatorConjunctions);
91  self::assertArrayHasKey(Model::class, $baseValidatorConjunctions);
92  self::assertArrayHasKey(AnotherModel::class, $baseValidatorConjunctions);
93 
95  $conjunctionValidator = $baseValidatorConjunctions[Model::class];
96  self::assertInstanceOf(ConjunctionValidator::class, $conjunctionValidator);
97 
98  $baseValidators = $conjunctionValidator->getValidators();
99  self::assertInstanceOf(\SplObjectStorage::class, $baseValidators);
100  $baseValidators->rewind();
101 
103  ‪$validator = $baseValidators->current();
104  self::assertInstanceOf(GenericObjectValidator::class, ‪$validator);
105 
106  $propertyValidators = ‪$validator->getPropertyValidators();
107  self::assertCount(4, $propertyValidators);
108  self::assertArrayHasKey('foo', $propertyValidators);
109  self::assertArrayHasKey('bar', $propertyValidators);
110  self::assertArrayHasKey('baz', $propertyValidators);
111  self::assertArrayHasKey('qux', $propertyValidators);
112 
114  $fooPropertyValidators = $propertyValidators['foo'];
115  self::assertInstanceOf(\SplObjectStorage::class, $fooPropertyValidators);
116  self::assertCount(3, $fooPropertyValidators);
117 
118  $fooPropertyValidators->rewind();
120  $propertyValidator = $fooPropertyValidators->current();
121  self::assertInstanceOf(StringLengthValidator::class, $propertyValidator);
122  self::assertSame(['minimum' => 1, 'maximum' => PHP_INT_MAX], $propertyValidator->getOptions());
123 
124  $fooPropertyValidators->next();
126  $propertyValidator = $fooPropertyValidators->current();
127  self::assertInstanceOf(StringLengthValidator::class, $propertyValidator);
128  self::assertSame(['minimum' => 0, 'maximum' => 10], $propertyValidator->getOptions());
129 
130  $fooPropertyValidators->next();
131  $propertyValidator = $fooPropertyValidators->current();
132  self::assertInstanceOf(NotEmptyValidator::class, $propertyValidator);
133 
135  $barPropertyValidators = $propertyValidators['bar'];
136  self::assertInstanceOf(\SplObjectStorage::class, $barPropertyValidators);
137  self::assertCount(1, $barPropertyValidators);
138 
139  $barPropertyValidators->rewind();
140  $propertyValidator = $barPropertyValidators->current();
141  self::assertInstanceOf(CustomValidator::class, $propertyValidator);
142 
144  $bazPropertyValidators = $propertyValidators['baz'];
145  self::assertInstanceOf(\SplObjectStorage::class, $bazPropertyValidators);
146  self::assertCount(1, $bazPropertyValidators);
147 
148  $bazPropertyValidators->rewind();
149  $propertyValidator = $bazPropertyValidators->current();
150  self::assertInstanceOf(CollectionValidator::class, $propertyValidator);
151 
153  $quxPropertyValidators = $propertyValidators['qux'];
154  self::assertInstanceOf(\SplObjectStorage::class, $quxPropertyValidators);
155  self::assertCount(1, $quxPropertyValidators);
156 
157  $quxPropertyValidators->rewind();
158  $propertyValidator = $quxPropertyValidators->current();
159  self::assertInstanceOf(ConjunctionValidator::class, $propertyValidator);
160  self::assertSame(
161  $baseValidatorConjunctions[AnotherModel::class],
162  $propertyValidator
163  );
164  }
165 }
‪TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator
Definition: ConjunctionValidator.php:24
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest
Definition: ValidatorResolverTest.php:35
‪TYPO3\CMS\Extbase\Tests\Functional\Validation
‪TYPO3\CMS\Extbase\Validation\Validator\CollectionValidator
Definition: CollectionValidator.php:28
‪ExtbaseTeam\TestValidators\Validation\Validator\CustomNotInjectableValidator
Definition: CustomNotInjectableValidator.php:27
‪TYPO3\CMS\Extbase\Validation\ValidatorResolver
Definition: ValidatorResolver.php:34
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\$initializeDatabase
‪bool $initializeDatabase
Definition: ValidatorResolverTest.php:38
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\createValidatorSetsOptions
‪createValidatorSetsOptions()
Definition: ValidatorResolverTest.php:61
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Extbase\Validation\Validator\StringLengthValidator
Definition: StringLengthValidator.php:24
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\buildBaseValidatorConjunctionAddsValidatorsDefinedByAnnotationsInTheClassToTheReturnedConjunction
‪buildBaseValidatorConjunctionAddsValidatorsDefinedByAnnotationsInTheClassToTheReturnedConjunction()
Definition: ValidatorResolverTest.php:72
‪TYPO3\CMS\Extbase\Reflection\ReflectionService
Definition: ReflectionService.php:28
‪ExtbaseTeam\TestValidators\Domain\Model\AnotherModel
Definition: AnotherModel.php:27
‪$validator
‪if(isset($args['d'])) $validator
Definition: validateRstFiles.php:218
‪TYPO3\CMS\Extbase\Validation\Validator\GenericObjectValidator
Definition: GenericObjectValidator.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\createValidatorSetsOptionsAndDependenciesAreInjected
‪createValidatorSetsOptionsAndDependenciesAreInjected()
Definition: ValidatorResolverTest.php:47
‪ExtbaseTeam\TestValidators\Domain\Model\Model
Definition: Model.php:27
‪TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator
Definition: NotEmptyValidator.php:22
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\$testExtensionsToLoad
‪$testExtensionsToLoad
Definition: ValidatorResolverTest.php:40
‪ExtbaseTeam\TestValidators\Validation\Validator\CustomValidator
Definition: CustomValidator.php:27