Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

Provide NotEmpty::IS_EMPTY validation message for required input #61

Merged
merged 4 commits into from
Sep 3, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ArrayInput.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public function isValid($context = null)

if (! $hasValue && $required) {
if ($this->errorMessage === null) {
$this->setErrorMessage('Value is required');
$this->errorMessage = $this->prepareRequiredValidationFailureMessage();
}
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion src/FileInput.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public function isValid($context = null)

if (! $hasValue && $required && ! $this->hasFallback()) {
if ($this->errorMessage === null) {
$this->setErrorMessage('Value is required');
$this->errorMessage = $this->prepareRequiredValidationFailureMessage();
}
return false;
}
Expand Down
16 changes: 15 additions & 1 deletion src/Input.php
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ public function isValid($context = null)

if (! $hasValue && $required) {
if ($this->errorMessage === null) {
$this->setErrorMessage('Value is required');
$this->errorMessage = $this->prepareRequiredValidationFailureMessage();
}
return false;
}
Expand Down Expand Up @@ -483,4 +483,18 @@ protected function injectNotEmptyValidator()

$chain->prependValidator(new NotEmpty(), true);
}

/**
* Create and return the validation failure message for required input.
*
* @return string[]
*/
protected function prepareRequiredValidationFailureMessage()
{
$notEmpty = new NotEmpty();
$templates = $notEmpty->getOption('messageTemplates');
return [
NotEmpty::IS_EMPTY => $templates[NotEmpty::IS_EMPTY],
];
}
}
30 changes: 25 additions & 5 deletions test/InputTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Zend\InputFilter\Input;
use Zend\InputFilter\InputInterface;
use Zend\Validator;
use Zend\Validator\NotEmpty;
use Zend\Validator\ValidatorChain;

/**
Expand All @@ -34,6 +35,21 @@ public function setUp()
$this->input = new Input('foo');
}

public function assertRequiredValidationErrorMessage($input, $message = '')
{
$message = $message ?: 'Expected failure message for required input';
$message .= ';';

$messages = $input->getMessages();
$this->assertInternalType('array', $messages, $message . ' non-array messages array');

$notEmpty = new NotEmpty();
$messageTemplates = $notEmpty->getOption('messageTemplates');
$this->assertSame([
NotEmpty::IS_EMPTY => $messageTemplates[NotEmpty::IS_EMPTY],
], $messages, $message . ' missing NotEmpty::IS_EMPTY key and/or contains additional messages');
}

public function testConstructorRequiresAName()
{
$this->assertEquals('foo', $this->input->getName());
Expand Down Expand Up @@ -172,20 +188,24 @@ public function testRequiredWithoutFallbackAndValueNotSetThenFail()
$input->isValid(),
'isValid() should be return always false when no fallback value, is required, and not data is set.'
);
$this->assertEquals(['Value is required'], $input->getMessages(), 'getMessages() value not match');
$this->assertRequiredValidationErrorMessage($input);
}

public function testRequiredWithoutFallbackAndValueNotSetThenFailWithCustomErrorMessage()
/**
* @group 28
* @group 60
*/
public function testRequiredWithoutFallbackAndValueNotSetProvidesNotEmptyValidatorIsEmptyErrorMessage()
{
$input = $this->input;
$input->setRequired(true);
$input->setErrorMessage('fooErrorMessage');

$this->assertFalse(
$input->isValid(),
'isValid() should be return always false when no fallback value, is required, and not data is set.'
'isValid() should always return false when no fallback value is present, '
. 'the input is required, and no data is set.'
);
$this->assertEquals(['fooErrorMessage'], $input->getMessages(), 'getMessages() value not match');
$this->assertRequiredValidationErrorMessage($input);
}

public function testNotRequiredWithoutFallbackAndValueNotSetThenIsValid()
Expand Down