|
TYPO3 API
SVNRelease
|
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * (c) 2010-2011 Oliver Klee (typo3-coding@oliverklee.de) 00006 * All rights reserved 00007 * 00008 * This script is part of the TYPO3 project. The TYPO3 project is 00009 * free software; you can redistribute it and/or modify 00010 * it under the terms of the GNU General Public License as published by 00011 * the Free Software Foundation; either version 2 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * The GNU General Public License can be found at 00015 * http://www.gnu.org/copyleft/gpl.html. 00016 * 00017 * This script is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU General Public License for more details. 00021 * 00022 * This copyright notice MUST APPEAR in all copies of the script! 00023 ***************************************************************/ 00024 00025 require_once('fixtures/class.t3lib_formprotection_testing.php'); 00026 00027 /** 00028 * Testcase for the t3lib_formprotection_Abstract class. 00029 * 00030 * $Id$ 00031 * 00032 * @package TYPO3 00033 * @subpackage t3lib 00034 * 00035 * @author Oliver Klee <typo3-coding@oliverklee.de> 00036 */ 00037 class t3lib_formprotection_AbstractTest extends tx_phpunit_testcase { 00038 /** 00039 * @var t3lib_formProtection_Testing 00040 */ 00041 private $fixture; 00042 00043 public function setUp() { 00044 $this->fixture = new t3lib_formProtection_Testing(); 00045 } 00046 00047 public function tearDown() { 00048 $this->fixture->__destruct(); 00049 unset($this->fixture); 00050 } 00051 00052 00053 ///////////////////////////////////////// 00054 // Tests concerning the basic functions 00055 ///////////////////////////////////////// 00056 00057 /** 00058 * @test 00059 */ 00060 public function constructionRetrievesTokens() { 00061 $className = uniqid('t3lib_formProtection'); 00062 eval( 00063 'class ' . $className . ' extends t3lib_formProtection_Testing {' . 00064 'public $tokensHaveBeenRetrieved = FALSE; ' . 00065 'protected function retrieveTokens() {' . 00066 '$this->tokensHaveBeenRetrieved = TRUE;' . 00067 '}' . 00068 '}' 00069 ); 00070 00071 $fixture = new $className(); 00072 00073 $this->assertTrue( 00074 $fixture->tokensHaveBeenRetrieved 00075 ); 00076 } 00077 00078 /** 00079 * @test 00080 */ 00081 public function cleanMakesTokenInvalid() { 00082 $formName = 'foo'; 00083 $tokenId = $this->fixture->generateToken($formName); 00084 00085 $this->fixture->clean(); 00086 00087 $this->assertFalse( 00088 $this->fixture->validateToken($tokenId, $formName) 00089 ); 00090 } 00091 00092 /** 00093 * @test 00094 */ 00095 public function cleanPersistsTokens() { 00096 $fixture = $this->getMock( 00097 't3lib_formProtection_Testing', array('persistTokens') 00098 ); 00099 $fixture->expects($this->once())->method('persistTokens'); 00100 00101 $fixture->clean(); 00102 } 00103 00104 00105 /////////////////////////////////// 00106 // Tests concerning generateToken 00107 /////////////////////////////////// 00108 00109 /** 00110 * @test 00111 */ 00112 public function generateTokenFormForEmptyFormNameThrowsException() { 00113 $this->setExpectedException( 00114 'InvalidArgumentException', '$formName must not be empty.' 00115 ); 00116 00117 $this->fixture->generateToken('', 'edit', 'bar'); 00118 } 00119 00120 /** 00121 * @test 00122 */ 00123 public function generateTokenFormForEmptyActionNotThrowsException() { 00124 $this->fixture->generateToken('foo', '', '42'); 00125 } 00126 00127 /** 00128 * @test 00129 */ 00130 public function generateTokenFormForEmptyFormInstanceNameNotThrowsException() { 00131 $this->fixture->generateToken('foo', 'edit', ''); 00132 } 00133 00134 /** 00135 * @test 00136 */ 00137 public function generateTokenFormForOmittedActionAndFormInstanceNameNotThrowsException() { 00138 $this->fixture->generateToken('foo'); 00139 } 00140 00141 /** 00142 * @test 00143 */ 00144 public function generateTokenReturns32CharacterHexToken() { 00145 $this->assertRegexp( 00146 '/^[0-9a-f]{32}$/', 00147 $this->fixture->generateToken('foo') 00148 ); 00149 } 00150 00151 /** 00152 * @test 00153 */ 00154 public function generateTokenCalledTwoTimesWithSameParametersReturnsDifferentTokens() { 00155 $this->assertNotEquals( 00156 $this->fixture->generateToken('foo', 'edit', 'bar'), 00157 $this->fixture->generateToken('foo', 'edit', 'bar') 00158 ); 00159 } 00160 00161 /** 00162 * @test 00163 */ 00164 public function generatingTooManyTokensInvalidatesOldestToken() { 00165 $this->fixture->setMaximumNumberOfTokens(2); 00166 00167 $formName = 'foo'; 00168 00169 $token1 = $this->fixture->generateToken($formName); 00170 $token2 = $this->fixture->generateToken($formName); 00171 $token3 = $this->fixture->generateToken($formName); 00172 00173 $this->assertFalse( 00174 $this->fixture->validateToken($token1, $formName) 00175 ); 00176 } 00177 00178 /** 00179 * @test 00180 */ 00181 public function generatingTooManyTokensNotInvalidatesNewestToken() { 00182 $this->fixture->setMaximumNumberOfTokens(2); 00183 00184 $formName = 'foo'; 00185 $formInstanceName = 'bar'; 00186 00187 $token1 = $this->fixture->generateToken($formName); 00188 $token2 = $this->fixture->generateToken($formName); 00189 $token3 = $this->fixture->generateToken($formName); 00190 00191 $this->assertTrue( 00192 $this->fixture->validateToken($token3, $formName) 00193 ); 00194 } 00195 00196 /** 00197 * @test 00198 */ 00199 public function generatingTooManyTokensNotInvalidatesTokenInTheMiddle() { 00200 $this->fixture->setMaximumNumberOfTokens(2); 00201 00202 $formName = 'foo'; 00203 $formInstanceName = 'bar'; 00204 00205 $token1 = $this->fixture->generateToken($formName); 00206 $token2 = $this->fixture->generateToken($formName); 00207 $token3 = $this->fixture->generateToken($formName); 00208 00209 $this->assertTrue( 00210 $this->fixture->validateToken($token2, $formName) 00211 ); 00212 } 00213 00214 00215 /////////////////////////////////// 00216 // Tests concerning validateToken 00217 /////////////////////////////////// 00218 00219 /** 00220 * @test 00221 */ 00222 public function validateTokenWithFourEmptyParametersNotThrowsException() { 00223 $this->fixture->validateToken('', '', '', ''); 00224 } 00225 00226 /** 00227 * @test 00228 */ 00229 public function validateTokenWithTwoEmptyAndTwoMissingParametersNotThrowsException() { 00230 $this->fixture->validateToken('', ''); 00231 } 00232 00233 /** 00234 * @test 00235 */ 00236 public function validateTokenWithDataFromGenerateTokenWithFormInstanceNameReturnsTrue() { 00237 $formName = 'foo'; 00238 $action = 'edit'; 00239 $formInstanceName = 'bar'; 00240 00241 $this->assertTrue( 00242 $this->fixture->validateToken( 00243 $this->fixture->generateToken($formName, $action, $formInstanceName), 00244 $formName, 00245 $action, 00246 $formInstanceName 00247 ) 00248 ); 00249 } 00250 00251 /** 00252 * @test 00253 */ 00254 public function validateTokenWithDataFromGenerateTokenWithMissingActionAndFormInstanceNameReturnsTrue() { 00255 $formName = 'foo'; 00256 00257 $this->assertTrue( 00258 $this->fixture->validateToken( 00259 $this->fixture->generateToken($formName), $formName 00260 ) 00261 ); 00262 } 00263 00264 /** 00265 * @test 00266 */ 00267 public function validateTokenWithValidDataDropsToken() { 00268 $formName = 'foo'; 00269 00270 $fixture = $this->getMock( 00271 't3lib_formProtection_Testing', array('dropToken') 00272 ); 00273 00274 $tokenId = $fixture->generateToken($formName); 00275 $fixture->expects($this->once())->method('dropToken') 00276 ->with($tokenId); 00277 00278 $fixture->validateToken($tokenId, $formName); 00279 } 00280 00281 /** 00282 * @test 00283 */ 00284 public function validateTokenWithValidDataCalledTwoTimesReturnsFalseOnSecondCall() { 00285 $formName = 'foo'; 00286 $action = 'edit'; 00287 $formInstanceName = 'bar'; 00288 00289 $tokenId = $this->fixture->generateToken($formName, $action, $formInstanceName); 00290 00291 $this->fixture->validateToken($tokenId, $formName, $action, $formInstanceName); 00292 00293 $this->assertFalse( 00294 $this->fixture->validateToken($tokenId, $formName, $action, $formInstanceName) 00295 ); 00296 } 00297 00298 /** 00299 * @test 00300 */ 00301 public function validateTokenWithMismatchingTokenIdReturnsFalse() { 00302 $formName = 'foo'; 00303 $action = 'edit'; 00304 $formInstanceName = 'bar'; 00305 00306 $this->fixture->generateToken($formName, $action, $formInstanceName); 00307 00308 $this->assertFalse( 00309 $this->fixture->validateToken( 00310 'Hello world!', $formName, $action, $formInstanceName 00311 ) 00312 ); 00313 } 00314 00315 /** 00316 * @test 00317 */ 00318 public function validateTokenWithMismatchingFormNameReturnsFalse() { 00319 $formName = 'foo'; 00320 $action = 'edit'; 00321 $formInstanceName = 'bar'; 00322 00323 $tokenId = $this->fixture->generateToken($formName, $action, $formInstanceName); 00324 00325 $this->assertFalse( 00326 $this->fixture->validateToken( 00327 $tokenId, 'espresso', $action, $formInstanceName 00328 ) 00329 ); 00330 } 00331 00332 /** 00333 * @test 00334 */ 00335 public function validateTokenWithMismatchingActionReturnsFalse() { 00336 $formName = 'foo'; 00337 $action = 'edit'; 00338 $formInstanceName = 'bar'; 00339 00340 $tokenId = $this->fixture->generateToken($formName, $action, $formInstanceName); 00341 00342 $this->assertFalse( 00343 $this->fixture->validateToken( 00344 $tokenId, $formName, 'delete', $formInstanceName 00345 ) 00346 ); 00347 } 00348 00349 /** 00350 * @test 00351 */ 00352 public function validateTokenWithMismatchingFormInstanceNameReturnsFalse() { 00353 $formName = 'foo'; 00354 $action = 'edit'; 00355 $formInstanceName = 'bar'; 00356 00357 $tokenId = $this->fixture->generateToken($formName, $action, $formInstanceName); 00358 00359 $this->assertFalse( 00360 $this->fixture->validateToken( 00361 $tokenId, $formName, $action, 'beer' 00362 ) 00363 ); 00364 } 00365 00366 /** 00367 * @test 00368 */ 00369 public function validateTokenWithTwoTokensForSameFormNameAndActionAndFormInstanceNameReturnsTrueForBoth() { 00370 $formName = 'foo'; 00371 $action = 'edit'; 00372 $formInstanceName = 'bar'; 00373 00374 $tokenId1 = $this->fixture->generateToken($formName, $action, $formInstanceName); 00375 $tokenId2 = $this->fixture->generateToken($formName, $action, $formInstanceName); 00376 00377 $this->assertTrue( 00378 $this->fixture->validateToken( 00379 $tokenId1, $formName, $action, $formInstanceName 00380 ) 00381 ); 00382 $this->assertTrue( 00383 $this->fixture->validateToken( 00384 $tokenId2, $formName, $action, $formInstanceName 00385 ) 00386 ); 00387 } 00388 00389 /** 00390 * @test 00391 */ 00392 public function validateTokenWithTwoTokensForSameFormNameAndActionAndFormInstanceNameCalledInReverseOrderReturnsTrueForBoth() { 00393 $formName = 'foo'; 00394 $action = 'edit'; 00395 $formInstanceName = 'bar'; 00396 00397 $tokenId1 = $this->fixture->generateToken($formName, $action, $formInstanceName); 00398 $tokenId2 = $this->fixture->generateToken($formName, $action, $formInstanceName); 00399 00400 $this->assertTrue( 00401 $this->fixture->validateToken( 00402 $tokenId2, $formName, $action, $formInstanceName 00403 ) 00404 ); 00405 $this->assertTrue( 00406 $this->fixture->validateToken( 00407 $tokenId1, $formName, $action, $formInstanceName 00408 ) 00409 ); 00410 } 00411 00412 /** 00413 * @test 00414 */ 00415 public function validateTokenForValidTokenNotCallsCreateValidationErrorMessage() { 00416 $fixture = $this->getMock( 00417 't3lib_formProtection_Testing', array('createValidationErrorMessage') 00418 ); 00419 $fixture->expects($this->never())->method('createValidationErrorMessage'); 00420 00421 $formName = 'foo'; 00422 $action = 'edit'; 00423 $formInstanceName = 'bar'; 00424 00425 $token = $fixture->generateToken($formName, $action, $formInstanceName); 00426 $fixture->validateToken( 00427 $token, $formName, $action, $formInstanceName 00428 ); 00429 00430 $fixture->__destruct(); 00431 } 00432 00433 /** 00434 * @test 00435 */ 00436 public function validateTokenForInvalidTokenCallsCreateValidationErrorMessage() { 00437 $fixture = $this->getMock( 00438 't3lib_formProtection_Testing', array('createValidationErrorMessage') 00439 ); 00440 $fixture->expects($this->once())->method('createValidationErrorMessage'); 00441 00442 $formName = 'foo'; 00443 $action = 'edit'; 00444 $formInstanceName = 'bar'; 00445 00446 $fixture->generateToken($formName, $action, $formInstanceName); 00447 $fixture->validateToken( 00448 'an invalid token ...', $formName, $action, $formInstanceName 00449 ); 00450 00451 $fixture->__destruct(); 00452 } 00453 00454 /** 00455 * @test 00456 */ 00457 public function validateTokenForInvalidFormNameCallsCreateValidationErrorMessage() { 00458 $fixture = $this->getMock( 00459 't3lib_formProtection_Testing', array('createValidationErrorMessage') 00460 ); 00461 $fixture->expects($this->once())->method('createValidationErrorMessage'); 00462 00463 $formName = 'foo'; 00464 $action = 'edit'; 00465 $formInstanceName = 'bar'; 00466 00467 $token = $fixture->generateToken($formName, $action, $formInstanceName); 00468 $fixture->validateToken( 00469 $token, 'another form name', $action, $formInstanceName 00470 ); 00471 00472 $fixture->__destruct(); 00473 } 00474 } 00475 ?>
1.8.0