|
TYPO3 API
SVNRelease
|
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 require_once (t3lib_extMgm::extPath('extbase') . 'Tests/Unit/Fixtures/Entity.php'); 00029 00030 class Tx_Extbase_Tests_Unit_MVC_Web_Routing_UriBuilderTest extends Tx_Extbase_Tests_Unit_BaseTestCase { 00031 00032 /** 00033 * @var tslib_fe 00034 */ 00035 protected $tsfeBackup; 00036 00037 /** 00038 * @var array 00039 */ 00040 protected $getBackup; 00041 00042 /** 00043 * @var tslib_cObj 00044 */ 00045 protected $mockContentObject; 00046 00047 /** 00048 * @var Tx_Extbase_MVC_Web_Request 00049 */ 00050 protected $mockRequest; 00051 00052 /** 00053 * @var Tx_Extbase_MVC_Web_Routing_UriBuilder 00054 */ 00055 protected $uriBuilder; 00056 00057 public function setUp() { 00058 $this->tsfeBackup = $GLOBALS['TSFE']; 00059 $GLOBALS['TSFE'] = $this->getMock('tslib_fe', array(), array(), '', FALSE); 00060 00061 $this->getBackup = t3lib_div::_GET(); 00062 00063 $this->mockContentObject = $this->getMock('tslib_cObj'); 00064 $this->mockRequest = $this->getMock('Tx_Extbase_MVC_Web_Request'); 00065 00066 $this->uriBuilder = $this->getAccessibleMock('Tx_Extbase_MVC_Web_Routing_UriBuilder', array('build')); 00067 $this->uriBuilder->setRequest($this->mockRequest); 00068 $this->uriBuilder->_set('contentObject', $this->mockContentObject); 00069 } 00070 00071 public function tearDown() { 00072 $GLOBALS['TSFE'] = $this->tsfeBackup; 00073 t3lib_div::_GETset($this->getBackup); 00074 } 00075 00076 /** 00077 * @test 00078 */ 00079 public function settersAndGettersWorkAsExpected() { 00080 $this->uriBuilder 00081 ->reset() 00082 ->setArguments(array('test' => 'arguments')) 00083 ->setSection('testSection') 00084 ->setFormat('testFormat') 00085 ->setCreateAbsoluteUri(TRUE) 00086 ->setAddQueryString(TRUE) 00087 ->setArgumentsToBeExcludedFromQueryString(array('test' => 'addQueryStringExcludeArguments')) 00088 ->setArgumentPrefix('testArgumentPrefix') 00089 ->setLinkAccessRestrictedPages(TRUE) 00090 ->setTargetPageUid(123) 00091 ->setTargetPageType(321) 00092 ->setNoCache(TRUE) 00093 ->setUseCacheHash(FALSE); 00094 00095 $this->assertEquals(array('test' => 'arguments'), $this->uriBuilder->getArguments()); 00096 $this->assertEquals('testSection', $this->uriBuilder->getSection()); 00097 $this->assertEquals('testFormat', $this->uriBuilder->getFormat()); 00098 $this->assertEquals(TRUE, $this->uriBuilder->getCreateAbsoluteUri()); 00099 $this->assertEquals(TRUE, $this->uriBuilder->getAddQueryString()); 00100 $this->assertEquals(array('test' => 'addQueryStringExcludeArguments'), $this->uriBuilder->getArgumentsToBeExcludedFromQueryString()); 00101 $this->assertEquals('testArgumentPrefix', $this->uriBuilder->getArgumentPrefix()); 00102 $this->assertEquals(TRUE, $this->uriBuilder->getLinkAccessRestrictedPages()); 00103 $this->assertEquals(123, $this->uriBuilder->getTargetPageUid()); 00104 $this->assertEquals(321, $this->uriBuilder->getTargetPageType()); 00105 $this->assertEquals(TRUE, $this->uriBuilder->getNoCache()); 00106 $this->assertEquals(FALSE, $this->uriBuilder->getUseCacheHash()); 00107 } 00108 00109 /** 00110 * @test 00111 */ 00112 public function uriForPrefixesArgumentsWithExtensionAndPluginNameAndSetsControllerArgument() { 00113 $expectedArguments = array('tx_someextension_someplugin' => array('foo' => 'bar', 'baz' => array('extbase' => 'fluid'), 'controller' => 'SomeController')); 00114 $GLOBALS['TSFE'] = NULL; 00115 $this->uriBuilder->uriFor(NULL, array('foo' => 'bar', 'baz' => array('extbase' => 'fluid')), 'SomeController', 'SomeExtension', 'SomePlugin'); 00116 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00117 } 00118 00119 /** 00120 * @test 00121 */ 00122 public function uriForRecursivelyMergesAndOverrulesControllerArgumentsWithArguments() { 00123 $arguments = array('tx_someextension_someplugin' => array('foo' => 'bar'), 'additionalParam' => 'additionalValue'); 00124 $controllerArguments = array('foo' => 'overruled', 'baz' => array('extbase' => 'fluid')); 00125 $expectedArguments = array('tx_someextension_someplugin' => array('foo' => 'overruled', 'baz' => array('extbase' => 'fluid'), 'controller' => 'SomeController'), 'additionalParam' => 'additionalValue'); 00126 00127 $this->uriBuilder->setArguments($arguments); 00128 $this->uriBuilder->uriFor(NULL, $controllerArguments, 'SomeController', 'SomeExtension', 'SomePlugin'); 00129 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00130 } 00131 00132 /** 00133 * @test 00134 */ 00135 public function uriForOnlySetsActionArgumentIfSpecified() { 00136 $expectedArguments = array('tx_someextension_someplugin' => array('controller' => 'SomeController')); 00137 00138 $this->uriBuilder->uriFor(NULL, array(), 'SomeController', 'SomeExtension', 'SomePlugin'); 00139 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00140 } 00141 00142 /** 00143 * @test 00144 */ 00145 public function uriForSetsControllerFromRequestIfControllerIsNotSet() { 00146 $this->mockRequest->expects($this->once())->method('getControllerName')->will($this->returnValue('SomeControllerFromRequest')); 00147 00148 $expectedArguments = array('tx_someextension_someplugin' => array('controller' => 'SomeControllerFromRequest')); 00149 00150 $this->uriBuilder->uriFor(NULL, array(), NULL, 'SomeExtension', 'SomePlugin'); 00151 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00152 } 00153 00154 /** 00155 * @test 00156 */ 00157 public function uriForSetsExtensionNameFromRequestIfExtensionNameIsNotSet() { 00158 $this->mockRequest->expects($this->once())->method('getControllerExtensionName')->will($this->returnValue('SomeExtensionNameFromRequest')); 00159 00160 $expectedArguments = array('tx_someextensionnamefromrequest_someplugin' => array('controller' => 'SomeController')); 00161 00162 $this->uriBuilder->uriFor(NULL, array(), 'SomeController', NULL, 'SomePlugin'); 00163 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00164 } 00165 00166 /** 00167 * @test 00168 */ 00169 public function uriForSetsPluginNameFromRequestIfPluginNameIsNotSet() { 00170 $this->mockRequest->expects($this->once())->method('getPluginName')->will($this->returnValue('SomePluginNameFromRequest')); 00171 00172 $expectedArguments = array('tx_someextension_somepluginnamefromrequest' => array('controller' => 'SomeController')); 00173 00174 $this->uriBuilder->uriFor(NULL, array(), 'SomeController', 'SomeExtension'); 00175 $this->assertEquals($expectedArguments, $this->uriBuilder->getArguments()); 00176 } 00177 00178 /** 00179 * @test 00180 */ 00181 public function uriForDisablesCacheHashForNonCacheableActions() { 00182 $mockConfiguration = array( 00183 'controllerConfiguration' => array( 00184 'SomeController' => array( 00185 'nonCacheableActions' => array('someNonCacheableAction') 00186 ) 00187 ) 00188 ); 00189 $mockConfigurationManager = $this->getMock('Tx_Extbase_Configuration_ConfigurationManagerInterface'); 00190 $mockConfigurationManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($mockConfiguration)); 00191 $mockObjectManager = $this->getMock('Tx_Extbase_Object_ObjectManager'); 00192 $mockObjectManager->expects($this->any())->method('get')->with('Tx_Extbase_Configuration_ConfigurationManagerInterface')->will($this->returnValue($mockConfigurationManager)); 00193 t3lib_div::setSingletonInstance('Tx_Extbase_Object_ObjectManager', $mockObjectManager); 00194 00195 $this->assertTrue($this->uriBuilder->getUseCacheHash()); 00196 $this->uriBuilder->uriFor('someNonCacheableAction', array(), 'SomeController', 'SomeExtension'); 00197 $this->assertFalse($this->uriBuilder->getUseCacheHash()); 00198 00199 t3lib_div::purgeInstances(); 00200 } 00201 00202 /** 00203 * @test 00204 */ 00205 public function buildBackendUriKeepsQueryParametersIfAddQueryStringIsSet() { 00206 t3lib_div::_GETset(array('M' => 'moduleKey', 'id' => 'pageId', 'foo' => 'bar')); 00207 00208 $this->uriBuilder->setAddQueryString(TRUE); 00209 00210 $expectedResult = 'mod.php?M=moduleKey&id=pageId&foo=bar'; 00211 $actualResult = $this->uriBuilder->buildBackendUri(); 00212 00213 $this->assertEquals($expectedResult, $actualResult); 00214 } 00215 00216 /** 00217 * @test 00218 */ 00219 public function buildBackendUriRemovesSpecifiedQueryParametersIfArgumentsToBeExcludedFromQueryStringIsSet() { 00220 t3lib_div::_GETset(array('M' => 'moduleKey', 'id' => 'pageId', 'foo' => 'bar')); 00221 00222 $this->uriBuilder->setAddQueryString(TRUE); 00223 $this->uriBuilder->setArgumentsToBeExcludedFromQueryString(array('M', 'id')); 00224 00225 $expectedResult = 'mod.php?foo=bar'; 00226 $actualResult = $this->uriBuilder->buildBackendUri(); 00227 00228 $this->assertEquals($expectedResult, $actualResult); 00229 } 00230 00231 /** 00232 * @test 00233 */ 00234 public function buildBackendUriKeepsModuleQueryParametersIfAddQueryStringIsNotSet() { 00235 t3lib_div::_GETset(array('M' => 'moduleKey', 'id' => 'pageId', 'foo' => 'bar')); 00236 00237 $expectedResult = 'mod.php?M=moduleKey&id=pageId'; 00238 $actualResult = $this->uriBuilder->buildBackendUri(); 00239 00240 $this->assertEquals($expectedResult, $actualResult); 00241 } 00242 00243 /** 00244 * @test 00245 */ 00246 public function buildBackendUriMergesAndOverrulesQueryParametersWithArguments() { 00247 t3lib_div::_GETset(array('M' => 'moduleKey', 'id' => 'pageId', 'foo' => 'bar')); 00248 00249 $this->uriBuilder->setArguments(array('M' => 'overwrittenModuleKey', 'somePrefix' => array('bar' => 'baz'))); 00250 00251 $expectedResult = 'mod.php?M=overwrittenModuleKey&id=pageId&somePrefix%5Bbar%5D=baz'; 00252 $actualResult = $this->uriBuilder->buildBackendUri(); 00253 00254 $this->assertEquals($expectedResult, $actualResult); 00255 } 00256 00257 /** 00258 * @test 00259 */ 00260 public function buildBackendUriConvertsDomainObjectsAfterArgumentsHaveBeenMerged() { 00261 t3lib_div::_GETset(array('M' => 'moduleKey')); 00262 00263 $mockDomainObject = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_DomainObject_AbstractEntity'), array('dummy')); 00264 $mockDomainObject->_set('uid', '123'); 00265 00266 $this->uriBuilder->setArguments(array('somePrefix' => array('someDomainObject' => $mockDomainObject))); 00267 00268 $expectedResult = 'mod.php?M=moduleKey&somePrefix%5BsomeDomainObject%5D=123'; 00269 $actualResult = $this->uriBuilder->buildBackendUri(); 00270 00271 $this->assertEquals($expectedResult, $actualResult); 00272 } 00273 00274 /** 00275 * @test 00276 */ 00277 public function buildBackendUriRespectsSection() { 00278 t3lib_div::_GETset(array('M' => 'moduleKey')); 00279 00280 $this->uriBuilder->setSection('someSection'); 00281 00282 $expectedResult = 'mod.php?M=moduleKey#someSection'; 00283 $actualResult = $this->uriBuilder->buildBackendUri(); 00284 00285 $this->assertEquals($expectedResult, $actualResult); 00286 } 00287 00288 /** 00289 * @test 00290 */ 00291 public function buildBackendUriCreatesAbsoluteUrisIfSpecified() { 00292 t3lib_div::_GETset(array('M' => 'moduleKey')); 00293 00294 $this->mockRequest->expects($this->any())->method('getBaseURI')->will($this->returnValue('http://baseuri/' . TYPO3_mainDir)); 00295 $this->uriBuilder->setCreateAbsoluteUri(TRUE); 00296 00297 $expectedResult = 'http://baseuri/' . TYPO3_mainDir . 'mod.php?M=moduleKey'; 00298 $actualResult = $this->uriBuilder->buildBackendUri(); 00299 $this->assertSame($expectedResult, $actualResult); 00300 } 00301 00302 /** 00303 * @test 00304 */ 00305 public function buildFrontendUriCreatesTypoLink() { 00306 $uriBuilder = $this->getAccessibleMock('Tx_Extbase_MVC_Web_Routing_UriBuilder', array('buildTypolinkConfiguration')); 00307 $uriBuilder->_set('contentObject', $this->mockContentObject); 00308 $uriBuilder->expects($this->once())->method('buildTypolinkConfiguration')->will($this->returnValue(array('someTypoLinkConfiguration'))); 00309 00310 $this->mockContentObject->expects($this->once())->method('typoLink_URL')->with(array('someTypoLinkConfiguration')); 00311 00312 $uriBuilder->buildFrontendUri(); 00313 } 00314 00315 /** 00316 * @test 00317 */ 00318 public function buildFrontendUriCreatesRelativeUrisByDefault() { 00319 $this->mockContentObject->expects($this->once())->method('typoLink_URL')->will($this->returnValue('relative/uri')); 00320 00321 $expectedResult = 'relative/uri'; 00322 $actualResult = $this->uriBuilder->buildFrontendUri(); 00323 00324 $this->assertSame($expectedResult, $actualResult); 00325 } 00326 00327 /** 00328 * @test 00329 */ 00330 public function buildFrontendUriDoesNotStripLeadingSlashesFromRelativeUris() { 00331 $this->mockContentObject->expects($this->once())->method('typoLink_URL')->will($this->returnValue('/relative/uri')); 00332 00333 $expectedResult = '/relative/uri'; 00334 $actualResult = $this->uriBuilder->buildFrontendUri(); 00335 00336 $this->assertSame($expectedResult, $actualResult); 00337 } 00338 00339 /** 00340 * @test 00341 */ 00342 public function buildFrontendUriCreatesAbsoluteUrisIfSpecified() { 00343 $uriBuilder = $this->getAccessibleMock('Tx_Extbase_MVC_Web_Routing_UriBuilder', array('buildTypolinkConfiguration')); 00344 $uriBuilder->_set('contentObject', $this->mockContentObject); 00345 $uriBuilder->expects($this->once())->method('buildTypolinkConfiguration')->will($this->returnValue(array('foo' => 'bar'))); 00346 00347 $this->mockContentObject->expects($this->once())->method('typoLink_URL')->with(array('foo' => 'bar', 'forceAbsoluteUrl' => TRUE))->will($this->returnValue('http://baseuri/relative/uri')); 00348 $uriBuilder->setCreateAbsoluteUri(TRUE); 00349 00350 $expectedResult = 'http://baseuri/relative/uri'; 00351 $actualResult = $uriBuilder->buildFrontendUri(); 00352 $this->assertSame($expectedResult, $actualResult); 00353 } 00354 00355 /** 00356 * @test 00357 */ 00358 public function resetSetsAllOptionsToTheirDefaultValue() { 00359 $this->uriBuilder 00360 ->setArguments(array('test' => 'arguments')) 00361 ->setSection('testSection') 00362 ->setFormat('someFormat') 00363 ->setCreateAbsoluteUri(TRUE) 00364 ->setAddQueryString(TRUE) 00365 ->setArgumentsToBeExcludedFromQueryString(array('test' => 'addQueryStringExcludeArguments')) 00366 ->setArgumentPrefix('testArgumentPrefix') 00367 ->setLinkAccessRestrictedPages(TRUE) 00368 ->setTargetPageUid(123) 00369 ->setTargetPageType(321) 00370 ->setNoCache(TRUE) 00371 ->setUseCacheHash(FALSE); 00372 00373 $this->uriBuilder->reset(); 00374 00375 $this->assertEquals(array(), $this->uriBuilder->getArguments()); 00376 $this->assertEquals('', $this->uriBuilder->getSection()); 00377 $this->assertEquals('', $this->uriBuilder->getFormat()); 00378 $this->assertEquals(FALSE, $this->uriBuilder->getCreateAbsoluteUri()); 00379 $this->assertEquals(FALSE, $this->uriBuilder->getAddQueryString()); 00380 $this->assertEquals(array(), $this->uriBuilder->getArgumentsToBeExcludedFromQueryString()); 00381 $this->assertEquals(NULL, $this->uriBuilder->getArgumentPrefix()); 00382 $this->assertEquals(FALSE, $this->uriBuilder->getLinkAccessRestrictedPages()); 00383 $this->assertEquals(NULL, $this->uriBuilder->getTargetPageUid()); 00384 $this->assertEquals(0, $this->uriBuilder->getTargetPageType()); 00385 $this->assertEquals(FALSE, $this->uriBuilder->getNoCache()); 00386 $this->assertEquals(TRUE, $this->uriBuilder->getUseCacheHash()); 00387 } 00388 00389 /** 00390 * @test 00391 */ 00392 public function buildTypolinkConfigurationRespectsSpecifiedTargetPageUid() { 00393 $GLOBALS['TSFE']->id = 123; 00394 $this->uriBuilder->setTargetPageUid(321); 00395 00396 $expectedConfiguration = array('parameter' => 321, 'useCacheHash' => 1); 00397 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00398 00399 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00400 } 00401 00402 /** 00403 * @test 00404 */ 00405 public function buildTypolinkConfigurationUsesCurrentPageUidIfTargetPageUidIsNotSet() { 00406 $GLOBALS['TSFE']->id = 123; 00407 00408 $expectedConfiguration = array('parameter' => 123, 'useCacheHash' => 1); 00409 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00410 00411 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00412 } 00413 00414 /** 00415 * @test 00416 */ 00417 public function buildTypolinkConfigurationProperlySetsAdditionalArguments() { 00418 $this->uriBuilder->setTargetPageUid(123); 00419 $this->uriBuilder->setArguments(array('foo' => 'bar', 'baz' => array('extbase' => 'fluid'))); 00420 00421 $expectedConfiguration = array('parameter' => 123, 'useCacheHash' => 1, 'additionalParams' => '&foo=bar&baz[extbase]=fluid'); 00422 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00423 00424 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00425 } 00426 00427 /** 00428 * @test 00429 */ 00430 public function buildTypolinkConfigurationConvertsDomainObjects() { 00431 $mockDomainObject1 = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_DomainObject_AbstractEntity'), array('dummy')); 00432 $mockDomainObject1->_set('uid', '123'); 00433 00434 $mockDomainObject2 = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_DomainObject_AbstractEntity'), array('dummy')); 00435 $mockDomainObject2->_set('uid', '321'); 00436 00437 $this->uriBuilder->setTargetPageUid(123); 00438 $this->uriBuilder->setArguments(array('someDomainObject' => $mockDomainObject1, 'baz' => array('someOtherDomainObject' => $mockDomainObject2))); 00439 00440 $expectedConfiguration = array('parameter' => 123, 'useCacheHash' => 1, 'additionalParams' => '&someDomainObject=123&baz[someOtherDomainObject]=321'); 00441 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00442 00443 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00444 } 00445 00446 /** 00447 * @test 00448 */ 00449 public function buildTypolinkConfigurationConsidersPageType() { 00450 $this->uriBuilder->setTargetPageUid(123); 00451 $this->uriBuilder->setTargetPageType(2); 00452 00453 $expectedConfiguration = array('parameter' => '123,2', 'useCacheHash' => 1); 00454 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00455 00456 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00457 } 00458 00459 /** 00460 * @test 00461 */ 00462 public function buildTypolinkConfigurationDisablesCacheHashIfNoCacheIsSet() { 00463 $this->uriBuilder->setTargetPageUid(123); 00464 $this->uriBuilder->setNoCache(TRUE); 00465 00466 $expectedConfiguration = array('parameter' => 123, 'no_cache' => 1); 00467 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00468 00469 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00470 } 00471 00472 /** 00473 * @test 00474 */ 00475 public function buildTypolinkConfigurationDoesNotSetUseCacheHashOptionIfUseCacheHashIsDisabled() { 00476 $this->uriBuilder->setTargetPageUid(123); 00477 $this->uriBuilder->setUseCacheHash(FALSE); 00478 00479 $expectedConfiguration = array('parameter' => 123); 00480 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00481 00482 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00483 } 00484 00485 /** 00486 * @test 00487 */ 00488 public function buildTypolinkConfigurationConsidersSection() { 00489 $this->uriBuilder->setTargetPageUid(123); 00490 $this->uriBuilder->setSection('SomeSection'); 00491 00492 $expectedConfiguration = array('parameter' => 123, 'useCacheHash' => 1, 'section' => 'SomeSection'); 00493 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00494 00495 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00496 } 00497 00498 /** 00499 * @test 00500 */ 00501 public function buildTypolinkConfigurationLinkAccessRestrictedPagesSetting() { 00502 $this->uriBuilder->setTargetPageUid(123); 00503 $this->uriBuilder->setLinkAccessRestrictedPages(TRUE); 00504 00505 $expectedConfiguration = array('parameter' => 123, 'useCacheHash' => 1, 'linkAccessRestrictedPages' => 1); 00506 $actualConfiguration = $this->uriBuilder->_call('buildTypolinkConfiguration'); 00507 00508 $this->assertEquals($expectedConfiguration, $actualConfiguration); 00509 } 00510 00511 /** 00512 * @test 00513 */ 00514 public function convertDomainObjectsToIdentityArraysConvertsDomainObjects() { 00515 $mockDomainObject1 = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_DomainObject_AbstractEntity'), array('dummy')); 00516 $mockDomainObject1->_set('uid', '123'); 00517 00518 $mockDomainObject2 = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_DomainObject_AbstractEntity'), array('dummy')); 00519 $mockDomainObject2->_set('uid', '321'); 00520 00521 $expectedResult = array('foo' => array('bar' => 'baz'), 'domainObject1' => '123', 'second' => array('domainObject2' =>'321')); 00522 $actualResult = $this->uriBuilder->_call('convertDomainObjectsToIdentityArrays', array('foo' => array('bar' => 'baz'), 'domainObject1' => $mockDomainObject1, 'second' => array('domainObject2' => $mockDomainObject2))); 00523 00524 $this->assertEquals($expectedResult, $actualResult); 00525 } 00526 00527 /** 00528 * @test 00529 */ 00530 public function conversionOfTansientObjectsIsInvoked() { 00531 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00532 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }'); 00533 $mockValueObject = new $className; 00534 $mockValueObject->name = 'foo'; 00535 00536 $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('convertTransientObjectToArray')); 00537 $mockUriBuilder->expects($this->once())->method('convertTransientObjectToArray')->will($this->returnValue(array('foo' => 'bar'))); 00538 $actualResult = $mockUriBuilder->_call('convertDomainObjectsToIdentityArrays', array('object' => $mockValueObject)); 00539 00540 $expectedResult = array('object' => array('foo' => 'bar')); 00541 $this->assertEquals($expectedResult, $actualResult); 00542 } 00543 00544 /** 00545 * @test 00546 * @expectedException Tx_Extbase_MVC_Exception_InvalidArgumentValue 00547 */ 00548 public function conversionOfTansientObjectsThrowsExceptionForOtherThanValueObjects() { 00549 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00550 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractEntity { public $name; public $uid; }'); 00551 $mockEntity = new $className; 00552 $mockEntity->name = 'foo'; 00553 00554 $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy')); 00555 $mockUriBuilder->_call('convertDomainObjectsToIdentityArrays', array('object' => $mockEntity)); 00556 } 00557 00558 /** 00559 * @test 00560 */ 00561 public function tansientObjectsAreConvertedToAnArrayOfProperties() { 00562 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00563 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }'); 00564 $mockValueObject = new $className; 00565 $mockValueObject->name = 'foo'; 00566 00567 $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy')); 00568 $actualResult = $mockUriBuilder->_call('convertTransientObjectToArray', $mockValueObject); 00569 00570 $expectedResult = array('name' => 'foo', 'uid' => NULL, 'pid' => NULL); 00571 $this->assertEquals($expectedResult, $actualResult); 00572 } 00573 00574 /** 00575 * @test 00576 */ 00577 public function tansientObjectsAreRecursivelyConverted() { 00578 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00579 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $name; public $uid; }'); 00580 $mockInnerValueObject2 = new $className; 00581 $mockInnerValueObject2->name = 'foo'; 00582 $mockInnerValueObject2->uid = 99; 00583 00584 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00585 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $object; public $uid; }'); 00586 $mockInnerValueObject1 = new $className; 00587 $mockInnerValueObject1->object = $mockInnerValueObject2; 00588 00589 $className = uniqid('Tx_Extbase_Tests_Fixtures_Object'); 00590 eval('class ' . $className . ' extends Tx_Extbase_DomainObject_AbstractValueObject { public $object; public $uid; }'); 00591 $mockValueObject = new $className; 00592 $mockValueObject->object = $mockInnerValueObject1; 00593 00594 $mockUriBuilder = $this->getMock($this->buildAccessibleProxy('Tx_Extbase_MVC_Web_Routing_UriBuilder'), array('dummy')); 00595 $actualResult = $mockUriBuilder->_call('convertTransientObjectToArray', $mockValueObject); 00596 00597 $expectedResult = array( 00598 'object' => array( 00599 'object' => 99, 00600 'uid' => NULL, 00601 'pid' => NULL 00602 ), 00603 'uid' => NULL, 00604 'pid' => NULL 00605 ); 00606 $this->assertEquals($expectedResult, $actualResult); 00607 } 00608 00609 00610 } 00611 ?>
1.8.0