TYPO3 API  SVNRelease
ConjunctionValidatorTest.php
Go to the documentation of this file.
00001 <?php
00002 /***************************************************************
00003 *  Copyright notice
00004 *
00005 *  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
00006 *  All rights reserved
00007 *
00008 *  This class is a backport of the corresponding class of FLOW3.
00009 *  All credits go to the v5 team.
00010 *
00011 *  This script is part of the TYPO3 project. The TYPO3 project is
00012 *  free software; you can redistribute it and/or modify
00013 *  it under the terms of the GNU General Public License as published by
00014 *  the Free Software Foundation; either version 2 of the License, or
00015 *  (at your option) any later version.
00016 *
00017 *  The GNU General Public License can be found at
00018 *  http://www.gnu.org/copyleft/gpl.html.
00019 *
00020 *  This script is distributed in the hope that it will be useful,
00021 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00022 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023 *  GNU General Public License for more details.
00024 *
00025 *  This copyright notice MUST APPEAR in all copies of the script!
00026 ***************************************************************/
00027 
00028 /**
00029  * Testcase for the Conjunction Validators
00030  *
00031  * @package Extbase
00032  * @subpackage extbase
00033  * @version $Id: ConjunctionValidator_testcase.php 1729 2009-11-25 21:37:20Z stucki $
00034  */
00035 class Tx_Extbase_Tests_Unit_Validation_Validator_ConjunctionValidatorTest extends Tx_Extbase_Tests_Unit_BaseTestCase {
00036 
00037     /**
00038      * @test
00039      */
00040     public function addingValidatorsToAJunctionValidatorWorks() {
00041         $proxyClassName = $this->buildAccessibleProxy('Tx_Extbase_Validation_Validator_ConjunctionValidator');
00042         $conjunctionValidator = new $proxyClassName;
00043 
00044         $mockValidator = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00045         $conjunctionValidator->addValidator($mockValidator);
00046         $this->assertTrue($conjunctionValidator->_get('validators')->contains($mockValidator));
00047     }
00048 
00049     /**
00050      * @test
00051      */
00052     public function allValidatorsInTheConjunctionAreCalledEvenIfOneReturnsFalse() {
00053         $validatorConjunction = new Tx_Extbase_Validation_Validator_ConjunctionValidator();
00054         $validatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00055         $validatorObject->expects($this->once())->method('isValid')->will($this->returnValue(TRUE));
00056 
00057         $secondValidatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00058         $secondValidatorObject->expects($this->once())->method('isValid')->will($this->returnValue(FALSE));
00059         $secondValidatorObject->expects($this->any())->method('getErrors')->will($this->returnValue(array()));
00060 
00061         $thirdValidatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00062         $thirdValidatorObject->expects($this->once())->method('isValid')->will($this->returnValue(TRUE));
00063 
00064         $validatorConjunction->addValidator($validatorObject);
00065         $validatorConjunction->addValidator($secondValidatorObject);
00066         $validatorConjunction->addValidator($thirdValidatorObject);
00067 
00068         $validatorConjunction->isValid('some subject');
00069     }
00070 
00071     /**
00072      * @test
00073      */
00074     public function validatorConjunctionReturnsTrueIfAllJunctionedValidatorsReturnTrue() {
00075         $validatorConjunction = new Tx_Extbase_Validation_Validator_ConjunctionValidator();
00076         $validatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00077         $validatorObject->expects($this->any())->method('isValid')->will($this->returnValue(TRUE));
00078 
00079         $secondValidatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00080         $secondValidatorObject->expects($this->any())->method('isValid')->will($this->returnValue(TRUE));
00081 
00082         $validatorConjunction->addValidator($validatorObject);
00083         $validatorConjunction->addValidator($secondValidatorObject);
00084 
00085         $this->assertTrue($validatorConjunction->isValid('some subject'));
00086     }
00087 
00088     /**
00089      * @test
00090      */
00091     public function validatorConjunctionReturnsFalseIfOneValidatorReturnsFalse() {
00092         $validatorConjunction = new Tx_Extbase_Validation_Validator_ConjunctionValidator();
00093         $validatorObject = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00094         $validatorObject->expects($this->any())->method('isValid')->will($this->returnValue(FALSE));
00095         $validatorObject->expects($this->any())->method('getErrors')->will($this->returnValue(array()));
00096 
00097         $validatorConjunction->addValidator($validatorObject);
00098 
00099         $this->assertFalse($validatorConjunction->isValid('some subject'));
00100     }
00101 
00102     /**
00103      * @test
00104      */
00105     public function removingAValidatorOfTheValidatorConjunctionWorks() {
00106         $validatorConjunction = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_Validation_Validator_ConjunctionValidator'), array('dummy'), array(), '', TRUE);
00107 
00108         $validator1 = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00109         $validator2 = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00110 
00111         $validatorConjunction->addValidator($validator1);
00112         $validatorConjunction->addValidator($validator2);
00113 
00114         $validatorConjunction->removeValidator($validator1);
00115 
00116         $this->assertFalse($validatorConjunction->_get('validators')->contains($validator1));
00117         $this->assertTrue($validatorConjunction->_get('validators')->contains($validator2));
00118     }
00119 
00120     /**
00121      * @test
00122      * @expectedException Tx_Extbase_Validation_Exception_NoSuchValidator
00123      */
00124     public function removingANotExistingValidatorIndexThrowsException() {
00125         $validatorConjunction = new Tx_Extbase_Validation_Validator_ConjunctionValidator();
00126         $validator = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00127         $validatorConjunction->removeValidator($validator);
00128     }
00129 
00130     /**
00131      * @test
00132      */
00133     public function countReturnesTheNumberOfValidatorsContainedInTheConjunction() {
00134         $validatorConjunction = new Tx_Extbase_Validation_Validator_ConjunctionValidator();
00135 
00136         $validator1 = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00137         $validator2 = $this->getMock('Tx_Extbase_Validation_Validator_ValidatorInterface');
00138 
00139         $this->assertSame(0, count($validatorConjunction));
00140 
00141         $validatorConjunction->addValidator($validator1);
00142         $validatorConjunction->addValidator($validator2);
00143 
00144         $this->assertSame(2, count($validatorConjunction));
00145     }
00146 }
00147 
00148 ?>