Browse Source

Added strict checks to `Validation::comparison()`.

Robert Pustułka 8 years ago
parent
commit
37bc1518c8

+ 13 - 1
src/Validation/Validation.php

@@ -295,6 +295,18 @@ class Validation
                     return true;
                 }
                 break;
+            case 'sameas':
+            case '===':
+                if ($check1 === $check2) {
+                    return true;
+                }
+                break;
+            case 'notsameas':
+            case '!==':
+                if ($check1 !== $check2) {
+                    return true;
+                }
+                break;
             default:
                 static::$errors[] = 'You must define the $operator parameter for Validation::comparison()';
         }
@@ -314,7 +326,7 @@ class Validation
      */
     public static function compareWith($check, $field, $context)
     {
-        return self::compareFields($check, $field, 'equalto', $context);
+        return self::compareFields($check, $field, '===', $context);
     }
 
     /**

+ 2 - 2
src/Validation/Validator.php

@@ -983,7 +983,7 @@ class Validator implements ArrayAccess, IteratorAggregate, Countable
         $extra = array_filter(['on' => $when, 'message' => $message]);
 
         return $this->add($field, 'sameAs', $extra + [
-            'rule' => ['compareFields', $secondField, 'equalto']
+            'rule' => ['compareFields', $secondField, '===']
         ]);
     }
 
@@ -1004,7 +1004,7 @@ class Validator implements ArrayAccess, IteratorAggregate, Countable
         $extra = array_filter(['on' => $when, 'message' => $message]);
 
         return $this->add($field, 'notSameAs', $extra + [
-            'rule' => ['compareFields', $secondField, 'notequal']
+            'rule' => ['compareFields', $secondField, '!==']
         ]);
     }
 

+ 8 - 0
tests/TestCase/Validation/ValidationTest.php

@@ -855,6 +855,10 @@ class ValidationTest extends TestCase
         $this->assertTrue(Validation::comparison(7, '==', 7));
         $this->assertTrue(Validation::comparison(7, 'not equal', 6));
         $this->assertTrue(Validation::comparison(7, '!=', 6));
+        $this->assertTrue(Validation::comparison(7, 'same as', 7));
+        $this->assertTrue(Validation::comparison(7, '===', 7));
+        $this->assertTrue(Validation::comparison(7, 'not same as', '7'));
+        $this->assertTrue(Validation::comparison(7, '!==', '7'));
         $this->assertFalse(Validation::comparison(6, 'is greater', 7));
         $this->assertFalse(Validation::comparison(6, '>', 7));
         $this->assertFalse(Validation::comparison(7, 'is less', 6));
@@ -869,6 +873,10 @@ class ValidationTest extends TestCase
         $this->assertFalse(Validation::comparison(7, '==', 6));
         $this->assertFalse(Validation::comparison(7, 'not equal', 7));
         $this->assertFalse(Validation::comparison(7, '!=', 7));
+        $this->assertFalse(Validation::comparison(7, 'same as', '7'));
+        $this->assertFalse(Validation::comparison(7, '===', '7'));
+        $this->assertFalse(Validation::comparison(7, 'not same as', 7));
+        $this->assertFalse(Validation::comparison(7, '!==', 7));
 
         $this->assertTrue(Validation::comparison('6.5', '!=', 6));
         $this->assertTrue(Validation::comparison('6.5', '<', 7));

+ 2 - 2
tests/TestCase/Validation/ValidatorTest.php

@@ -1425,7 +1425,7 @@ class ValidatorTest extends TestCase
     public function testSameAs()
     {
         $validator = new Validator();
-        $this->assertProxyMethod($validator, 'sameAs', 'other', ['other', 'equalto'], 'compareFields');
+        $this->assertProxyMethod($validator, 'sameAs', 'other', ['other', '==='], 'compareFields');
         $this->assertNotEmpty($validator->errors(['username' => 'foo']));
     }
 
@@ -1437,7 +1437,7 @@ class ValidatorTest extends TestCase
     public function testNotSameAs()
     {
         $validator = new Validator();
-        $this->assertProxyMethod($validator, 'notSameAs', 'other', ['other', 'notequal'], 'compareFields');
+        $this->assertProxyMethod($validator, 'notSameAs', 'other', ['other', '!=='], 'compareFields');
         $this->assertNotEmpty($validator->errors(['username' => 'foo', 'other' => 'foo']));
     }