From 03b1fcf40182036a3ea7cde711705e50abeab2a8 Mon Sep 17 00:00:00 2001 From: Hermann Azong Date: Thu, 14 May 2026 13:53:12 +0200 Subject: [PATCH 1/2] [TASK] Add length validation for the model fields Add functional tests for title and description validation to verify the configured Extbase validators. Resolves: #458 Releases: main" --- Tests/Functional/Domain/Model/TeaTest.php | 75 +++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Tests/Functional/Domain/Model/TeaTest.php diff --git a/Tests/Functional/Domain/Model/TeaTest.php b/Tests/Functional/Domain/Model/TeaTest.php new file mode 100644 index 000000000..55a2894bf --- /dev/null +++ b/Tests/Functional/Domain/Model/TeaTest.php @@ -0,0 +1,75 @@ +subject = new Tea(); + + } + + #[Test] + public function validTitleLengthReturnsNoError(): void + { + $this->subject->setTitle(str_repeat('p', 255)); + + $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); + $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); + $result = $validator->validate($this->subject); + self::assertFalse($result->forProperty('title')->hasErrors()); + + } + + #[Test] + public function invalidTitleLengthReturnsError(): void + { + $this->subject->setTitle(str_repeat('p', 256)); + + $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); + $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); + $result = $validator->validate($this->subject); + self::assertTrue($result->forProperty('title')->hasErrors()); + + } + + #[Test] + public function validateDescriptionLengthReturnsNoErrors(): void + { + $this->subject->setDescription(str_repeat('d', 2000)); + + $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); + $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); + $result = $validator->validate($this->subject); + self::assertFalse($result->forProperty('description')->hasErrors()); + + } + + #[Test] + public function invalidDescriptionLengthReturnsError(): void + { + $this->subject->setDescription(str_repeat('d', 2001)); + + $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); + $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); + $result = $validator->validate($this->subject); + self::assertTrue($result->forProperty('description')->hasErrors()); + } + +} From f159a0070520705634dd6320371934243c2d9553 Mon Sep 17 00:00:00 2001 From: Hermann Azong Date: Mon, 1 Jun 2026 13:03:49 +0200 Subject: [PATCH 2/2] [TASK] Address review feedback --- Tests/Functional/Domain/Model/TeaTest.php | 43 ++++++++++------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/Tests/Functional/Domain/Model/TeaTest.php b/Tests/Functional/Domain/Model/TeaTest.php index 55a2894bf..79be1efb7 100644 --- a/Tests/Functional/Domain/Model/TeaTest.php +++ b/Tests/Functional/Domain/Model/TeaTest.php @@ -7,6 +7,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use TTN\Tea\Domain\Model\Tea; +use TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator; use TYPO3\CMS\Extbase\Validation\ValidatorResolver; use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; @@ -16,59 +17,53 @@ final class TeaTest extends FunctionalTestCase protected array $testExtensionsToLoad = ['ttn/tea']; private Tea $subject; + private ConjunctionValidator $validator; protected function setUp(): void { parent::setUp(); - $this->subject = new Tea(); - + $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); + $this->validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); } #[Test] - public function validTitleLengthReturnsNoError(): void + public function titleWithMaximumLengthPassesValidation(): void { $this->subject->setTitle(str_repeat('p', 255)); - - $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); - $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); - $result = $validator->validate($this->subject); + $result = $this->validator->validate($this->subject); self::assertFalse($result->forProperty('title')->hasErrors()); - } #[Test] - public function invalidTitleLengthReturnsError(): void + public function titleLongerThanMaximumLengthDoesNotPassValidation(): void { $this->subject->setTitle(str_repeat('p', 256)); - - $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); - $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); - $result = $validator->validate($this->subject); + $result = $this->validator->validate($this->subject); self::assertTrue($result->forProperty('title')->hasErrors()); + } + #[Test] + public function emptyTitleDoesNotPassValidation(): void + { + $this->subject->setTitle(''); + $result = $this->validator->validate($this->subject); + self::assertTrue($result->forProperty('title')->hasErrors()); } #[Test] - public function validateDescriptionLengthReturnsNoErrors(): void + public function descriptionWithMaximumLengthPassesValidation(): void { $this->subject->setDescription(str_repeat('d', 2000)); - - $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); - $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); - $result = $validator->validate($this->subject); + $result = $this->validator->validate($this->subject); self::assertFalse($result->forProperty('description')->hasErrors()); - } #[Test] - public function invalidDescriptionLengthReturnsError(): void + public function descriptionLongerThanMaximumLengthDoesNotPassValidation(): void { $this->subject->setDescription(str_repeat('d', 2001)); - - $validatorResolver = $this->getContainer()->get(ValidatorResolver::class); - $validator = $validatorResolver->getBaseValidatorConjunction(Tea::class); - $result = $validator->validate($this->subject); + $result = $this->validator->validate($this->subject); self::assertTrue($result->forProperty('description')->hasErrors()); }