diff --git a/src/lib/Content/View/Filter/ContentEditViewFilter.php b/src/lib/Content/View/Filter/ContentEditViewFilter.php index 609d7f07..ccc9d83b 100644 --- a/src/lib/Content/View/Filter/ContentEditViewFilter.php +++ b/src/lib/Content/View/Filter/ContentEditViewFilter.php @@ -100,7 +100,7 @@ public function handleContentEditForm(FilterViewBuilderParametersEvent $event): $event->getParameters()->add([ 'form' => $form->handleRequest($request), - 'validate' => (bool)$request->get('validate', false), + 'validate' => $request->query->getBoolean('validate'), ]); } diff --git a/src/lib/Validator/Constraints/Password.php b/src/lib/Validator/Constraints/Password.php index ff3b44f7..4d794ba2 100644 --- a/src/lib/Validator/Constraints/Password.php +++ b/src/lib/Validator/Constraints/Password.php @@ -9,6 +9,7 @@ namespace Ibexa\ContentForms\Validator\Constraints; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; +use Symfony\Component\Validator\Attribute\HasNamedArguments; use Symfony\Component\Validator\Constraint; /** @@ -16,10 +17,28 @@ */ class Password extends Constraint { - public string $message = 'ez.user.password.invalid'; + protected const string MESSAGE = 'ez.user.password.invalid'; + + public string $message = self::MESSAGE; public ?ContentType $contentType; + /** + * @param array|null $groups + */ + #[HasNamedArguments] + public function __construct( + ?ContentType $contentType = null, + ?string $message = null, + ?array $groups = null, + mixed $payload = null + ) { + parent::__construct(null, $groups, $payload); + + $this->contentType = $contentType; + $this->message = $message ?? static::MESSAGE; + } + public function getTargets(): array { return [self::CLASS_CONSTRAINT, self::PROPERTY_CONSTRAINT]; diff --git a/tests/lib/Validator/Constraints/PasswordTest.php b/tests/lib/Validator/Constraints/PasswordTest.php index da147b2d..736f6981 100644 --- a/tests/lib/Validator/Constraints/PasswordTest.php +++ b/tests/lib/Validator/Constraints/PasswordTest.php @@ -10,8 +10,12 @@ use Ibexa\ContentForms\Validator\Constraints\Password; use Ibexa\ContentForms\Validator\Constraints\PasswordValidator; +use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; use PHPUnit\Framework\TestCase; +/** + * @covers \Ibexa\ContentForms\Validator\Constraints\Password + */ final class PasswordTest extends TestCase { private Password $constraint; @@ -41,4 +45,22 @@ public function testGetTargets(): void $this->constraint->getTargets() ); } + + public function testNamedArguments(): void + { + $contentType = $this->createMock(ContentType::class); + $payload = new \stdClass(); + + $constraint = new Password( + contentType: $contentType, + message: 'Custom message', + groups: ['custom'], + payload: $payload + ); + + self::assertSame($contentType, $constraint->contentType); + self::assertSame('Custom message', $constraint->message); + self::assertSame(['custom'], $constraint->groups); + self::assertSame($payload, $constraint->payload); + } } diff --git a/tests/lib/Validator/Constraints/PasswordValidatorTest.php b/tests/lib/Validator/Constraints/PasswordValidatorTest.php index 1940a042..65fde0cd 100644 --- a/tests/lib/Validator/Constraints/PasswordValidatorTest.php +++ b/tests/lib/Validator/Constraints/PasswordValidatorTest.php @@ -72,9 +72,7 @@ public function testValid(): void ->expects(self::never()) ->method('buildViolation'); - $this->validator->validate($password, new Password([ - 'contentType' => $contentType, - ])); + $this->validator->validate($password, new Password(contentType: $contentType)); } public function testInvalid(): void @@ -117,9 +115,7 @@ public function testInvalid(): void ->expects(self::once()) ->method('addViolation'); - $this->validator->validate('pass', new Password([ - 'contentType' => $contentType, - ])); + $this->validator->validate('pass', new Password(contentType: $contentType)); } public function dataProviderForValidateNotSupportedValueType(): array diff --git a/tests/lib/Validator/Constraints/UserAccountPasswordTest.php b/tests/lib/Validator/Constraints/UserAccountPasswordTest.php index 0a357146..a100cf2b 100644 --- a/tests/lib/Validator/Constraints/UserAccountPasswordTest.php +++ b/tests/lib/Validator/Constraints/UserAccountPasswordTest.php @@ -10,6 +10,7 @@ use Ibexa\ContentForms\Validator\Constraints\UserAccountPassword; use Ibexa\ContentForms\Validator\Constraints\UserAccountPasswordValidator; +use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Constraint; @@ -36,4 +37,13 @@ public function testGetTargets(): void { self::assertSame([Constraint::CLASS_CONSTRAINT, Constraint::PROPERTY_CONSTRAINT], $this->constraint->getTargets()); } + + public function testNamedArguments(): void + { + $contentType = $this->createMock(ContentType::class); + + $constraint = new UserAccountPassword(contentType: $contentType); + + self::assertSame($contentType, $constraint->contentType); + } } diff --git a/tests/lib/Validator/Constraints/UserAccountPasswordValidatorTest.php b/tests/lib/Validator/Constraints/UserAccountPasswordValidatorTest.php index 448d7ad3..7bd31a7b 100644 --- a/tests/lib/Validator/Constraints/UserAccountPasswordValidatorTest.php +++ b/tests/lib/Validator/Constraints/UserAccountPasswordValidatorTest.php @@ -81,9 +81,7 @@ public function testValid(): void ->expects(self::never()) ->method('buildViolation'); - $this->validator->validate($userAccount, new UserAccountPassword([ - 'contentType' => $contentType, - ])); + $this->validator->validate($userAccount, new UserAccountPassword(contentType: $contentType)); } public function testInvalid(): void @@ -126,8 +124,6 @@ public function testInvalid(): void ->expects(self::once()) ->method('addViolation'); - $this->validator->validate($userAccount, new UserAccountPassword([ - 'contentType' => $contentType, - ])); + $this->validator->validate($userAccount, new UserAccountPassword(contentType: $contentType)); } }