Blame | Last modification | View Log | RSS feed
<?php/*** Controller Merge vars Test file** Isolated from the Controller and Component test as to not pollute their AppController class** CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)** Licensed under The MIT License* For full copyright and license information, please see the LICENSE.txt* Redistributions of files must retain the above copyright notice** @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests* @package Cake.Test.Case.Controller* @since CakePHP(tm) v 1.2.3* @license http://www.opensource.org/licenses/mit-license.php MIT License*/App::uses('Controller', 'Controller');/*** Test case AppController** @package Cake.Test.Case.Controller*/class MergeVarsAppController extends Controller {/*** components** @var array*/public $components = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false));/*** helpers** @var array*/public $helpers = array('MergeVar' => array('format' => 'html', 'terse'));}/*** MergeVar Component** @package Cake.Test.Case.Controller*/class MergeVarComponent extends Object {}/*** Additional controller for testing** @package Cake.Test.Case.Controller*/class MergeVariablesController extends MergeVarsAppController {/*** uses** @var arrays*/public $uses = array();/*** parent for mergeVars** @var string*/protected $_mergeParent = 'MergeVarsAppController';}/*** MergeVarPlugin App Controller** @package Cake.Test.Case.Controller*/class MergeVarPluginAppController extends MergeVarsAppController {/*** components** @var array*/public $components = array('Auth' => array('setting' => 'val', 'otherVal'));/*** helpers** @var array*/public $helpers = array('Js');/*** parent for mergeVars** @var string*/protected $_mergeParent = 'MergeVarsAppController';}/*** MergePostsController** @package Cake.Test.Case.Controller*/class MergePostsController extends MergeVarPluginAppController {/*** uses** @var array*/public $uses = array();}/*** Test Case for Controller Merging of Vars.** @package Cake.Test.Case.Controller*/class ControllerMergeVarsTest extends CakeTestCase {/*** test that component settings are not duplicated when merging component settings** @return void*/public function testComponentParamMergingNoDuplication() {$Controller = new MergeVariablesController();$Controller->constructClasses();$expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false));$this->assertEquals($expected, $Controller->components, 'Duplication of settings occurred. %s');}/*** test component merges with redeclared components** @return void*/public function testComponentMergingWithRedeclarations() {$Controller = new MergeVariablesController();$Controller->components['MergeVar'] = array('remote', 'redirect' => true);$Controller->constructClasses();$expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => true, 'remote'));$this->assertEquals($expected, $Controller->components, 'Merging of settings is wrong. %s');}/*** test merging of helpers array, ensure no duplication occurs** @return void*/public function testHelperSettingMergingNoDuplication() {$Controller = new MergeVariablesController();$Controller->constructClasses();$expected = array('MergeVar' => array('format' => 'html', 'terse'));$this->assertEquals($expected, $Controller->helpers, 'Duplication of settings occurred. %s');}/*** Test that helpers declared in appcontroller come before those in the subclass* orderwise** @return void*/public function testHelperOrderPrecedence() {$Controller = new MergeVariablesController();$Controller->helpers = array('Custom', 'Foo' => array('something'));$Controller->constructClasses();$expected = array('MergeVar' => array('format' => 'html', 'terse'),'Custom' => null,'Foo' => array('something'));$this->assertSame($expected, $Controller->helpers, 'Order is incorrect.');}/*** test merging of vars with plugin** @return void*/public function testMergeVarsWithPlugin() {$Controller = new MergePostsController();$Controller->components = array('Email' => array('ports' => 'open'));$Controller->plugin = 'MergeVarPlugin';$Controller->constructClasses();$expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false),'Auth' => array('setting' => 'val', 'otherVal'),'Email' => array('ports' => 'open'));$this->assertEquals($expected, $Controller->components, 'Components are unexpected.');$expected = array('MergeVar' => array('format' => 'html', 'terse'),'Js' => null);$this->assertEquals($expected, $Controller->helpers, 'Helpers are unexpected.');$Controller = new MergePostsController();$Controller->components = array();$Controller->plugin = 'MergeVarPlugin';$Controller->constructClasses();$expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false),'Auth' => array('setting' => 'val', 'otherVal'),);$this->assertEquals($expected, $Controller->components, 'Components are unexpected.');}/*** Ensure that _mergeControllerVars is not being greedy and merging with* AppController when you make an instance of Controller** @return void*/public function testMergeVarsNotGreedy() {$Controller = new Controller();$Controller->components = array();$Controller->uses = array();$Controller->constructClasses();$this->assertFalse(isset($Controller->Session));}/*** Ensure that $modelClass is correct even when Controller::$uses* has been iterated, eg: by a Component, or event handlers.** @return void*/public function testMergeVarsModelClass() {$Controller = new MergeVariablescontroller();$Controller->uses = array('Test', 'TestAlias');$lastModel = end($Controller->uses);$Controller->constructClasses();$this->assertEquals($Controller->uses[0], $Controller->modelClass);}}