[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