Add unit tests for CRM_Utils_Type
authorColeman Watts <coleman@civicrm.org>
Sun, 27 Sep 2015 18:28:14 +0000 (14:28 -0400)
committermonishdeb <monish.deb@webaccessglobal.com>
Wed, 30 Sep 2015 12:50:58 +0000 (18:20 +0530)
CRM/Utils/Rule.php
CRM/Utils/Type.php
tests/phpunit/CRM/Utils/TypeTest.php

index c4c0be33b69b50ec45f72a3f8583312b7546fd02..5a0cf47a7ccfdcd294cb10f64ec7ae28d226b35e 100644 (file)
@@ -761,10 +761,7 @@ class CRM_Utils_Rule {
       $value = $actualElementValue;
     }
 
-    if ($value && !is_numeric($value)) {
-      return FALSE;
-    }
-    return TRUE;
+    return CRM_Utils_Rule::positiveInteger($value);
   }
 
   /**
index be390ae230c9e51ee8d6509385aea855fea7d9ff..61fad52555e116d6abefd16eddd055a3d6f87337 100644 (file)
@@ -175,10 +175,11 @@ class CRM_Utils_Type {
       case 'StateProvince':
         if (is_array($data)) {
           $valid = TRUE;
-          foreach ($data as $item) {
+          foreach ($data as &$item) {
             if (!CRM_Utils_Rule::positiveInteger($item)) {
               $valid = FALSE;
             }
+            $item = (int) $item;
           }
           if ($valid) {
             return $data;
@@ -241,7 +242,7 @@ class CRM_Utils_Type {
         }
 
         if (CRM_Utils_Rule::validContact($data)) {
-          return $data;
+          return (int) $data;
         }
         break;
 
@@ -286,7 +287,7 @@ class CRM_Utils_Type {
 
       case 'Positive':
         if (CRM_Utils_Rule::positiveInteger($data)) {
-          return $data;
+          return (int) $data;
         }
         break;
 
index 32ee27a4b6babf4cc51306804f011c68412c26ca..eef34932afb725c0d5e49abab1adce3ebdc5e3f5 100644 (file)
@@ -18,7 +18,7 @@ class CRM_Utils_TypeTest extends CiviUnitTestCase {
    * @param $expectedResult
    */
   public function testValidate($inputData, $inputType, $expectedResult) {
-    $this->assertEquals($expectedResult, CRM_Utils_Type::validate($inputData, $inputType, FALSE));
+    $this->assertTrue($expectedResult === CRM_Utils_Type::validate($inputData, $inputType, FALSE));
   }
 
   /**
@@ -41,4 +41,42 @@ class CRM_Utils_TypeTest extends CiviUnitTestCase {
     );
   }
 
+  /**
+   * @dataProvider escapeDataProvider
+   * @param $inputData
+   * @param $inputType
+   * @param $expectedResult
+   */
+  public function testEscape($inputData, $inputType, $expectedResult) {
+    $this->assertTrue($expectedResult === CRM_Utils_Type::escape($inputData, $inputType, FALSE));
+  }
+
+  /**
+   * @return array
+   */
+  public function escapeDataProvider() {
+    return array(
+      array(10, 'Int', 10),
+      array('145E+3', 'Int', NULL),
+      array('10', 'Integer', 10),
+      array(-10, 'Int', -10),
+      array(array(), 'Integer', NULL),
+      array('-10foo', 'Int', NULL),
+      array(10, 'Positive', 10),
+      array('145.0E+3', 'Positive', NULL),
+      array('10', 'Positive', 10),
+      array(-10, 'Positive', NULL),
+      array('-10', 'Positive', NULL),
+      array('-10foo', 'Positive', NULL),
+      array(array('10', 20), 'Country', array(10, 20)),
+      array(array('10', '-10foo'), 'Country', NULL),
+      array('', 'Timestamp', ''),
+      array('', 'ContactReference', ''),
+      array('3', 'ContactReference', 3),
+      array('-3', 'ContactReference', NULL),
+      // Escape function is meant for sql, not xss
+      array('<p onclick="alert(\'xss\');">Hello</p>', 'Memo', '<p onclick=\\"alert(\\\'xss\\\');\\">Hello</p>'),
+    );
+  }
+
 }