From 7c94b2ae5a657d5355c7a64f7c3e7bc7e82cb873 Mon Sep 17 00:00:00 2001 From: Tom Breese Date: Sun, 4 Feb 2018 13:24:47 -0500 Subject: [PATCH 1/4] added support for nested arrays in validateEquals and validateDifferent validation methods --- src/Valitron/Validator.php | 12 ++++++------ tests/Valitron/ValidateTest.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index c629ca4..4be39e3 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -173,9 +173,9 @@ class Validator */ protected function validateEquals($field, $value, array $params) { - $field2 = $params[0]; - - return isset($this->_fields[$field2]) && $value == $this->_fields[$field2]; + // extract the second field value, this accounts for nested array values + list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0])); + return isset($field2Value) && $value == $field2Value; } /** @@ -189,9 +189,9 @@ class Validator */ protected function validateDifferent($field, $value, array $params) { - $field2 = $params[0]; - - return isset($this->_fields[$field2]) && $value != $this->_fields[$field2]; + // extract the second field value, this accounts for nested array values + list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0])); + return isset($field2Value) && $value != $field2Value; } /** diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index adf296e..7f07e5f 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -1271,6 +1271,34 @@ class ValidateTest extends BaseTestCase $v2->rule('required', array('empty_text', 'null_value', 'in_array.empty_text'), true); $this->assertTrue($v2->validate()); } + + public function testNestedEqualsValid() + { + $v = new Validator(array('foo' => array('one' => 'bar', 'two' => 'bar'))); + $v->rule('equals', 'foo.one', 'foo.two'); + $this->assertTrue($v->validate()); + } + + public function testNestedEqualsInvalid() + { + $v = new Validator(array('foo' => array('one' => 'bar', 'two' => 'baz'))); + $v->rule('equals', 'foo.one', 'foo.two'); + $this->assertFalse($v->validate()); + } + + public function testNestedDifferentValid() + { + $v = new Validator(array('foo' => array('one' => 'bar', 'two' => 'baz'))); + $v->rule('different', 'foo.one', 'foo.two'); + $this->assertTrue($v->validate()); + } + + public function testNestedDifferentInvalid() + { + $v = new Validator(array('foo' => array('one' => 'baz', 'two' => 'baz'))); + $v->rule('different', 'foo.one', 'foo.two'); + $this->assertFalse($v->validate()); + } } function sampleFunctionCallback($field, $value, array $params) { From 06d1740c3213fa846a77f554afefed1c75689e81 Mon Sep 17 00:00:00 2001 From: Tom Breese Date: Tue, 6 Feb 2018 23:02:03 -0500 Subject: [PATCH 2/4] adding tests for nulls/not set values for nested and not nested equals and different methods --- tests/Valitron/ValidateTest.php | 114 ++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 7f07e5f..74084b0 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -70,6 +70,36 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + public function testEqualsBothNull() + { + $v = new Validator(array('foo' => null, 'bar' => null)); + $v->rule('equals', 'foo', 'bar'); + $this->assertTrue($v->validate()); + } + + public function testEqualsBothNullRequired() + { + $v = new Validator(array('foo' => null, 'bar' => null)); + $v->rule('required', ['foo', 'bar']); + $v->rule('equals', 'foo', 'bar'); + $this->assertFalse($v->validate()); + } + + public function testEqualsBothUnset() + { + $v = new Validator(array('foo' => 1)); + $v->rule('equals', 'bar', 'baz'); + $this->assertTrue($v->validate()); + } + + public function testEqualsBothUnsetRequired() + { + $v = new Validator(array('foo' => 1)); + $v->rule('required', ['bar', 'baz']); + $v->rule('equals', 'bar', 'baz'); + $this->assertFalse($v->validate()); + } + public function testDifferentValid() { $v = new Validator(array('foo' => 'bar', 'bar' => 'baz')); @@ -84,6 +114,36 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + public function testDifferentBothNull() + { + $v = new Validator(array('foo' => null, 'bar' => null)); + $v->rule('equals', 'foo', 'bar'); + $this->assertTrue($v->validate()); + } + + public function testDifferentBothNullRequired() + { + $v = new Validator(array('foo' => null, 'bar' => null)); + $v->rule('required', ['foo', 'bar']); + $v->rule('equals', 'foo', 'bar'); + $this->assertFalse($v->validate()); + } + + public function testDifferentBothUnset() + { + $v = new Validator(array('foo' => 1)); + $v->rule('equals', 'bar', 'baz'); + $this->assertTrue($v->validate()); + } + + public function testDifferentBothUnsetRequired() + { + $v = new Validator(array('foo' => 1)); + $v->rule('required', ['bar', 'baz']); + $v->rule('equals', 'bar', 'baz'); + $this->assertFalse($v->validate()); + } + public function testAcceptedValid() { $v = new Validator(array('agree' => 'yes')); @@ -1286,6 +1346,36 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + public function testNestedEqualsBothNull() + { + $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); + $v->rule('equals', 'foo.bar', 'foo.baz'); + $this->assertTrue($v->validate()); + } + + public function testNestedEqualsBothNullRequired() + { + $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); + $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('equals', 'foo.bar', 'foo.baz'); + $this->assertFalse($v->validate()); + } + + public function testNestedEqualsBothUnset() + { + $v = new Validator(array('foo' => 'bar')); + $v->rule('equals', 'foo.one', 'foo.two'); + $this->assertTrue($v->validate()); + } + + public function testNestedEqualsBothUnsetRequired() + { + $v = new Validator(array('foo' => 'bar')); + $v->rule('required', ['foo.one', 'foo.two']); + $v->rule('equals', 'foo.one', 'foo.two'); + $this->assertFalse($v->validate()); + } + public function testNestedDifferentValid() { $v = new Validator(array('foo' => array('one' => 'bar', 'two' => 'baz'))); @@ -1299,6 +1389,30 @@ class ValidateTest extends BaseTestCase $v->rule('different', 'foo.one', 'foo.two'); $this->assertFalse($v->validate()); } + + public function testNestedDifferentBothNull() + { + $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); + $v->rule('different', 'foo.bar', 'foo.baz'); + $this->assertTrue($v->validate()); + } + + public function testNestedDifferentBothNullRequired() + { + $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); + $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('different', 'foo.bar', 'foo.baz'); + $this->assertFalse($v->validate()); + } + + public function testNestedDifferentBothUnsetRequired() + { + $v = new Validator(array('foo' => 'bar')); + $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('different', 'foo.bar', 'foo.baz'); + $this->assertFalse($v->validate()); + } + } function sampleFunctionCallback($field, $value, array $params) { From 32dec57f69e93cc9de3312c812ecb2540864ac81 Mon Sep 17 00:00:00 2001 From: Tom Breese Date: Tue, 6 Feb 2018 23:05:25 -0500 Subject: [PATCH 3/4] adding nested different both unser required test --- tests/Valitron/ValidateTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 74084b0..b81c308 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -1405,6 +1405,13 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + public function testNestedDifferentBothUnset() + { + $v = new Validator(array('foo' => 'bar')); + $v->rule('different', 'foo.bar', 'foo.baz'); + $this->assertTrue($v->validate()); + } + public function testNestedDifferentBothUnsetRequired() { $v = new Validator(array('foo' => 'bar')); From 19a1e123bdc000adc47d53a5efb489e59ed18d99 Mon Sep 17 00:00:00 2001 From: Tom Breese Date: Tue, 6 Feb 2018 23:10:20 -0500 Subject: [PATCH 4/4] updating tests for 5.3 compatible arrays --- tests/Valitron/ValidateTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index b81c308..04c147c 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -80,7 +80,7 @@ class ValidateTest extends BaseTestCase public function testEqualsBothNullRequired() { $v = new Validator(array('foo' => null, 'bar' => null)); - $v->rule('required', ['foo', 'bar']); + $v->rule('required', array('foo', 'bar')); $v->rule('equals', 'foo', 'bar'); $this->assertFalse($v->validate()); } @@ -95,7 +95,7 @@ class ValidateTest extends BaseTestCase public function testEqualsBothUnsetRequired() { $v = new Validator(array('foo' => 1)); - $v->rule('required', ['bar', 'baz']); + $v->rule('required', array('bar', 'baz')); $v->rule('equals', 'bar', 'baz'); $this->assertFalse($v->validate()); } @@ -124,7 +124,7 @@ class ValidateTest extends BaseTestCase public function testDifferentBothNullRequired() { $v = new Validator(array('foo' => null, 'bar' => null)); - $v->rule('required', ['foo', 'bar']); + $v->rule('required', array('foo', 'bar')); $v->rule('equals', 'foo', 'bar'); $this->assertFalse($v->validate()); } @@ -139,7 +139,7 @@ class ValidateTest extends BaseTestCase public function testDifferentBothUnsetRequired() { $v = new Validator(array('foo' => 1)); - $v->rule('required', ['bar', 'baz']); + $v->rule('required', array('bar', 'baz')); $v->rule('equals', 'bar', 'baz'); $this->assertFalse($v->validate()); } @@ -1356,7 +1356,7 @@ class ValidateTest extends BaseTestCase public function testNestedEqualsBothNullRequired() { $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); - $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('required', array('foo.bar', 'foo.baz')); $v->rule('equals', 'foo.bar', 'foo.baz'); $this->assertFalse($v->validate()); } @@ -1371,7 +1371,7 @@ class ValidateTest extends BaseTestCase public function testNestedEqualsBothUnsetRequired() { $v = new Validator(array('foo' => 'bar')); - $v->rule('required', ['foo.one', 'foo.two']); + $v->rule('required', array('foo.one', 'foo.two')); $v->rule('equals', 'foo.one', 'foo.two'); $this->assertFalse($v->validate()); } @@ -1400,7 +1400,7 @@ class ValidateTest extends BaseTestCase public function testNestedDifferentBothNullRequired() { $v = new Validator(array('foo' => array('bar' => null, 'baz' => null))); - $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('required', array('foo.bar', 'foo.baz')); $v->rule('different', 'foo.bar', 'foo.baz'); $this->assertFalse($v->validate()); } @@ -1415,7 +1415,7 @@ class ValidateTest extends BaseTestCase public function testNestedDifferentBothUnsetRequired() { $v = new Validator(array('foo' => 'bar')); - $v->rule('required', ['foo.bar', 'foo.baz']); + $v->rule('required', array('foo.bar', 'foo.baz')); $v->rule('different', 'foo.bar', 'foo.baz'); $this->assertFalse($v->validate()); }