Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * ComponentTest file
 *
 * 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.0.5436
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('Controller', 'Controller');
App::uses('Component', 'Controller');

/**
 * ParamTestComponent
 *
 * @package       Cake.Test.Case.Controller
 */
class ParamTestComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('Banana' => array('config' => 'value'));
}

/**
 * ComponentTestController class
 *
 * @package       Cake.Test.Case.Controller
 */
class ComponentTestController extends Controller {

/**
 * uses property
 *
 * @var array
 */
        public $uses = array();

}

/**
 * AppleComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class AppleComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('Orange');

/**
 * testName property
 *
 * @var mixed null
 */
        public $testName = null;

/**
 * startup method
 *
 * @param Controller $controller
 * @return void
 */
        public function startup(Controller $controller) {
                $this->testName = $controller->name;
        }

}

/**
 * OrangeComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class OrangeComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('Banana');

/**
 * initialize method
 *
 * @param Controller $controller
 * @return void
 */
        public function initialize(Controller $controller) {
                $this->Controller = $controller;
                $this->Banana->testField = 'OrangeField';
        }

/**
 * startup method
 *
 * @param Controller $controller
 * @return string
 */
        public function startup(Controller $controller) {
                $controller->foo = 'pass';
        }

}

/**
 * BananaComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class BananaComponent extends Component {

/**
 * testField property
 *
 * @var string
 */
        public $testField = 'BananaField';

/**
 * startup method
 *
 * @param Controller $controller
 * @return string
 */
        public function startup(Controller $controller) {
                $controller->bar = 'fail';
        }

}

/**
 * MutuallyReferencingOneComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class MutuallyReferencingOneComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('MutuallyReferencingTwo');
}

/**
 * MutuallyReferencingTwoComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class MutuallyReferencingTwoComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('MutuallyReferencingOne');
}

/**
 * SomethingWithEmailComponent class
 *
 * @package       Cake.Test.Case.Controller
 */
class SomethingWithEmailComponent extends Component {

/**
 * components property
 *
 * @var array
 */
        public $components = array('Email');
}

/**
 * ComponentTest class
 *
 * @package       Cake.Test.Case.Controller
 */
class ComponentTest extends CakeTestCase {

/**
 * setUp method
 *
 * @return void
 */
        public function setUp() {
                parent::setUp();
                $this->_pluginPaths = App::path('plugins');
                App::build(array(
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
                ));
        }

/**
 * test accessing inner components.
 *
 * @return void
 */
        public function testInnerComponentConstruction() {
                $Collection = new ComponentCollection();
                $Component = new AppleComponent($Collection);

                $this->assertInstanceOf('OrangeComponent', $Component->Orange, 'class is wrong');
        }

/**
 * test component loading
 *
 * @return void
 */
        public function testNestedComponentLoading() {
                $Collection = new ComponentCollection();
                $Apple = new AppleComponent($Collection);

                $this->assertInstanceOf('OrangeComponent', $Apple->Orange, 'class is wrong');
                $this->assertInstanceOf('BananaComponent', $Apple->Orange->Banana, 'class is wrong');
                $this->assertTrue(empty($Apple->Session));
                $this->assertTrue(empty($Apple->Orange->Session));
        }

/**
 * test that component components are not enabled in the collection.
 *
 * @return void
 */
        public function testInnerComponentsAreNotEnabled() {
                $Collection = new ComponentCollection();
                $Apple = $Collection->load('Apple');

                $this->assertInstanceOf('OrangeComponent', $Apple->Orange, 'class is wrong');
                $result = $Collection->enabled();
                $this->assertEquals(array('Apple'), $result, 'Too many components enabled.');
        }

/**
 * test a component being used more than once.
 *
 * @return void
 */
        public function testMultipleComponentInitialize() {
                $Collection = new ComponentCollection();
                $Banana = $Collection->load('Banana');
                $Orange = $Collection->load('Orange');

                $this->assertSame($Banana, $Orange->Banana, 'Should be references');
                $Banana->testField = 'OrangeField';

                $this->assertSame($Banana->testField, $Orange->Banana->testField, 'References are broken');
        }

/**
 * Test mutually referencing components.
 *
 * @return void
 */
        public function testSomethingReferencingEmailComponent() {
                $Controller = new ComponentTestController();
                $Controller->components = array('SomethingWithEmail');
                $Controller->uses = false;
                $Controller->constructClasses();
                $Controller->Components->trigger('initialize', array(&$Controller));
                $Controller->beforeFilter();
                $Controller->Components->trigger('startup', array(&$Controller));

                $this->assertInstanceOf('SomethingWithEmailComponent', $Controller->SomethingWithEmail);
                $this->assertInstanceOf('EmailComponent', $Controller->SomethingWithEmail->Email);
        }

}