TYPO3 API  SVNRelease
UriBuilderTest.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 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 ?>