Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * CakeValidationRuleTest file
 *
 * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
 * @package       Cake.Test.Case.Model.Validator
 * @since         CakePHP(tm) v 2.2.0
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('CakeValidationRule', 'Model/Validator');

/**
 * CakeValidationRuleTest
 *
 * @package       Cake.Test.Case.Model.Validator
 */
class CakeValidationRuleTest extends CakeTestCase {

/**
 * Auxiliary method to test custom validators
 *
 * @return boolean
 */
        public function myTestRule() {
                return false;
        }

/**
 * Auxiliary method to test custom validators
 *
 * @return boolean
 */
        public function myTestRule2() {
                return true;
        }

/**
 * Auxiliary method to test custom validators
 *
 * @return string
 */
        public function myTestRule3() {
                return 'string';
        }

/**
 * Test isValid method
 *
 * @return void
 */
        public function testIsValid() {
                $def = array('rule' => 'notEmpty', 'message' => 'Can not be empty');
                $data = array(
                        'fieldName' => ''
                );
                $methods = array();

                $Rule = new CakeValidationRule($def);
                $Rule->process('fieldName', $data, $methods);
                $this->assertFalse($Rule->isValid());

                $data = array('fieldName' => 'not empty');
                $Rule->process('fieldName', $data, $methods);
                $this->assertTrue($Rule->isValid());
        }

/**
 * tests that passing custom validation methods work
 *
 * @return void
 */
        public function testCustomMethods() {
                $def = array('rule' => 'myTestRule');
                $data = array(
                        'fieldName' => 'some data'
                );
                $methods = array('mytestrule' => array($this, 'myTestRule'));

                $Rule = new CakeValidationRule($def);
                $Rule->process('fieldName', $data, $methods);
                $this->assertFalse($Rule->isValid());

                $methods = array('mytestrule' => array($this, 'myTestRule2'));
                $Rule->process('fieldName', $data, $methods);
                $this->assertTrue($Rule->isValid());

                $methods = array('mytestrule' => array($this, 'myTestRule3'));
                $Rule->process('fieldName', $data, $methods);
                $this->assertFalse($Rule->isValid());
        }

/**
 * Make sure errors are triggered when validation is missing.
 *
 * @expectedException PHPUnit_Framework_Error_Warning
 * @expectedExceptionMessage Could not find validation handler totallyMissing for fieldName
 * @return void
 */
        public function testCustomMethodMissingError() {
                $def = array('rule' => array('totallyMissing'));
                $data = array(
                        'fieldName' => 'some data'
                );
                $methods = array('mytestrule' => array($this, 'myTestRule'));

                $Rule = new CakeValidationRule($def);
                $Rule->process('fieldName', $data, $methods);
        }

/**
 * Test isRequired method
 *
 * @return void
 */
        public function testIsRequired() {
                $def = array('rule' => 'notEmpty', 'required' => true);
                $Rule = new CakeValidationRule($def);
                $this->assertTrue($Rule->isRequired());

                $def = array('rule' => 'notEmpty', 'required' => false);
                $Rule = new CakeValidationRule($def);
                $this->assertFalse($Rule->isRequired());

                $def = array('rule' => 'notEmpty', 'required' => 'create');
                $Rule = new CakeValidationRule($def);
                $this->assertTrue($Rule->isRequired());

                $def = array('rule' => 'notEmpty', 'required' => 'update');
                $Rule = new CakeValidationRule($def);
                $this->assertFalse($Rule->isRequired());

                $Rule->isUpdate(true);
                $this->assertTrue($Rule->isRequired());
        }

/**
 * Test isEmptyAllowed method
 *
 * @return void
 */
        public function testIsEmptyAllowed() {
                $def = array('rule' => 'aRule', 'allowEmpty' => true);
                $Rule = new CakeValidationRule($def);
                $this->assertTrue($Rule->isEmptyAllowed());

                $def = array('rule' => 'aRule', 'allowEmpty' => false);
                $Rule = new CakeValidationRule($def);
                $this->assertFalse($Rule->isEmptyAllowed());

                $def = array('rule' => 'notEmpty', 'allowEmpty' => false, 'on' => 'update');
                $Rule = new CakeValidationRule($def);
                $this->assertTrue($Rule->isEmptyAllowed());

                $Rule->isUpdate(true);
                $this->assertFalse($Rule->isEmptyAllowed());

                $def = array('rule' => 'notEmpty', 'allowEmpty' => false, 'on' => 'create');
                $Rule = new CakeValidationRule($def);
                $this->assertFalse($Rule->isEmptyAllowed());

                $Rule->isUpdate(true);
                $this->assertTrue($Rule->isEmptyAllowed());
        }

/**
 * Test checkRequired method
 *
 * @return void
 */
        public function testCheckRequiredWhenRequiredAndAllowEmpty() {
                $Rule = $this->getMock('CakeValidationRule', array('isRequired'));
                $Rule->expects($this->any())
                        ->method('isRequired')
                        ->will($this->returnValue(true));
                $Rule->allowEmpty = true;

                $fieldname = 'field';
                $data = array(
                        $fieldname => null
                );

                $this->assertFalse($Rule->checkRequired($fieldname, $data), "A null but present field should not fail requirement check if allowEmpty is true");

                $Rule->allowEmpty = false;

                $this->assertTrue($Rule->checkRequired($fieldname, $data), "A null but present field should fail requirement check if allowEmpty is false");
        }

}