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

Commit

Permalink
Making sure this branch isn't behind master
Browse files Browse the repository at this point in the history
Merge remote-tracking branch 'zf2/master' into fix#3373
  • Loading branch information
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 20 deletions.
15 changes: 9 additions & 6 deletions src/BaseInputFilter.php
Expand Up @@ -159,6 +159,14 @@ public function isValid()
$inputs = $this->validationGroup ?: array_keys($this->inputs);
foreach ($inputs as $name) {
$input = $this->inputs[$name];
if ((!array_key_exists($name, $this->data)
|| (null === $this->data[$name]))
&& $input instanceof InputInterface
&& !$input->isRequired()
) {
$this->validInputs[$name] = $input;
continue;
}
if (!array_key_exists($name, $this->data)
|| (null === $this->data[$name])
|| (is_string($this->data[$name]) && strlen($this->data[$name]) === 0)
Expand All @@ -170,19 +178,14 @@ public function isValid()
&& isset($this->data[$name][0]['error']) && $this->data[$name][0]['error'] === UPLOAD_ERR_NO_FILE)
) {
if ($input instanceof InputInterface) {
// - test if input is required
if (!$input->isRequired()) {
$this->validInputs[$name] = $input;
continue;
}
// - test if input allows empty
if ($input->allowEmpty()) {
$this->validInputs[$name] = $input;
continue;
}
}
// make sure we have a value (empty) for validation
$this->data[$name] = '';
$this->data[$name] = null;
}

if ($input instanceof InputFilterInterface) {
Expand Down
63 changes: 49 additions & 14 deletions test/BaseInputFilterTest.php
Expand Up @@ -85,9 +85,15 @@ public function getInputFilter()
$baz->getFilterChain()->attachByName('stringtrim');
$baz->getValidatorChain()->attach(new Validator\StringLength(1, 6));

$qux = new Input();
$qux->setAllowEmpty(true);
$qux->getFilterChain()->attachByName('stringtrim');
$qux->getValidatorChain()->attach(new Validator\StringLength(5, 6));

$filter->add($foo, 'foo')
->add($bar, 'bar')
->add($baz, 'baz')
->add($qux, 'qux')
->add($this->getChildInputFilter(), 'nest');

return $filter;
Expand Down Expand Up @@ -123,20 +129,48 @@ public function testCanValidateEntireDataset()
$validData = array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'baz' => null,
'qux' => '',
'nest' => array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'baz' => null,
),
);
$filter->setData($validData);
$this->assertTrue($filter->isValid());

$filter = $this->getInputFilter();
$validData = array(
'foo' => ' bazbat ',
'bar' => '12345',
'qux' => '',
'nest' => array(
'foo' => ' bazbat ',
'bar' => '12345',
),
);
$filter->setData($validData);
$this->assertTrue($filter->isValid());

$invalidData = array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'nest' => array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
),
);
$filter->setData($invalidData);
$this->assertFalse($filter->isValid());

$invalidData = array(
'foo' => ' baz bat ',
'bar' => 'abc45',
'baz' => ' ',
'qux' => ' ',
'nest' => array(
'foo' => ' baz bat ',
'bar' => '123ab',
Expand Down Expand Up @@ -227,23 +261,23 @@ public function testValuesRetrievedAreFiltered()
$validData = array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'qux' => '',
'nest' => array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
),
);
$filter->setData($validData);
$this->assertTrue($filter->isValid());
$expected = array(
'foo' => 'bazbat',
'bar' => '12345',
'baz' => '',
'baz' => null,
'qux' => '',
'nest' => array(
'foo' => 'bazbat',
'bar' => '12345',
'baz' => '',
'baz' => null,
),
);
$this->assertEquals($expected, $filter->getValues());
Expand All @@ -255,11 +289,12 @@ public function testCanGetRawInputValues()
$validData = array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'baz' => null,
'qux' => '',
'nest' => array(
'foo' => ' bazbat ',
'bar' => '12345',
'baz' => '',
'baz' => null,
),
);
$filter->setData($validData);
Expand Down Expand Up @@ -415,13 +450,13 @@ public function testValidationSkipsFieldsMarkedNotRequiredWhenNoDataPresent()
$this->assertTrue($filter->isValid());
}

public function testValidationSkipsFileInputsMarkedNotRequiredWhenNoFileDataIsPresent()
public function testValidationSkipsFileInputsMarkedAllowEmptyWhenNoFileDataIsPresent()
{
$filter = new InputFilter();

$foo = new FileInput();
$foo->getValidatorChain()->attach(new Validator\File\UploadFile());
$foo->setRequired(false);
$foo->setAllowEmpty(true);

$filter->add($foo, 'foo');

Expand All @@ -438,16 +473,16 @@ public function testValidationSkipsFileInputsMarkedNotRequiredWhenNoFileDataIsPr
$this->assertTrue($filter->isValid());

// Negative test
$foo->setRequired(true);
$foo->setAllowEmpty(false);
$filter->setData($data);
$this->assertFalse($filter->isValid());
}

public function testValidationSkipsFileInputsMarkedNotRequiredWhenNoMultiFileDataIsPresent()
public function testValidationSkipsFileInputsMarkedAllowEmptyWhenNoMultiFileDataIsPresent()
{
$filter = new InputFilter();
$foo = new FileInput();
$foo->setRequired(false);
$foo->setAllowEmpty(true);
$filter->add($foo, 'foo');

$data = array(
Expand All @@ -463,7 +498,7 @@ public function testValidationSkipsFileInputsMarkedNotRequiredWhenNoMultiFileDat
$this->assertTrue($filter->isValid());

// Negative test
$foo->setRequired(true);
$foo->setAllowEmpty(false);
$filter->setData($data);
$this->assertFalse($filter->isValid());
}
Expand Down

0 comments on commit 918afd4

Please sign in to comment.