|
TYPO3 API
SVNRelease
|
00001 <?php 00002 /*************************************************************** 00003 * Copyright notice 00004 * 00005 * All rights reserved 00006 * 00007 * This class is a backport of the corresponding class of FLOW3. 00008 * All credits go to the v5 team. 00009 * 00010 * This script is part of the TYPO3 project. The TYPO3 project is 00011 * free software; you can redistribute it and/or modify 00012 * it under the terms of the GNU General Public License as published by 00013 * the Free Software Foundation; either version 2 of the License, or 00014 * (at your option) any later version. 00015 * 00016 * The GNU General Public License can be found at 00017 * http://www.gnu.org/copyleft/gpl.html. 00018 * 00019 * This script is distributed in the hope that it will be useful, 00020 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00022 * GNU General Public License for more details. 00023 * 00024 * This copyright notice MUST APPEAR in all copies of the script! 00025 ***************************************************************/ 00026 00027 class Tx_Extbase_Tests_Unit_Configuration_AbstractConfigurationManagerTest extends Tx_Extbase_Tests_Unit_BaseTestCase { 00028 00029 /** 00030 * @var Tx_Extbase_Configuration_AbstractConfigurationManager 00031 */ 00032 protected $abstractConfigurationManager; 00033 00034 /** 00035 * @var array 00036 */ 00037 protected $testTypoScriptSetup = array( 00038 'foo.' => array( 00039 'bar' => 'baz' 00040 ), 00041 'config.' => array( 00042 'tx_extbase.' => array( 00043 'settings.' => array( 00044 'setting1' => 'value1', 00045 'setting2' => 'value2', 00046 ), 00047 'view.' => array( 00048 'viewSub.' => array( 00049 'key1' => 'value1', 00050 'key2' => 'value2', 00051 ) 00052 ) 00053 ), 00054 ), 00055 ); 00056 00057 /** 00058 * @var array 00059 */ 00060 protected $testPluginConfiguration = array( 00061 'settings' => array( 00062 'setting1' => 'overriddenValue1', 00063 'setting3' => 'additionalValue', 00064 ), 00065 'view' => array( 00066 'viewSub' => array( 00067 'key1' => 'overridden', 00068 'key3' => 'new key', 00069 ) 00070 ), 00071 'persistence' => array( 00072 'storagePid' => '123', 00073 ) 00074 ); 00075 00076 /** 00077 * @var array 00078 */ 00079 protected $testSwitchableControllerActions = array( 00080 'Controller1' => array( 00081 'actions' => array('action1', 'action2', 'action3') 00082 ), 00083 'Controller2' => array( 00084 'actions' => array('action4', 'action5', 'action6'), 00085 'nonCacheableActions' => array('action4', 'action6'), 00086 ), 00087 ); 00088 00089 /** 00090 * Sets up this testcase 00091 */ 00092 public function setUp() { 00093 $this->abstractConfigurationManager = $this->getAccessibleMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration', 'getSwitchableControllerActions')); 00094 } 00095 00096 /** 00097 * @test 00098 */ 00099 public function setConfigurationResetsConfigurationCache() { 00100 $this->abstractConfigurationManager->_set('configurationCache', array('foo' => 'bar')); 00101 $this->abstractConfigurationManager->setConfiguration(array()); 00102 $this->assertEquals(array(), $this->abstractConfigurationManager->_get('configurationCache')); 00103 } 00104 00105 /** 00106 * @test 00107 */ 00108 public function setConfigurationSetsExtensionAndPluginName() { 00109 $configuration = array( 00110 'extensionName' => 'SomeExtensionName', 00111 'pluginName' => 'SomePluginName', 00112 ); 00113 $this->abstractConfigurationManager->setConfiguration($configuration); 00114 $this->assertEquals('SomeExtensionName', $this->abstractConfigurationManager->_get('extensionName')); 00115 $this->assertEquals('SomePluginName', $this->abstractConfigurationManager->_get('pluginName')); 00116 } 00117 00118 /** 00119 * @test 00120 */ 00121 public function setConfigurationConvertsTypoScriptArrayToPlainArray() { 00122 $configuration = array( 00123 'foo' => 'bar', 00124 'settings.' => array('foo' => 'bar'), 00125 'view.' => array('subkey.' => array('subsubkey' => 'subsubvalue')) 00126 ); 00127 $expectedResult = array( 00128 'foo' => 'bar', 00129 'settings' => array('foo' => 'bar'), 00130 'view' => array('subkey' => array('subsubkey' => 'subsubvalue')) 00131 ); 00132 $this->abstractConfigurationManager->setConfiguration($configuration); 00133 $this->assertEquals($expectedResult, $this->abstractConfigurationManager->_get('configuration')); 00134 } 00135 00136 /** 00137 * @test 00138 * @expectedException Tx_Extbase_Configuration_Exception 00139 */ 00140 public function getConfigurationThrowsExceptionIfOnlyExtensionNameIsSpecified() { 00141 $this->abstractConfigurationManager->getConfiguration('SomeExtensionName'); 00142 } 00143 00144 /** 00145 * @test 00146 */ 00147 public function getConfigurationReturnsCachedResultOfCurrentPlugin() { 00148 $this->abstractConfigurationManager->_set('extensionName', 'CurrentExtensionName'); 00149 $this->abstractConfigurationManager->_set('pluginName', 'CurrentPluginName'); 00150 $this->abstractConfigurationManager->_set('configurationCache', array('currentextensionname_currentpluginname' => array('foo' => 'bar'), 'someotherextension_somepluginname' => array('baz' => 'shouldnotbereturned'))); 00151 $expectedResult = array('foo' => 'bar'); 00152 $actualResult = $this->abstractConfigurationManager->getConfiguration(); 00153 $this->assertEquals($expectedResult, $actualResult); 00154 } 00155 00156 /** 00157 * @test 00158 */ 00159 public function getConfigurationReturnsCachedResultForGivenExtension() { 00160 $this->abstractConfigurationManager->_set('configurationCache', array('someextensionname_somepluginname' => array('foo' => 'bar'), 'someotherextension_somepluginname' => array('baz' => 'shouldnotbereturned'))); 00161 $expectedResult = array('foo' => 'bar'); 00162 $actualResult = $this->abstractConfigurationManager->getConfiguration('SomeExtensionName', 'SomePluginName'); 00163 $this->assertEquals($expectedResult, $actualResult); 00164 } 00165 00166 /** 00167 * @test 00168 */ 00169 public function getConfigurationRecursivelyMergesCurrentPluginConfigurationWithFrameworkConfiguration() { 00170 $this->abstractConfigurationManager->_set('extensionName', 'CurrentExtensionName'); 00171 $this->abstractConfigurationManager->_set('pluginName', 'CurrentPluginName'); 00172 $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup)); 00173 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00174 $expectedResult = array( 00175 'settings' => array( 00176 'setting1' => 'overriddenValue1', 00177 'setting2' => 'value2', 00178 'setting3' => 'additionalValue', 00179 ), 00180 'view' => array( 00181 'viewSub' => array( 00182 'key1' => 'overridden', 00183 'key2' => 'value2', 00184 'key3' => 'new key', 00185 ) 00186 ), 00187 'persistence' => array( 00188 'storagePid' => '123', 00189 ), 00190 'controllerConfiguration' => NULL 00191 ); 00192 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->with($expectedResult)->will($this->returnValue($expectedResult)); 00193 $actualResult = $this->abstractConfigurationManager->getConfiguration(); 00194 $this->assertEquals($expectedResult, $actualResult); 00195 } 00196 00197 /** 00198 * @test 00199 */ 00200 public function getConfigurationRecursivelyMergesPluginConfigurationOfSpecifiedPluginWithFrameworkConfiguration() { 00201 $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup)); 00202 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('SomeExtensionName', 'SomePluginName')->will($this->returnValue($this->testPluginConfiguration)); 00203 $expectedResult = array( 00204 'settings' => array( 00205 'setting1' => 'overriddenValue1', 00206 'setting2' => 'value2', 00207 'setting3' => 'additionalValue', 00208 ), 00209 'view' => array( 00210 'viewSub' => array( 00211 'key1' => 'overridden', 00212 'key2' => 'value2', 00213 'key3' => 'new key', 00214 ) 00215 ), 00216 'persistence' => array( 00217 'storagePid' => '123', 00218 ), 00219 'controllerConfiguration' => NULL 00220 ); 00221 $this->abstractConfigurationManager->expects($this->never())->method('getContextSpecificFrameworkConfiguration'); 00222 $actualResult = $this->abstractConfigurationManager->getConfiguration('SomeExtensionName', 'SomePluginName'); 00223 $this->assertEquals($expectedResult, $actualResult); 00224 } 00225 00226 /** 00227 * @test 00228 */ 00229 public function getConfigurationDoesNotOverrideConfigurationWithContextSpecificFrameworkConfigurationIfDifferentPluginIsSpecified() { 00230 $this->abstractConfigurationManager->expects($this->never())->method('getContextSpecificFrameworkConfiguration'); 00231 $this->abstractConfigurationManager->getConfiguration('SomeExtensionName', 'SomePluginName'); 00232 } 00233 00234 /** 00235 * @test 00236 */ 00237 public function getConfigurationOverridesConfigurationWithContextSpecificFrameworkConfigurationIfNoPluginWasSpecified() { 00238 $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup)); 00239 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with()->will($this->returnValue($this->testPluginConfiguration)); 00240 $contextSpecifixFrameworkConfiguration = array( 00241 'context' => array( 00242 'specific' => 'framwork', 00243 'conf' => 'iguration', 00244 ), 00245 ); 00246 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnValue($contextSpecifixFrameworkConfiguration)); 00247 $actualResult = $this->abstractConfigurationManager->getConfiguration(); 00248 $this->assertEquals($contextSpecifixFrameworkConfiguration, $actualResult); 00249 } 00250 00251 /** 00252 * @test 00253 */ 00254 public function getConfigurationOverridesConfigurationWithContextSpecificFrameworkConfigurationIfSpecifiedPluginIsTheCurrentPlugin() { 00255 $this->abstractConfigurationManager->_set('extensionName', 'CurrentExtensionName'); 00256 $this->abstractConfigurationManager->_set('pluginName', 'CurrentPluginName'); 00257 $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup)); 00258 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00259 $contextSpecifixFrameworkConfiguration = array( 00260 'context' => array( 00261 'specific' => 'framwork', 00262 'conf' => 'iguration', 00263 ), 00264 ); 00265 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnValue($contextSpecifixFrameworkConfiguration)); 00266 $actualResult = $this->abstractConfigurationManager->getConfiguration('CurrentExtensionName', 'CurrentPluginName'); 00267 $this->assertEquals($contextSpecifixFrameworkConfiguration, $actualResult); 00268 } 00269 00270 /** 00271 * @test 00272 */ 00273 public function getConfigurationStoresResultInConfigurationCache() { 00274 $this->abstractConfigurationManager->_set('extensionName', 'CurrentExtensionName'); 00275 $this->abstractConfigurationManager->_set('pluginName', 'CurrentPluginName'); 00276 $this->abstractConfigurationManager->expects($this->any())->method('getPluginConfiguration')->will($this->returnValue(array('foo' => 'bar'))); 00277 $this->abstractConfigurationManager->getConfiguration(); 00278 $this->abstractConfigurationManager->getConfiguration('SomeOtherExtensionName', 'SomeOtherCurrentPluginName'); 00279 $expectedResult = array('currentextensionname_currentpluginname', 'someotherextensionname_someothercurrentpluginname'); 00280 $actualResult = array_keys($this->abstractConfigurationManager->_get('configurationCache')); 00281 $this->assertEquals($expectedResult, $actualResult); 00282 } 00283 00284 /** switchableControllerActions **/ 00285 00286 /** 00287 * @test 00288 */ 00289 public function switchableControllerActionsAreNotOverriddenIfPluginNameIsSpecified() { 00290 $abstractConfigurationManager = $this->getAccessibleMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('overrideSwitchableControllerActions', 'getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration', 'getSwitchableControllerActions')); 00291 $abstractConfigurationManager->setConfiguration(array('switchableControllerActions' => array('overriddenSwitchableControllerActions'))); 00292 $abstractConfigurationManager->expects($this->any())->method('getPluginConfiguration')->will($this->returnValue(array())); 00293 $abstractConfigurationManager->expects($this->never())->method('overrideSwitchableControllerActions'); 00294 $abstractConfigurationManager->getConfiguration('SomeExtensionName', 'SomePluginName'); 00295 } 00296 00297 /** 00298 * @test 00299 */ 00300 public function switchableControllerActionsAreOverriddenIfSpecifiedPluginIsTheCurrentPlugin() { 00301 $abstractConfigurationManager = $this->getAccessibleMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('overrideSwitchableControllerActions', 'getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration', 'getSwitchableControllerActions')); 00302 $abstractConfigurationManager->setConfiguration(array('extensionName' => 'CurrentExtensionName', 'pluginName' => 'CurrentPluginName', 'switchableControllerActions' => array('overriddenSwitchableControllerActions'))); 00303 $abstractConfigurationManager->expects($this->any())->method('getPluginConfiguration')->will($this->returnValue(array())); 00304 $abstractConfigurationManager->expects($this->once())->method('overrideSwitchableControllerActions'); 00305 $abstractConfigurationManager->getConfiguration('CurrentExtensionName', 'CurrentPluginName'); 00306 } 00307 00308 /** 00309 * @test 00310 */ 00311 public function switchableControllerActionsAreOverriddenIfPluginNameIsNotSpecified() { 00312 $abstractConfigurationManager = $this->getAccessibleMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('overrideSwitchableControllerActions', 'getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration', 'getSwitchableControllerActions')); 00313 $abstractConfigurationManager->setConfiguration(array('switchableControllerActions' => array('overriddenSwitchableControllerActions'))); 00314 $abstractConfigurationManager->expects($this->any())->method('getPluginConfiguration')->will($this->returnValue(array())); 00315 $abstractConfigurationManager->expects($this->once())->method('overrideSwitchableControllerActions'); 00316 $abstractConfigurationManager->getConfiguration(); 00317 } 00318 00319 /** 00320 * @test 00321 */ 00322 public function orderOfActionsCanBeOverriddenForCurrentPlugin() { 00323 $configuration = array( 00324 'extensionName' => 'CurrentExtensionName', 00325 'pluginName' => 'CurrentPluginName', 00326 'switchableControllerActions' => array( 00327 'Controller1' => array('action2', 'action1', 'action3'), 00328 ) 00329 ); 00330 $this->abstractConfigurationManager->setConfiguration($configuration); 00331 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00332 $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testSwitchableControllerActions)); 00333 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnCallBack(create_function('$a', 'return $a;'))); 00334 $mergedConfiguration = $this->abstractConfigurationManager->getConfiguration(); 00335 $expectedResult = array( 00336 'Controller1' => array( 00337 'actions' => array('action2', 'action1', 'action3'), 00338 ), 00339 ); 00340 $actualResult = $mergedConfiguration['controllerConfiguration']; 00341 $this->assertEquals($expectedResult, $actualResult); 00342 } 00343 00344 /** 00345 * @test 00346 */ 00347 public function newActionsCanBeAddedForCurrentPlugin() { 00348 $configuration = array( 00349 'extensionName' => 'CurrentExtensionName', 00350 'pluginName' => 'CurrentPluginName', 00351 'switchableControllerActions' => array( 00352 'Controller1' => array('action2', 'action1', 'action3', 'newAction'), 00353 ) 00354 ); 00355 $this->abstractConfigurationManager->setConfiguration($configuration); 00356 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00357 $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testSwitchableControllerActions)); 00358 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnCallBack(create_function('$a', 'return $a;'))); 00359 $mergedConfiguration = $this->abstractConfigurationManager->getConfiguration(); 00360 $expectedResult = array( 00361 'Controller1' => array( 00362 'actions' => array('action2', 'action1', 'action3', 'newAction'), 00363 ), 00364 ); 00365 $actualResult = $mergedConfiguration['controllerConfiguration']; 00366 $this->assertEquals($expectedResult, $actualResult); 00367 } 00368 00369 /** 00370 * @test 00371 */ 00372 public function controllersCanNotBeOverridden() { 00373 $configuration = array( 00374 'extensionName' => 'CurrentExtensionName', 00375 'pluginName' => 'CurrentPluginName', 00376 'switchableControllerActions' => array( 00377 'NewController' => array('action1', 'action2'), 00378 ) 00379 ); 00380 $this->abstractConfigurationManager->setConfiguration($configuration); 00381 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00382 $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testSwitchableControllerActions)); 00383 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnCallBack(create_function('$a', 'return $a;'))); 00384 $mergedConfiguration = $this->abstractConfigurationManager->getConfiguration(); 00385 $expectedResult = array(); 00386 $actualResult = $mergedConfiguration['controllerConfiguration']; 00387 $this->assertEquals($expectedResult, $actualResult); 00388 } 00389 00390 /** 00391 * @test 00392 */ 00393 public function cachingOfActionsCanNotBeChanged() { 00394 $configuration = array( 00395 'extensionName' => 'CurrentExtensionName', 00396 'pluginName' => 'CurrentPluginName', 00397 'switchableControllerActions' => array( 00398 'Controller1' => array('newAction', 'action1'), 00399 'Controller2' => array('newAction2', 'action4', 'action5'), 00400 ) 00401 ); 00402 $this->abstractConfigurationManager->setConfiguration($configuration); 00403 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testPluginConfiguration)); 00404 $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($this->testSwitchableControllerActions)); 00405 $this->abstractConfigurationManager->expects($this->once())->method('getContextSpecificFrameworkConfiguration')->will($this->returnCallBack(create_function('$a', 'return $a;'))); 00406 $mergedConfiguration = $this->abstractConfigurationManager->getConfiguration(); 00407 $expectedResult = array( 00408 'Controller1' => array( 00409 'actions' => array('newAction', 'action1') 00410 ), 00411 'Controller2' => array( 00412 'actions' => array('newAction2', 'action4', 'action5'), 00413 'nonCacheableActions' => array('action4'), 00414 ) 00415 ); 00416 $actualResult = $mergedConfiguration['controllerConfiguration']; 00417 $this->assertEquals($expectedResult, $actualResult); 00418 } 00419 00420 /** 00421 * @test 00422 */ 00423 public function setStoragePidWithStdWrap() { 00424 00425 unset($this->abstractConfigurationManager); 00426 $this->abstractConfigurationManager = $this->getMock('Tx_Extbase_Configuration_AbstractConfigurationManager', array('getSwitchableControllerActions', 'getContextSpecificFrameworkConfiguration', 'getTypoScriptSetup', 'getPluginConfiguration')); 00427 00428 $pluginConfiguration = $this->testPluginConfiguration; 00429 $pluginConfiguration['persistence']['storagePid'] = array( 00430 'cObject' => array( 00431 'value' => '8,3', 00432 '_typoScriptNodeValue' => 'TEXT' 00433 ) 00434 ); 00435 00436 $this->abstractConfigurationManager->expects($this->once())->method('getTypoScriptSetup')->will($this->returnValue($this->testTypoScriptSetup)); 00437 $this->abstractConfigurationManager->expects($this->once())->method('getPluginConfiguration')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue($pluginConfiguration)); 00438 $this->abstractConfigurationManager->expects($this->once())->method('getSwitchableControllerActions')->with('CurrentExtensionName', 'CurrentPluginName')->will($this->returnValue(NULL)); 00439 00440 $expectedResult = array( 00441 'settings' => array( 00442 'setting1' => 'overriddenValue1', 00443 'setting2' => 'value2', 00444 'setting3' => 'additionalValue', 00445 ), 00446 'view' => array( 00447 'viewSub' => array( 00448 'key1' => 'overridden', 00449 'key2' => 'value2', 00450 'key3' => 'new key', 00451 ) 00452 ), 00453 'persistence' => array( 00454 'storagePid' => '8,3', 00455 ), 00456 'controllerConfiguration' => NULL 00457 ); 00458 00459 $actualResult = $this->abstractConfigurationManager->getConfiguration('CurrentExtensionName', 'CurrentPluginName'); 00460 $this->assertEquals($expectedResult, $actualResult); 00461 } 00462 } 00463 ?>
1.8.0