From 4c9ce115fa8378ef88f362d56cfb7ba8d0ccefbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mor=C3=A1vek?= Date: Fri, 30 Nov 2018 17:32:42 +0100 Subject: [PATCH] Validator: add support for value objects --- src/Forms/Validator.php | 10 ++-- ...trols.TextInput.valueObjectValidation.phpt | 60 +++++++++++++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 tests/Forms/Controls.TextInput.valueObjectValidation.phpt diff --git a/src/Forms/Validator.php b/src/Forms/Validator.php index 7e7cdba4b..136c19fb6 100644 --- a/src/Forms/Validator.php +++ b/src/Forms/Validator.php @@ -225,7 +225,7 @@ public static function validateSubmitted(Controls\SubmitButton $control): bool */ public static function validateEmail(IControl $control): bool { - return Validators::isEmail($control->getValue()); + return Validators::isEmail((string) $control->getValue()); } @@ -234,10 +234,12 @@ public static function validateEmail(IControl $control): bool */ public static function validateUrl(IControl $control): bool { - if (Validators::isUrl($value = $control->getValue())) { + $value = (string) $control->getValue(); + if (Validators::isUrl($value)) { return true; - - } elseif (Validators::isUrl($value = "http://$value")) { + } + $value = "http://$value"; + if (Validators::isUrl($value)) { $control->setValue($value); return true; } diff --git a/tests/Forms/Controls.TextInput.valueObjectValidation.phpt b/tests/Forms/Controls.TextInput.valueObjectValidation.phpt new file mode 100644 index 000000000..68168f4ab --- /dev/null +++ b/tests/Forms/Controls.TextInput.valueObjectValidation.phpt @@ -0,0 +1,60 @@ +value = $value; + } + + + public function __toString(): string + { + return $this->value; + } +} + + +test(function (): void { // e-mail + $form = new Form; + $input = $form->addEmail('email'); + + $input->setValue(new ValueObject('example@example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); +}); + + +test(function (): void { // URL + $form = new Form; + $input = $form->addText('url') + ->addRule(Form::URL); + + $input->setValue(new ValueObject('https://example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); + + $input->setValue(new ValueObject('example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); +});