Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * CakeValidationSetTest 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('CakeValidationSet', 'Model/Validator');

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

/**
 * override locale to the default (eng).
 *
 * @return void
 */
        public function setUp() {
                parent::setUp();
                Configure::write('Config.language', 'eng');
        }

/**
 * testValidate method
 *
 * @return void
 */
        public function testValidate() {
                $Field = new CakeValidationSet('title', 'notEmpty');
                $data = array(
                        'title' => '',
                        'body' => 'a body'
                );

                $result = $Field->validate($data);
                $expected = array('This field cannot be left blank');
                $this->assertEquals($expected, $result);

                $Field = new CakeValidationSet('body', 'notEmpty');

                $result = $Field->validate($data);
                $this->assertEmpty($result);

                $Field = new CakeValidationSet('nothere', array(
                        'notEmpty' => array(
                                'rule' => 'notEmpty',
                                'required' => true
                        )
                ));

                $result = $Field->validate($data);
                $expected = array('notEmpty');
                $this->assertEquals($expected, $result);

                $Field = new CakeValidationSet('body', array(
                        'inList' => array(
                                'rule' => array('inList', array('test'))
                        )
                ));
                $result = $Field->validate($data);
                $expected = array('inList');
                $this->assertEquals($expected, $result);
        }

/**
 * testGetRule method
 *
 * @return void
 */
        public function testGetRule() {
                $rules = array('notEmpty' => array('rule' => 'notEmpty', 'message' => 'Can not be empty'));
                $Field = new CakeValidationSet('title', $rules);
                $result = $Field->getRule('notEmpty');
                $this->assertInstanceOf('CakeValidationRule', $result);
                $this->assertEquals('notEmpty', $result->rule);
                $this->assertEquals(null, $result->required);
                $this->assertEquals(false, $result->allowEmpty);
                $this->assertEquals(null, $result->on);
                $this->assertEquals(true, $result->last);
                $this->assertEquals('Can not be empty', $result->message);
        }

/**
 * testGetRules method
 *
 * @return void
 */
        public function testGetRules() {
                $rules = array('notEmpty' => array('rule' => 'notEmpty', 'message' => 'Can not be empty'));
                $Field = new CakeValidationSet('title', $rules);

                $result = $Field->getRules();
                $this->assertEquals(array('notEmpty'), array_keys($result));
                $this->assertInstanceOf('CakeValidationRule', $result['notEmpty']);
        }

/**
 * testSetRule method
 *
 * @return void
 */
        public function testSetRule() {
                $rules = array('notEmpty' => array('rule' => 'notEmpty', 'message' => 'Can not be empty'));
                $Field = new CakeValidationSet('title', $rules);
                $Rule = new CakeValidationRule($rules['notEmpty']);

                $this->assertEquals($Rule, $Field->getRule('notEmpty'));

                $rules = array('validEmail' => array('rule' => 'email', 'message' => 'Invalid email'));
                $Rule = new CakeValidationRule($rules['validEmail']);
                $Field->setRule('validEmail', $Rule);
                $result = $Field->getRules();
                $this->assertEquals(array('notEmpty', 'validEmail'), array_keys($result));

                $rules = array('validEmail' => array('rule' => 'email', 'message' => 'Other message'));
                $Rule = new CakeValidationRule($rules['validEmail']);
                $Field->setRule('validEmail', $Rule);
                $result = $Field->getRules();
                $this->assertEquals(array('notEmpty', 'validEmail'), array_keys($result));
                $result = $Field->getRule('validEmail');
                $this->assertInstanceOf('CakeValidationRule', $result);
                $this->assertEquals('email', $result->rule);
                $this->assertEquals(null, $result->required);
                $this->assertEquals(false, $result->allowEmpty);
                $this->assertEquals(null, $result->on);
                $this->assertEquals(true, $result->last);
                $this->assertEquals('Other message', $result->message);
        }

/**
 * testSetRules method
 *
 * @return void
 */
        public function testSetRules() {
                $rule = array('notEmpty' => array('rule' => 'notEmpty', 'message' => 'Can not be empty'));
                $Field = new CakeValidationSet('title', $rule);
                $RuleEmpty = new CakeValidationRule($rule['notEmpty']);

                $rule = array('validEmail' => array('rule' => 'email', 'message' => 'Invalid email'));
                $RuleEmail = new CakeValidationRule($rule['validEmail']);

                $rules = array('validEmail' => $RuleEmail);
                $Field->setRules($rules, false);
                $result = $Field->getRules();
                $this->assertEquals(array('validEmail'), array_keys($result));

                $Field->setRules(array('validEmail' => $rule), false);
                $result = $Field->getRules();
                $this->assertEquals(array('validEmail'), array_keys($result));
                $this->assertTrue(array_pop($result) instanceof CakeValidationRule);

                $rules = array('notEmpty' => $RuleEmpty);
                $Field->setRules($rules, true);
                $result = $Field->getRules();
                $this->assertEquals(array('validEmail', 'notEmpty'), array_keys($result));

                $rules = array('notEmpty' => array('rule' => 'notEmpty'));
                $Field->setRules($rules, true);
                $result = $Field->getRules();
                $this->assertEquals(array('validEmail', 'notEmpty'), array_keys($result));
                $this->assertTrue(array_pop($result) instanceof CakeValidationRule);
                $this->assertTrue(array_pop($result) instanceof CakeValidationRule);
        }

/**
 * Tests getting a rule from the set using array access
 *
 * @return void
 */
        public function testArrayAccessGet() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));

                $rule = $Set['notEmpty'];
                $this->assertInstanceOf('CakeValidationRule', $rule);
                $this->assertEquals('notEmpty', $rule->rule);

                $rule = $Set['numeric'];
                $this->assertInstanceOf('CakeValidationRule', $rule);
                $this->assertEquals('numeric', $rule->rule);

                $rule = $Set['other'];
                $this->assertInstanceOf('CakeValidationRule', $rule);
                $this->assertEquals(array('other', 1), $rule->rule);
        }

/**
 * Tests checking a rule from the set using array access
 *
 * @return void
 */
        public function testArrayAccessExists() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));

                $this->assertTrue(isset($Set['notEmpty']));
                $this->assertTrue(isset($Set['numeric']));
                $this->assertTrue(isset($Set['other']));
                $this->assertFalse(isset($Set['fail']));
        }

/**
 * Tests setting a rule in the set using array access
 *
 * @return void
 */
        public function testArrayAccessSet() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                ));

                $this->assertFalse(isset($Set['other']));
                $Set['other'] = array('rule' => array('other', 1));
                $rule = $Set['other'];
                $this->assertInstanceOf('CakeValidationRule', $rule);
                $this->assertEquals(array('other', 1), $rule->rule);

                $this->assertFalse(isset($Set['numeric']));
                $Set['numeric'] = new CakeValidationRule(array('rule' => 'numeric'));
                $rule = $Set['numeric'];
                $this->assertInstanceOf('CakeValidationRule', $rule);
                $this->assertEquals('numeric', $rule->rule);
        }

/**
 * Tests unseting a rule from the set using array access
 *
 * @return void
 */
        public function testArrayAccessUnset() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));

                unset($Set['notEmpty']);
                $this->assertFalse(isset($Set['notEmpty']));

                unset($Set['numeric']);
                $this->assertFalse(isset($Set['notEmpty']));

                unset($Set['other']);
                $this->assertFalse(isset($Set['notEmpty']));
        }

/**
 * Tests it is possible to iterate a validation set object
 *
 * @return void
 */
        public function testIterator() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));

                $i = 0;
                foreach ($Set as $name => $rule) {
                        if ($i === 0) {
                                $this->assertEquals('notEmpty', $name);
                        }
                        if ($i === 1) {
                                $this->assertEquals('numeric', $name);
                        }
                        if ($i === 2) {
                                $this->assertEquals('other', $name);
                        }
                        $this->assertInstanceOf('CakeValidationRule', $rule);
                        $i++;
                }
                $this->assertEquals(3, $i);
        }

/**
 * Tests countable interface
 *
 * @return void
 */
        public function testCount() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));
                $this->assertCount(3, $Set);

                unset($Set['other']);
                $this->assertCount(2, $Set);
        }

/**
 * Test removeRule method
 *
 * @return void
 */
        public function testRemoveRule() {
                $Set = new CakeValidationSet('title', array(
                        'notEmpty' => array('rule' => 'notEmpty', 'required' => true),
                        'numeric' => array('rule' => 'numeric'),
                        'other' => array('rule' => array('other', 1)),
                ));

                $Set->removeRule('notEmpty');
                $this->assertFalse(isset($Set['notEmpty']));

                $Set->removeRule('numeric');
                $this->assertFalse(isset($Set['numeric']));

                $Set->removeRule('other');
                $this->assertFalse(isset($Set['other']));
        }

}