blob: aefc9a2c756b427f0d3a64f134f68d7613154c5a [file] [log] [blame]
<?php
class Form_validation_test extends CI_TestCase {
public function set_up()
{
// Create a mock loader since load->helper() looks in the wrong directories for unit tests,
// We'll use CI_TestCase->helper() instead
$ldr = $this->getMock('CI_Loader', array('helper'));
// At current, CI_Form_Validation only calls load->helper("form")
// Assert this so that if that changes this fails fast
$ldr->expects($this->once())
->method('helper')
->with($this->equalTo('form'));
// Same applies for lang
$lang = $this->getMock('CI_Lang', array('load'));
// Setup CI_Input
// Set server variable to GET as default, since this will leave unset in STDIN env
$_SERVER['REQUEST_METHOD'] = 'GET';
// Set config for Input class
$this->ci_set_config('allow_get_array', TRUE);
$this->ci_set_config('global_xss_filtering', FALSE);
$this->ci_set_config('csrf_protection', FALSE);
$security = new Mock_Core_Security();
$this->ci_set_config('charset', 'UTF-8');
$utf8 = new Mock_Core_Utf8();
$inp = new Mock_Core_Input($security, $utf8);
$this->ci_instance_var('lang', $lang);
$this->ci_instance_var('load', $ldr);
$this->ci_instance_var('input', $inp);
$this->lang('form_validation');
$this->helper('form');
}
public function test___construct()
{
$this->form_validation = new CI_Form_validation();
$this->assertNotNull($this->form_validation);
}
public function test_rules_valid()
{
$this->form_validation = new CI_Form_validation();
$valid_posts = array(
'required' => array('required',' !'),
'matches[sample]' => 'sample',
'differs[sample]' => 'differ',
'min_length[4]' => array('is_more_than_4', '1234', ' 1'),
'max_length[8]' => array('less_8', '12345678'),
'exact_length[5]' => '12345',
'greater_than[-5]' => array('-4','0','123124451'),
'greater_than_equal_to[8]' => array('8', '99'),
'less_than[0]' => '-1',
'less_than_equal_to[5]' => array('-5', '5'),
'in_list[red,blue,green]' => array('red', 'blue','green'),
'alpha' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ',
'alpha_numeric' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789',
'alpha_numeric_spaces' => ' abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789',
'alpha_dash' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789-_',
'numeric' => '0123456789',
'integer' => array('0', '-1231', '987234'),
'decimal' => array('0.123', '1.0'),
'is_natural' => '0',
'is_natural_no_zero' => '1',
'valid_url' => array('www.codeigniter.com','http://codeigniter.eu'),
'valid_email' => 'email@sample.com',
'valid_emails' => '1@sample.com,2@sample.com',
'valid_ip[ipv4]' => '127.0.0.1',
'valid_ip[ipv6]' => '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
'valid_base64' => 'string'
);
// Loop through each rule and test
foreach ($valid_posts as $rule => $value) {
// Reset $_POST
$_POST = array();
if (is_array($value)) {
foreach($value as $item) {
// printf("%s => %s\n", $rule, $item);
$this->form_validation->set_rules('field', 'name', $rule);
$_POST['field'] = $item;
$this->assertTrue($this->form_validation->run());
$this->form_validation->reset_validation();
}
}
else {
// printf("%s => %s\n", $rule, $value);
$this->form_validation->set_rules('field', 'name', $rule);
$_POST['field'] = $value;
$this->assertTrue($this->form_validation->run());
$this->form_validation->reset_validation();
}
}
}
public function test_rules_invalid()
{
$this->form_validation = new CI_Form_validation();
$invalid_posts = array(
'required' => array('',' '),
'matches[sample]' => 'Sample',
'differ[sample]' => 'sample',
'min_length[4]' => array('123', ''),
'max_length[8]' => array('more_than_8', '12345678 '),
'exact_length[5]' => ' 12345',
'greater_than[-5]' => array('-5, -12415'),
'greater_than_equal_to[8]' => array('7', '0'),
'less_than[0]' => '0',
'less_than_equal_to[5]' => array('6', '98234'),
'in_list[red,blue,green]' => array(' red', 'Blue','failz'),
'alpha' => array('*', ' a', '1'),
'alpha_numeric' => array('a1 ', '*', '1-'),
'alpha_numeric_spaces' => array('a1*', ' ~'),
'alpha_dash' => array('a b', '*'),
'numeric' => array('a', ''),
'integer' => array('0.123', '1a', ''),
'decimal' => array('1', 'a',''),
'is_natural' => array('1.2','aA',''),
'is_natural_no_zero' => array('0','1.2',''),
'valid_url' => array('codeigniter.com','nosite', ''),
'valid_email' => '@sample.com',
'valid_emails' => '@sample.com,2@sample.com,validemail@email.ca',
'valid_ip[ipv4]' => '257.0.0.1',
'valid_ip[ipv6]' => 'A001:0db8:85a3:0000:0000:8a2e:0370:7334',
);
// Loop through each rule and test
foreach ($invalid_posts as $rule => $value) {
// Reset $_POST
$_POST = array();
if (is_array($value)) {
foreach($value as $item) {
printf("%s => %s\n", $rule, $item);
$this->form_validation->set_rules('field', 'name', $rule);
$_POST['field'] = $item;
$this->assertFalse($this->form_validation->run());
$this->form_validation->reset_validation();
}
}
else {
printf("%s => %s\n", $rule, $value);
$this->form_validation->set_rules('field', 'name', $rule);
$_POST['field'] = $value;
$this->assertFalse($this->form_validation->run());
$this->form_validation->reset_validation();
}
}
}
}