‪TYPO3CMS  ‪main
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 
20 use PHPUnit\Framework\Attributes\Test;
29 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 final class ‪ValidatorResolverTest extends FunctionalTestCase
35 {
36  protected bool ‪$initializeDatabase = false;
37 
38  protected array ‪$testExtensionsToLoad = [
39  'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/test_validators',
40  ];
41 
42  #[Test]
44  {
45  $subject = $this->get(ValidatorResolver::class);
46  $options = ['foo' => 'bar'];
48  ‪$validator = $subject->createValidator(CustomValidator::class, $options);
49  self::assertSame($options, ‪$validator->getOptions());
50  self::assertInstanceOf(IconFactory::class, ‪$validator->iconFactory);
51  }
52 
53  #[Test]
55  {
56  $subject = $this->getAccessibleMock(
57  ValidatorResolver::class,
58  null,
59  [$this->get(ReflectionService::class)]
60  );
61 
62  $subject->getBaseValidatorConjunction(Model::class);
63 
65  $baseValidatorConjunctions = $subject->_get('baseValidatorConjunctions');
66  self::assertIsArray($baseValidatorConjunctions);
67  self::assertCount(2, $baseValidatorConjunctions);
68  self::assertArrayHasKey(Model::class, $baseValidatorConjunctions);
69  self::assertArrayHasKey(AnotherModel::class, $baseValidatorConjunctions);
70 
72  $conjunctionValidator = $baseValidatorConjunctions[Model::class];
73  self::assertInstanceOf(ConjunctionValidator::class, $conjunctionValidator);
74 
75  $baseValidators = $conjunctionValidator->getValidators();
76  self::assertInstanceOf(\SplObjectStorage::class, $baseValidators);
77  $baseValidators->rewind();
78 
80  ‪$validator = $baseValidators->current();
81  self::assertInstanceOf(GenericObjectValidator::class, ‪$validator);
82 
83  $propertyValidators = ‪$validator->getPropertyValidators();
84  self::assertCount(4, $propertyValidators);
85  self::assertArrayHasKey('foo', $propertyValidators);
86  self::assertArrayHasKey('bar', $propertyValidators);
87  self::assertArrayHasKey('baz', $propertyValidators);
88  self::assertArrayHasKey('qux', $propertyValidators);
89 
91  $fooPropertyValidators = $propertyValidators['foo'];
92  self::assertInstanceOf(\SplObjectStorage::class, $fooPropertyValidators);
93  self::assertCount(3, $fooPropertyValidators);
94 
95  $fooPropertyValidators->rewind();
97  $propertyValidator = $fooPropertyValidators->current();
98  self::assertInstanceOf(StringLengthValidator::class, $propertyValidator);
99  self::assertSame(['minimum' => 1, 'maximum' => PHP_INT_MAX], $propertyValidator->getOptions());
100 
101  $fooPropertyValidators->next();
103  $propertyValidator = $fooPropertyValidators->current();
104  self::assertInstanceOf(StringLengthValidator::class, $propertyValidator);
105  self::assertSame(['minimum' => 0, 'maximum' => 10], $propertyValidator->getOptions());
106 
107  $fooPropertyValidators->next();
108  $propertyValidator = $fooPropertyValidators->current();
109  self::assertInstanceOf(NotEmptyValidator::class, $propertyValidator);
110 
112  $barPropertyValidators = $propertyValidators['bar'];
113  self::assertInstanceOf(\SplObjectStorage::class, $barPropertyValidators);
114  self::assertCount(1, $barPropertyValidators);
115 
116  $barPropertyValidators->rewind();
117  $propertyValidator = $barPropertyValidators->current();
118  self::assertInstanceOf(CustomValidator::class, $propertyValidator);
119 
121  $bazPropertyValidators = $propertyValidators['baz'];
122  self::assertInstanceOf(\SplObjectStorage::class, $bazPropertyValidators);
123  self::assertCount(1, $bazPropertyValidators);
124 
125  $bazPropertyValidators->rewind();
126  $propertyValidator = $bazPropertyValidators->current();
127  self::assertInstanceOf(CollectionValidator::class, $propertyValidator);
128 
130  $quxPropertyValidators = $propertyValidators['qux'];
131  self::assertInstanceOf(\SplObjectStorage::class, $quxPropertyValidators);
132  self::assertCount(1, $quxPropertyValidators);
133 
134  $quxPropertyValidators->rewind();
135  $propertyValidator = $quxPropertyValidators->current();
136  self::assertInstanceOf(ConjunctionValidator::class, $propertyValidator);
137  self::assertSame(
138  $baseValidatorConjunctions[AnotherModel::class],
139  $propertyValidator
140  );
141  }
142 }
‪TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator
Definition: ConjunctionValidator.php:26
‪TYPO3Tests\TestValidators\Domain\Model\Model
Definition: Model.php:27
‪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:29
‪TYPO3\CMS\Extbase\Validation\ValidatorResolver
Definition: ValidatorResolver.php:38
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\$initializeDatabase
‪bool $initializeDatabase
Definition: ValidatorResolverTest.php:36
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\$testExtensionsToLoad
‪array $testExtensionsToLoad
Definition: ValidatorResolverTest.php:38
‪TYPO3Tests\TestValidators\Domain\Model\AnotherModel
Definition: AnotherModel.php:27
‪TYPO3\CMS\Core\Imaging\IconFactory
Definition: IconFactory.php:34
‪TYPO3\CMS\Extbase\Validation\Validator\StringLengthValidator
Definition: StringLengthValidator.php:26
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\buildBaseValidatorConjunctionAddsValidatorsDefinedByAnnotationsInTheClassToTheReturnedConjunction
‪buildBaseValidatorConjunctionAddsValidatorsDefinedByAnnotationsInTheClassToTheReturnedConjunction()
Definition: ValidatorResolverTest.php:54
‪TYPO3\CMS\Extbase\Reflection\ReflectionService
Definition: ReflectionService.php:28
‪$validator
‪if(isset($args['d'])) $validator
Definition: validateRstFiles.php:262
‪TYPO3\CMS\Extbase\Validation\Validator\GenericObjectValidator
Definition: GenericObjectValidator.php:24
‪TYPO3\CMS\Extbase\Tests\Functional\Validation\ValidatorResolverTest\createValidatorSetsOptionsAndDependenciesAreInjected
‪createValidatorSetsOptionsAndDependenciesAreInjected()
Definition: ValidatorResolverTest.php:43
‪TYPO3Tests\TestValidators\Validation\Validator\CustomValidator
Definition: CustomValidator.php:27
‪TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator
Definition: NotEmptyValidator.php:24