[Solar-svn] Revision 2643

pmjones at solarphp.com pmjones at solarphp.com
Sun Jul 29 10:29:19 CDT 2007


Branch: Solar_FilterTest: [ADD] Added tests for filter chains


Modified: branches/orm/tests/Solar/FilterTest.php
===================================================================
--- branches/orm/tests/Solar/FilterTest.php	2007-07-29 15:16:41 UTC (rev 2642)
+++ branches/orm/tests/Solar/FilterTest.php	2007-07-29 15:29:18 UTC (rev 2643)
@@ -1614,4 +1614,130 @@
             $this->assertTrue($filter->validateWord($val));
         }
     }
+    
+    public function testChain()
+    {
+        /**
+         * build the filter chain
+         */
+        $filter = Solar::factory('Solar_Filter');
+        
+        // required, but no filter
+        $filter->setChainRequire('foo');
+        
+        // one filter
+        $filter->addChainFilter('bar', 'validateInt');
+        
+        // many filters
+        $filter->addChainFilters('baz', array(
+            'sanitizeInt',
+            array('validateRange', 1, 9),
+        ));
+        
+        // required, one filter
+        $filter->setChainRequire('dib');
+        $filter->addChainFilter('dib', 'validateInt');
+        
+        // required, many filters
+        $filter->setChainRequire('zim');
+        $filter->addChainFilters('zim', array(
+            'sanitizeInt',
+            array('validateRange', 1, 9),
+        ));
+        
+        /**
+         * expected output after being sanitized
+         */
+        $expect = array(
+            'foo' => 'anything',
+            'bar' => 123,
+            'baz' => 4,
+            'dib' => 678,
+            'zim' => 7,
+        );
+        
+        /**
+         * apply filter with "valid" user input
+         */
+        
+        // user input
+        $data = array(
+            'foo' => 'anything',
+            'bar' => 123,
+            'baz' => 4.5,
+            'dib' => 678,
+            'zim' => 7.9,
+        );
+        
+        // valid?
+        $valid = $filter->applyChain($data);
+        $this->assertTrue($valid);
+        
+        // should have sanitized the data in-place
+        $this->assertSame($data, $expect);
+        
+        /**
+         * apply filter with invalid user input
+         */
+        
+        // user input
+        $data = array(
+            'foo' => 'anything',
+            'bar' => 'abc',         // validateInt
+            'baz' => 123,           // validateRange
+            'dib' => 456,
+            'zim' => -78,           // validateRange
+        );
+        
+        // valid?
+        $valid = $filter->applyChain($data);
+        $this->assertFalse($valid);
+        
+        // get the list of invalid elements
+        $invalid = $filter->getChainInvalid();
+        $keys = array_keys($invalid);
+        $this->assertSame($keys, array('bar', 'baz', 'zim'));
+        
+        /**
+         * apply filter with missing requires
+         */
+        
+        // user input
+        $data = array(
+            'foo' => null,
+            'bar' => 123,
+            'baz' => 4.5,
+            'dib' => '',
+        );
+        
+        // valid?
+        $valid = $filter->applyChain($data);
+        $this->assertFalse($valid);
+        
+        // get the list of invalid elements
+        $invalid = $filter->getChainInvalid();
+        $keys = array_keys($invalid);
+        $this->assertSame($keys, array('foo', 'dib', 'zim'));
+        
+        /**
+         * apply filter with invalid user input and missing requires
+         */
+        
+        // user input
+        $data = array(
+            'bar' => 'abc',         // validateInt
+            'baz' => 123,           // validateRange
+            'dib' => 4.5,
+        );
+        
+        // valid?
+        $valid = $filter->applyChain($data);
+        $this->assertFalse($valid);
+        
+        // get the list of invalid elements
+        $invalid = $filter->getChainInvalid();
+        $keys = array_keys($invalid);
+        $this->assertEquals($keys, array('foo', 'zim', 'bar', 'baz', 'dib'));
+        Solar::dump($invalid);
+    }
 }




More information about the Solar-svn mailing list