2008-05-30 11:40:08 +00:00
< ? php
/* SVN FILE: $Id$ */
/**
* Short description for file .
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP ( tm ) Tests < https :// trac . cakephp . org / wiki / Developement / TestSuite >
2008-10-30 17:30:26 +00:00
* Copyright 2005 - 2008 , Cake Software Foundation , Inc . ( http :// www . cakefoundation . org )
2008-05-30 11:40:08 +00:00
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice .
*
* @ filesource
2008-10-30 17:30:26 +00:00
* @ copyright Copyright 2005 - 2008 , Cake Software Foundation , Inc . ( http :// www . cakefoundation . org )
* @ link https :// trac . cakephp . org / wiki / Developement / TestSuite CakePHP ( tm ) Tests
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
* @ since CakePHP ( tm ) v 1.2 . 0.5436
* @ version $Revision $
* @ modifiedby $LastChangedBy $
* @ lastmodified $Date $
* @ license http :// www . opensource . org / licenses / opengroup . php The Open Group Test Suite License
2008-05-30 11:40:08 +00:00
*/
App :: import ( 'Core' , 'Controller' );
App :: import ( 'Component' , 'Security' );
App :: import ( 'Component' , 'Cookie' );
2008-10-09 17:03:44 +00:00
/**
* AppController class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-10-09 17:03:44 +00:00
*/
if ( ! class_exists ( 'AppController' )) {
/**
* AppController class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-10-09 17:03:44 +00:00
*/
class AppController extends Controller {
/**
* helpers property
*
* @ var array
* @ access public
*/
var $helpers = array ( 'Html' , 'Javascript' );
/**
* uses property
*
* @ var array
* @ access public
*/
var $uses = array ( 'ControllerPost' );
/**
* components property
*
* @ var array
* @ access public
*/
var $components = array ( 'Cookie' );
}
} else if ( ! defined ( 'APP_CONTROLLER_EXISTS' )) {
define ( 'APP_CONTROLLER_EXISTS' , true );
}
2008-06-02 19:22:55 +00:00
/**
* ControllerPost class
2008-06-23 20:09:24 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class ControllerPost extends CakeTestModel {
2008-06-02 19:22:55 +00:00
/**
* name property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'ControllerPost'
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $name = 'ControllerPost' ;
2008-06-02 19:22:55 +00:00
/**
* useTable property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'posts'
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $useTable = 'posts' ;
2008-06-02 19:22:55 +00:00
/**
* invalidFields property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $invalidFields = array ( 'name' => 'error_msg' );
2008-06-02 19:22:55 +00:00
/**
* lastQuery property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $lastQuery = null ;
2008-06-02 19:22:55 +00:00
/**
* beforeFind method
2008-06-23 20:09:24 +00:00
*
* @ param mixed $query
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function beforeFind ( $query ) {
$this -> lastQuery = $query ;
}
2008-06-02 19:22:55 +00:00
/**
* find method
2008-06-23 20:09:24 +00:00
*
* @ param mixed $type
* @ param array $options
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function find ( $type , $options = array ()) {
if ( $type == 'popular' ) {
2008-06-08 14:35:14 +00:00
$conditions = array ( $this -> name . '.' . $this -> primaryKey . ' > ' => '1' );
$options = Set :: merge ( $options , compact ( 'conditions' ));
return parent :: find ( 'all' , $options );
2008-05-30 11:40:08 +00:00
}
return parent :: find ( $type , $options );
}
}
2008-10-09 17:03:44 +00:00
/**
* ControllerPostsController class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-10-09 17:03:44 +00:00
*/
class ControllerCommentsController extends AppController {
/**
* name property
*
* @ var string 'ControllerPost'
* @ access public
*/
var $name = 'ControllerComments' ;
}
2008-06-02 19:22:55 +00:00
/**
* ControllerComment class
2008-06-23 20:09:24 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class ControllerComment extends CakeTestModel {
2008-06-02 19:22:55 +00:00
/**
* name property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'ControllerComment'
* @ access public
*/
2008-08-25 22:33:36 +00:00
var $name = 'Comment' ;
2008-06-02 19:22:55 +00:00
/**
* useTable property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'comments'
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $useTable = 'comments' ;
2008-06-02 19:22:55 +00:00
/**
* data property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $data = array ( 'name' => 'Some Name' );
2008-06-02 19:22:55 +00:00
/**
* alias property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'ControllerComment'
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $alias = 'ControllerComment' ;
}
2008-09-26 01:37:17 +00:00
/**
* ControllerAlias class
*
2008-10-30 17:30:26 +00:00
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
2008-09-26 01:37:17 +00:00
*/
class ControllerAlias extends CakeTestModel {
/**
* name property
*
* @ var string 'ControllerAlias'
* @ access public
*/
var $name = 'ControllerAlias' ;
/**
* alias property
*
* @ var string 'ControllerSomeAlias'
* @ access public
*/
var $alias = 'ControllerSomeAlias' ;
/**
* useTable property
*
* @ var string 'posts'
* @ access public
*/
var $useTable = 'posts' ;
}
/**
* ControllerPaginateModel class
*
2008-10-30 17:30:26 +00:00
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
2008-09-26 01:37:17 +00:00
*/
2008-09-19 00:46:20 +00:00
class ControllerPaginateModel extends CakeTestModel {
/**
* name property
*
* @ var string
* @ access public
*/
var $name = 'ControllerPaginateModel' ;
/**
* useTable property
*
* @ var string '
* @ access public
*/
var $useTable = 'comments' ;
/**
* paginate method
*
* @ return void
* @ access public
**/
function paginate ( $conditions , $fields , $order , $limit , $page , $recursive , $extra ) {
$this -> extra = $extra ;
}
/**
* paginateCount
*
* @ access public
* @ return void
*/
function paginateCount ( $conditions , $recursive , $extra ) {
$this -> extraCount = $extra ;
}
}
2008-08-27 01:30:09 +00:00
/**
* NameTest class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-08-27 01:30:09 +00:00
*/
class NameTest extends CakeTestModel {
/**
* name property
* @ var string 'Name'
* @ access public
*/
var $name = 'Name' ;
/**
* useTable property
* @ var string 'names'
* @ access public
*/
var $useTable = 'comments' ;
/**
* alias property
*
* @ var string 'ControllerComment'
* @ access public
*/
var $alias = 'Name' ;
}
2008-06-02 19:22:55 +00:00
/**
2008-10-09 17:03:44 +00:00
* TestController class
2008-06-23 20:09:24 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-06-02 19:22:55 +00:00
*/
2008-10-09 17:03:44 +00:00
class TestController extends AppController {
2008-06-02 19:22:55 +00:00
/**
2008-10-09 17:03:44 +00:00
* name property
* @ var string 'Name'
2008-06-02 19:22:55 +00:00
* @ access public
*/
2008-10-09 17:03:44 +00:00
var $name = 'TestController' ;
2008-06-02 19:22:55 +00:00
/**
* helpers property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $helpers = array ( 'Xml' );
2008-06-02 19:22:55 +00:00
/**
* components property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $components = array ( 'Security' );
2008-06-02 19:22:55 +00:00
/**
* uses property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-09-26 01:37:17 +00:00
var $uses = array ( 'ControllerComment' , 'ControllerAlias' );
2008-06-02 19:22:55 +00:00
/**
* index method
2008-06-23 20:09:24 +00:00
*
* @ param mixed $testId
* @ param mixed $test2Id
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function index ( $testId , $test2Id ) {
$this -> data [ 'testId' ] = $testId ;
$this -> data [ 'test2Id' ] = $test2Id ;
}
}
2008-06-02 19:22:55 +00:00
/**
* TestComponent class
2008-06-23 20:09:24 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class TestComponent extends Object {
2008-06-02 19:22:55 +00:00
/**
* beforeRedirect method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function beforeRedirect () {
return true ;
}
}
2008-10-09 17:03:44 +00:00
/**
* AnotherTestController class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller
2008-10-09 17:03:44 +00:00
*/
class AnotherTestController extends AppController {
/**
* name property
* @ var string 'Name'
* @ access public
*/
var $name = 'AnotherTest' ;
/**
* uses property
*
* @ var array
* @ access public
*/
var $uses = null ;
}
2008-05-30 11:40:08 +00:00
/**
* Short description for class .
*
2008-10-30 17:30:26 +00:00
* @ package cake . tests
* @ subpackage cake . tests . cases . libs . controller
2008-05-30 11:40:08 +00:00
*/
class ControllerTest extends CakeTestCase {
2008-06-02 19:22:55 +00:00
/**
* fixtures property
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2008-08-27 01:30:09 +00:00
var $fixtures = array ( 'core.post' , 'core.comment' , 'core.name' );
2008-06-02 19:22:55 +00:00
/**
* testConstructClasses method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testConstructClasses () {
$Controller =& new Controller ();
$Controller -> modelClass = 'ControllerPost' ;
$Controller -> passedArgs [] = '1' ;
$Controller -> constructClasses ();
$this -> assertEqual ( $Controller -> ControllerPost -> id , 1 );
unset ( $Controller );
$Controller =& new Controller ();
$Controller -> uses = array ( 'ControllerPost' , 'ControllerComment' );
$Controller -> passedArgs [] = '1' ;
$Controller -> constructClasses ();
$this -> assertTrue ( is_a ( $Controller -> ControllerPost , 'ControllerPost' ));
$this -> assertTrue ( is_a ( $Controller -> ControllerComment , 'ControllerComment' ));
2008-09-26 01:37:17 +00:00
2008-08-25 22:33:36 +00:00
$this -> assertEqual ( $Controller -> ControllerComment -> name , 'Comment' );
2008-05-30 11:40:08 +00:00
unset ( $Controller );
2008-09-22 04:10:49 +00:00
$_back = array (
'pluginPaths' => Configure :: read ( 'pluginPaths' ),
2008-09-26 01:37:17 +00:00
);
2008-09-22 04:10:49 +00:00
Configure :: write ( 'pluginPaths' , array ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS ));
$Controller =& new Controller ();
$Controller -> uses = array ( 'TestPlugin.TestPluginPost' );
$Controller -> constructClasses ();
$this -> assertEqual ( $Controller -> modelClass , 'TestPluginPost' );
$this -> assertTrue ( isset ( $Controller -> TestPluginPost ));
$this -> assertTrue ( is_a ( $Controller -> TestPluginPost , 'TestPluginPost' ));
2008-09-26 01:37:17 +00:00
2008-09-22 04:10:49 +00:00
Configure :: write ( 'pluginPaths' , $_back [ 'pluginPaths' ]);
unset ( $Controller );
2008-05-30 11:40:08 +00:00
}
2008-08-27 01:30:09 +00:00
function testAliasName () {
$Controller =& new Controller ();
$Controller -> uses = array ( 'NameTest' );
$Controller -> constructClasses ();
$this -> assertEqual ( $Controller -> NameTest -> name , 'Name' );
$this -> assertEqual ( $Controller -> NameTest -> alias , 'Name' );
unset ( $Controller );
}
2008-06-02 19:22:55 +00:00
/**
* testPersistent method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testPersistent () {
2008-08-13 18:07:52 +00:00
Configure :: write ( 'Cache.disable' , false );
2008-05-30 11:40:08 +00:00
$Controller =& new Controller ();
$Controller -> modelClass = 'ControllerPost' ;
$Controller -> persistModel = true ;
$Controller -> constructClasses ();
$this -> assertTrue ( file_exists ( CACHE . 'persistent' . DS . 'controllerpost.php' ));
$this -> assertTrue ( is_a ( $Controller -> ControllerPost , 'ControllerPost' ));
2008-08-13 18:07:52 +00:00
@ unlink ( CACHE . 'persistent' . DS . 'controllerpost.php' );
@ unlink ( CACHE . 'persistent' . DS . 'controllerpostregistry.php' );
2008-05-30 11:40:08 +00:00
unset ( $Controller );
2008-08-13 18:07:52 +00:00
Configure :: write ( 'Cache.disable' , true );
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testPaginate method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testPaginate () {
$Controller =& new Controller ();
$Controller -> uses = array ( 'ControllerPost' , 'ControllerComment' );
$Controller -> passedArgs [] = '1' ;
$Controller -> params [ 'url' ] = array ();
$Controller -> constructClasses ();
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $results , array ( 1 , 2 , 3 ));
$results = Set :: extract ( $Controller -> paginate ( 'ControllerComment' ), '{n}.ControllerComment.id' );
$this -> assertEqual ( $results , array ( 1 , 2 , 3 , 4 , 5 , 6 ));
$Controller -> modelClass = null ;
$Controller -> uses [ 0 ] = 'Plugin.ControllerPost' ;
$results = Set :: extract ( $Controller -> paginate (), '{n}.ControllerPost.id' );
$this -> assertEqual ( $results , array ( 1 , 2 , 3 ));
$Controller -> passedArgs = array ( 'page' => '-1' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( $results , array ( 1 , 2 , 3 ));
2008-06-27 00:43:31 +00:00
$Controller -> passedArgs = array ( 'sort' => 'ControllerPost.id' , 'direction' => 'asc' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( $results , array ( 1 , 2 , 3 ));
$Controller -> passedArgs = array ( 'sort' => 'ControllerPost.id' , 'direction' => 'desc' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( $results , array ( 3 , 2 , 1 ));
$Controller -> passedArgs = array ( 'sort' => 'id' , 'direction' => 'desc' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( $results , array ( 3 , 2 , 1 ));
$Controller -> passedArgs = array ( 'sort' => 'NotExisting.field' , 'direction' => 'desc' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
2009-02-24 01:59:58 +00:00
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 , 'Invalid field in query %s' );
2008-06-27 00:43:31 +00:00
$this -> assertEqual ( $results , array ( 1 , 2 , 3 ));
2008-08-01 11:27:53 +00:00
2008-07-24 02:46:39 +00:00
$Controller -> passedArgs = array ( 'sort' => 'ControllerPost.author_id' , 'direction' => 'allYourBase' );
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> ControllerPost -> lastQuery [ 'order' ][ 0 ], array ( 'ControllerPost.author_id' => 'asc' ));
$this -> assertEqual ( $results , array ( 1 , 3 , 2 ));
2009-02-25 19:51:41 +00:00
$Controller -> passedArgs = array ( 'page' => '1 " onclick="alert(\'xss\');">' );
$Controller -> paginate = array ( 'limit' => 1 );
2009-02-24 01:59:58 +00:00
$Controller -> paginate ( 'ControllerPost' );
2009-02-25 19:51:41 +00:00
$this -> assertIdentical ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 , 'XSS exploit opened %s' );
$this -> assertIdentical ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'options' ][ 'page' ], 1 , 'XSS exploit opened %s' );
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testPaginateExtraParams method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testPaginateExtraParams () {
$Controller =& new Controller ();
$Controller -> uses = array ( 'ControllerPost' , 'ControllerComment' );
$Controller -> passedArgs [] = '1' ;
$Controller -> params [ 'url' ] = array ();
$Controller -> constructClasses ();
$Controller -> passedArgs = array ( 'page' => '-1' , 'contain' => array ( 'ControllerComment' ));
$result = $Controller -> paginate ( 'ControllerPost' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( Set :: extract ( $result , '{n}.ControllerPost.id' ), array ( 1 , 2 , 3 ));
$this -> assertTrue ( ! isset ( $Controller -> ControllerPost -> lastQuery [ 'contain' ]));
2008-05-31 03:54:22 +00:00
2008-05-30 11:40:08 +00:00
$Controller -> passedArgs = array ( 'page' => '-1' );
$Controller -> paginate = array ( 'ControllerPost' => array ( 'contain' => array ( 'ControllerComment' )));
$result = $Controller -> paginate ( 'ControllerPost' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'page' ], 1 );
$this -> assertEqual ( Set :: extract ( $result , '{n}.ControllerPost.id' ), array ( 1 , 2 , 3 ));
2008-06-08 14:35:14 +00:00
$this -> assertTrue ( isset ( $Controller -> ControllerPost -> lastQuery [ 'contain' ]));
2008-05-31 03:54:22 +00:00
2008-05-30 11:40:08 +00:00
$Controller -> paginate = array ( 'ControllerPost' => array ( 'popular' , 'fields' => array ( 'id' , 'title' )));
$result = $Controller -> paginate ( 'ControllerPost' );
$this -> assertEqual ( Set :: extract ( $result , '{n}.ControllerPost.id' ), array ( 2 , 3 ));
2008-06-08 14:35:14 +00:00
$this -> assertEqual ( $Controller -> ControllerPost -> lastQuery [ 'conditions' ], array ( 'ControllerPost.id > ' => '1' ));
2008-09-26 01:37:17 +00:00
2008-10-02 00:46:26 +00:00
$Controller -> passedArgs = array ( 'limit' => 12 );
$Controller -> paginate = array ( 'limit' => 30 );
$result = $Controller -> paginate ( 'ControllerPost' );
$paging = $Controller -> params [ 'paging' ][ 'ControllerPost' ];
$this -> assertEqual ( $Controller -> ControllerPost -> lastQuery [ 'limit' ], 12 );
$this -> assertEqual ( $paging [ 'options' ][ 'limit' ], 12 );
2008-09-19 00:46:20 +00:00
$Controller =& new Controller ();
$Controller -> uses = array ( 'ControllerPaginateModel' );
$Controller -> params [ 'url' ] = array ();
$Controller -> constructClasses ();
$Controller -> paginate = array (
2008-09-29 21:19:37 +00:00
'ControllerPaginateModel' => array ( 'contain' => array ( 'ControllerPaginateModel' ), 'group' => 'Comment.author_id' )
);
2008-09-19 00:46:20 +00:00
$result = $Controller -> paginate ( 'ControllerPaginateModel' );
$expected = array ( 'contain' => array ( 'ControllerPaginateModel' ), 'group' => 'Comment.author_id' );
$this -> assertEqual ( $Controller -> ControllerPaginateModel -> extra , $expected );
$this -> assertEqual ( $Controller -> ControllerPaginateModel -> extraCount , $expected );
2008-09-29 21:19:37 +00:00
$Controller -> paginate = array (
'ControllerPaginateModel' => array ( 'foo' , 'contain' => array ( 'ControllerPaginateModel' ), 'group' => 'Comment.author_id' )
);
$Controller -> paginate ( 'ControllerPaginateModel' );
$expected = array ( 'contain' => array ( 'ControllerPaginateModel' ), 'group' => 'Comment.author_id' , 'type' => 'foo' );
$this -> assertEqual ( $Controller -> ControllerPaginateModel -> extra , $expected );
$this -> assertEqual ( $Controller -> ControllerPaginateModel -> extraCount , $expected );
2008-05-30 11:40:08 +00:00
}
2008-10-23 22:20:03 +00:00
/**
* testPaginatePassedArgs method
*
* @ return void
* @ access public
*/
function testPaginatePassedArgs () {
$Controller =& new Controller ();
$Controller -> uses = array ( 'ControllerPost' );
$Controller -> passedArgs [] = array ( '1' , '2' , '3' );
$Controller -> params [ 'url' ] = array ();
$Controller -> constructClasses ();
$Controller -> paginate = array (
'fields' => array (),
'order' => '' ,
'limit' => 5 ,
'page' => 1 ,
'recursive' => - 1
);
$conditions = array ();
$Controller -> paginate ( 'ControllerPost' , $conditions );
$expected = array (
'fields' => array (),
'order' => '' ,
'limit' => 5 ,
'page' => 1 ,
'recursive' => - 1 ,
'conditions' => array ()
);
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'options' ], $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testDefaultPaginateParams method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDefaultPaginateParams () {
$Controller =& new Controller ();
$Controller -> modelClass = 'ControllerPost' ;
$Controller -> params [ 'url' ] = array ();
$Controller -> paginate = array ( 'order' => 'ControllerPost.id DESC' );
$Controller -> constructClasses ();
$results = Set :: extract ( $Controller -> paginate ( 'ControllerPost' ), '{n}.ControllerPost.id' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'defaults' ][ 'order' ], 'ControllerPost.id DESC' );
$this -> assertEqual ( $Controller -> params [ 'paging' ][ 'ControllerPost' ][ 'options' ][ 'order' ], 'ControllerPost.id DESC' );
$this -> assertEqual ( $results , array ( 3 , 2 , 1 ));
}
2008-06-02 19:22:55 +00:00
/**
* testFlash method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testFlash () {
$Controller =& new Controller ();
$Controller -> flash ( 'this should work' , '/flash' );
$result = $Controller -> output ;
$expected = ' <! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " />
2008-07-21 02:40:58 +00:00
< title > this should work </ title >
2008-05-30 11:40:08 +00:00
< style ><!--
P { text - align : center ; font : bold 1.1 em sans - serif }
A { color : #444; text-decoration:none }
A : HOVER { text - decoration : underline ; color : #44E }
--></ style >
</ head >
< body >
< p >< a href = " /flash " > this should work </ a ></ p >
</ body >
</ html > ' ;
2008-06-20 20:17:23 +00:00
$result = str_replace ( array ( " \t " , " \r \n " , " \n " ), " " , $result );
2008-05-30 11:40:08 +00:00
$expected = str_replace ( array ( " \t " , " \r \n " , " \n " ), " " , $expected );
$this -> assertEqual ( $result , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testControllerSet method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testControllerSet () {
$Controller =& new Controller ();
$Controller -> set ( 'variable_with_underscores' , null );
$this -> assertTrue ( array_key_exists ( 'variable_with_underscores' , $Controller -> viewVars ));
$Controller -> viewVars = array ();
$viewVars = array ( 'ModelName' => array ( 'id' => 1 , 'name' => 'value' ));
$Controller -> set ( $viewVars );
2009-01-20 19:36:39 +00:00
$this -> assertTrue ( array_key_exists ( 'ModelName' , $Controller -> viewVars ));
2008-05-30 11:40:08 +00:00
$Controller -> viewVars = array ();
$Controller -> set ( 'variable_with_underscores' , 'value' );
$this -> assertTrue ( array_key_exists ( 'variable_with_underscores' , $Controller -> viewVars ));
$Controller -> viewVars = array ();
$viewVars = array ( 'ModelName' => 'name' );
$Controller -> set ( $viewVars );
2009-01-20 19:36:39 +00:00
$this -> assertTrue ( array_key_exists ( 'ModelName' , $Controller -> viewVars ));
2008-05-30 11:40:08 +00:00
$Controller -> set ( 'title' , 'someTitle' );
$this -> assertIdentical ( $Controller -> pageTitle , 'someTitle' );
$Controller -> viewVars = array ();
$expected = array ( 'ModelName' => 'name' , 'ModelName2' => 'name2' );
$Controller -> set ( array ( 'ModelName' , 'ModelName2' ), array ( 'name' , 'name2' ));
$this -> assertIdentical ( $Controller -> viewVars , $expected );
}
2008-06-02 19:22:55 +00:00
/**
* testRender method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRender () {
Configure :: write ( 'viewPaths' , array ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS , TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS ));
$Controller =& new Controller ();
$Controller -> viewPath = 'posts' ;
$result = $Controller -> render ( 'index' );
$this -> assertPattern ( '/posts index/' , $result );
$result = $Controller -> render ( '/elements/test_element' );
$this -> assertPattern ( '/this is the test element/' , $result );
2008-08-01 11:27:53 +00:00
2008-07-15 02:13:14 +00:00
$Controller = new TestController ();
$Controller -> constructClasses ();
$Controller -> ControllerComment -> validationErrors = array ( 'title' => 'tooShort' );
$expected = $Controller -> ControllerComment -> validationErrors ;
2008-08-01 11:27:53 +00:00
2008-07-15 02:13:14 +00:00
ClassRegistry :: flush ();
$Controller -> viewPath = 'posts' ;
$result = $Controller -> render ( 'index' );
$View = ClassRegistry :: getObject ( 'view' );
$this -> assertTrue ( isset ( $View -> validationErrors [ 'ControllerComment' ]));
$this -> assertEqual ( $expected , $View -> validationErrors [ 'ControllerComment' ]);
2008-08-01 11:27:53 +00:00
2008-07-15 02:13:14 +00:00
$Controller -> ControllerComment -> validationErrors = array ();
2008-08-01 11:27:53 +00:00
ClassRegistry :: flush ();
2008-05-30 11:40:08 +00:00
}
2008-06-02 19:22:55 +00:00
/**
* testToBeInheritedGuardmethods method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testToBeInheritedGuardmethods () {
$Controller =& new Controller ();
$this -> assertTrue ( $Controller -> _beforeScaffold ( '' ));
$this -> assertTrue ( $Controller -> _afterScaffoldSave ( '' ));
$this -> assertTrue ( $Controller -> _afterScaffoldSaveError ( '' ));
$this -> assertFalse ( $Controller -> _scaffoldError ( '' ));
}
2008-06-02 19:22:55 +00:00
/**
* testRedirect method
2008-06-23 20:09:24 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRedirect () {
$url = 'cakephp.org' ;
$codes = array (
100 => " Continue " ,
101 => " Switching Protocols " ,
200 => " OK " ,
201 => " Created " ,
202 => " Accepted " ,
203 => " Non-Authoritative Information " ,
204 => " No Content " ,
205 => " Reset Content " ,
206 => " Partial Content " ,
300 => " Multiple Choices " ,
301 => " Moved Permanently " ,
302 => " Found " ,
303 => " See Other " ,
304 => " Not Modified " ,
305 => " Use Proxy " ,
307 => " Temporary Redirect " ,
400 => " Bad Request " ,
401 => " Unauthorized " ,
402 => " Payment Required " ,
403 => " Forbidden " ,
404 => " Not Found " ,
405 => " Method Not Allowed " ,
406 => " Not Acceptable " ,
407 => " Proxy Authentication Required " ,
408 => " Request Time-out " ,
409 => " Conflict " ,
410 => " Gone " ,
411 => " Length Required " ,
412 => " Precondition Failed " ,
413 => " Request Entity Too Large " ,
414 => " Request-URI Too Large " ,
415 => " Unsupported Media Type " ,
416 => " Requested range not satisfiable " ,
417 => " Expectation Failed " ,
500 => " Internal Server Error " ,
501 => " Not Implemented " ,
502 => " Bad Gateway " ,
503 => " Service Unavailable " ,
504 => " Gateway Time-out "
);
Mock :: generatePartial ( 'Controller' , 'MockController' , array ( 'header' ));
App :: import ( 'Helper' , 'Cache' );
2008-08-01 11:27:53 +00:00
// $codes = array_merge($codes, array_flip($codes));
2008-05-30 11:40:08 +00:00
foreach ( $codes as $code => $msg ) {
$MockController =& new MockController ();
$MockController -> components = array ( 'Test' );
2008-05-31 03:54:22 +00:00
$MockController -> Component =& new Component ();
$MockController -> Component -> init ( $MockController );
2008-05-30 11:40:08 +00:00
$MockController -> expectCallCount ( 'header' , 2 );
$MockController -> redirect ( $url , ( int ) $code , false );
}
2008-08-01 11:27:53 +00:00
$codes = array_flip ( $codes );
foreach ( $codes as $code => $msg ) {
$MockController =& new MockController ();
$MockController -> components = array ( 'Test' );
$MockController -> Component =& new Component ();
$MockController -> Component -> init ( $MockController );
$MockController -> expectCallCount ( 'header' , 2 );
$MockController -> redirect ( $url , $code , false );
}
2008-05-30 11:40:08 +00:00
}
2008-06-05 15:20:45 +00:00
/**
* testMergeVars method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMergeVars () {
2008-06-20 20:17:23 +00:00
$this -> skipIf ( defined ( 'APP_CONTROLLER_EXISTS' ), 'MergeVars will be skipped as it needs a non-existent AppController. As the an AppController class exists, this cannot be run.' );
2008-05-30 11:40:08 +00:00
$TestController =& new TestController ();
$TestController -> constructClasses ();
$testVars = get_class_vars ( 'TestController' );
$appVars = get_class_vars ( 'AppController' );
2008-06-23 20:09:24 +00:00
2008-05-30 11:40:08 +00:00
$components = is_array ( $appVars [ 'components' ])
? array_merge ( $appVars [ 'components' ], $testVars [ 'components' ])
: $testVars [ 'components' ];
if ( ! in_array ( 'Session' , $components )) {
$components [] = 'Session' ;
}
$helpers = is_array ( $appVars [ 'helpers' ])
? array_merge ( $appVars [ 'helpers' ], $testVars [ 'helpers' ])
: $testVars [ 'helpers' ];
$uses = is_array ( $appVars [ 'uses' ])
? array_merge ( $appVars [ 'uses' ], $testVars [ 'uses' ])
: $testVars [ 'uses' ];
2008-06-23 20:09:24 +00:00
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( count ( array_diff ( $TestController -> helpers , $helpers )), 0 );
$this -> assertEqual ( count ( array_diff ( $TestController -> uses , $uses )), 0 );
2008-06-04 02:39:05 +00:00
$this -> assertEqual ( count ( array_diff_assoc ( Set :: normalize ( $TestController -> components ), Set :: normalize ( $components ))), 0 );
2008-10-09 17:03:44 +00:00
$TestController =& new AnotherTestController ();
$TestController -> constructClasses ();
$appVars = get_class_vars ( 'AppController' );
$testVars = get_class_vars ( 'AnotherTestController' );
$this -> assertTrue ( in_array ( 'ControllerPost' , $appVars [ 'uses' ]));
$this -> assertNull ( $testVars [ 'uses' ]);
$this -> assertFalse ( isset ( $TestController -> ControllerPost ));
$TestController =& new ControllerCommentsController ();
$TestController -> constructClasses ();
$appVars = get_class_vars ( 'AppController' );
$testVars = get_class_vars ( 'ControllerCommentsController' );
$this -> assertTrue ( in_array ( 'ControllerPost' , $appVars [ 'uses' ]));
$this -> assertEqual ( array ( 'ControllerPost' ), $testVars [ 'uses' ]);
$this -> assertTrue ( isset ( $TestController -> ControllerPost ));
$this -> assertTrue ( isset ( $TestController -> ControllerComment ));
2009-02-12 13:36:20 +00:00
}
/**
* Ensure that __mergeVars is not being greedy and merging with
* AppController when you make an instance of Controller
*
* @ return void
**/
function testMergeVarsNotGreedy () {
$Controller =& new Controller ();
$Controller -> components = array ();
$Controller -> uses = array ();
$Controller -> constructClasses ();
2008-10-09 17:03:44 +00:00
2009-02-15 20:13:14 +00:00
$this -> assertTrue ( isset ( $Controller -> Session ));
2008-05-30 11:40:08 +00:00
}
2008-06-05 15:20:45 +00:00
/**
* testReferer method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testReferer () {
$Controller =& new Controller ();
$_SERVER [ 'HTTP_REFERER' ] = 'http://cakephp.org' ;
$result = $Controller -> referer ( null , false );
$expected = 'http://cakephp.org' ;
$this -> assertIdentical ( $result , $expected );
$_SERVER [ 'HTTP_REFERER' ] = '' ;
$result = $Controller -> referer ( 'http://cakephp.org' , false );
$expected = 'http://cakephp.org' ;
$this -> assertIdentical ( $result , $expected );
$_SERVER [ 'HTTP_REFERER' ] = '' ;
$result = $Controller -> referer ( null , false );
$expected = '/' ;
$this -> assertIdentical ( $result , $expected );
$_SERVER [ 'HTTP_REFERER' ] = FULL_BASE_URL . $Controller -> webroot . '/some/path' ;
$result = $Controller -> referer ( null , false );
$expected = '/some/path' ;
$this -> assertIdentical ( $result , $expected );
$Controller -> webroot .= '/' ;
$_SERVER [ 'HTTP_REFERER' ] = FULL_BASE_URL . $Controller -> webroot . '/some/path' ;
$result = $Controller -> referer ( null , false );
$expected = '/some/path' ;
$this -> assertIdentical ( $result , $expected );
$_SERVER [ 'HTTP_REFERER' ] = FULL_BASE_URL . $Controller -> webroot . 'some/path' ;
$result = $Controller -> referer ( null , false );
$expected = '/some/path' ;
$this -> assertIdentical ( $result , $expected );
2008-08-13 18:07:52 +00:00
$Controller -> webroot = '/recipe/' ;
$_SERVER [ 'HTTP_REFERER' ] = FULL_BASE_URL . $Controller -> webroot . 'recipes/add' ;
$result = $Controller -> referer ();
$expected = '/recipes/add' ;
$this -> assertIdentical ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2008-06-05 15:20:45 +00:00
/**
* testSetAction method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testSetAction () {
$TestController =& new TestController ();
$TestController -> setAction ( 'index' , 1 , 2 );
$expected = array ( 'testId' => 1 , 'test2Id' => 2 );
$this -> assertidentical ( $TestController -> data , $expected );
}
2008-06-05 15:20:45 +00:00
/**
* testUnimplementedIsAuthorized method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testUnimplementedIsAuthorized () {
$TestController =& new TestController ();
$TestController -> isAuthorized ();
$this -> assertError ();
}
2008-06-05 15:20:45 +00:00
/**
* testValidateErrors method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testValidateErrors () {
$TestController =& new TestController ();
$TestController -> constructClasses ();
$this -> assertFalse ( $TestController -> validateErrors ());
$this -> assertEqual ( $TestController -> validate (), 0 );
2008-05-31 03:54:22 +00:00
2008-05-30 11:40:08 +00:00
$TestController -> ControllerComment -> invalidate ( 'some_field' , 'error_message' );
$TestController -> ControllerComment -> invalidate ( 'some_field2' , 'error_message2' );
$comment = new ControllerComment ;
$comment -> set ( 'someVar' , 'data' );
$result = $TestController -> validateErrors ( $comment );
$expected = array ( 'some_field' => 'error_message' , 'some_field2' => 'error_message2' );
$this -> assertIdentical ( $result , $expected );
$this -> assertEqual ( $TestController -> validate ( $comment ), 2 );
}
2008-06-05 15:20:45 +00:00
/**
* testPostConditions method
2008-06-23 20:09:24 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testPostConditions () {
$Controller =& new Controller ();
$data = array (
'Model1' => array ( 'field1' => '23' ),
'Model2' => array ( 'field2' => 'string' ),
'Model3' => array ( 'field3' => '23' ),
);
$expected = array (
'Model1.field1' => '23' ,
'Model2.field2' => 'string' ,
'Model3.field3' => '23' ,
);
$result = $Controller -> postConditions ( $data );
$this -> assertIdentical ( $result , $expected );
$data = array ();
$Controller -> data = array (
'Model1' => array ( 'field1' => '23' ),
'Model2' => array ( 'field2' => 'string' ),
'Model3' => array ( 'field3' => '23' ),
);
$expected = array (
'Model1.field1' => '23' ,
'Model2.field2' => 'string' ,
'Model3.field3' => '23' ,
);
$result = $Controller -> postConditions ( $data );
$this -> assertIdentical ( $result , $expected );
$data = array ();
$Controller -> data = array ();
$result = $Controller -> postConditions ( $data );
$this -> assertNull ( $result );
$data = array ();
$Controller -> data = array (
'Model1' => array ( 'field1' => '23' ),
'Model2' => array ( 'field2' => 'string' ),
'Model3' => array ( 'field3' => '23' ),
);
$ops = array (
'Model1.field1' => '>' ,
'Model2.field2' => 'LIKE' ,
'Model3.field3' => '<=' ,
);
$expected = array (
2008-06-09 08:29:56 +00:00
'Model1.field1 >' => '23' ,
'Model2.field2 LIKE' => " %string% " ,
'Model3.field3 <=' => '23' ,
2008-05-30 11:40:08 +00:00
);
$result = $Controller -> postConditions ( $data , $ops );
$this -> assertIdentical ( $result , $expected );
}
2008-06-23 20:09:24 +00:00
/**
* testRequestHandlerPrefers method
*
* @ access public
* @ return void
*/
function testRequestHandlerPrefers (){
2008-07-04 13:26:43 +00:00
Configure :: write ( 'debug' , 2 );
2008-06-23 20:09:24 +00:00
$Controller =& new Controller ();
$Controller -> components = array ( " RequestHandler " );
$Controller -> modelClass = 'ControllerPost' ;
$Controller -> params [ 'url' ][ 'ext' ] = 'rss' ;
$Controller -> constructClasses ();
$Controller -> Component -> initialize ( $Controller );
$Controller -> beforeFilter ();
$Controller -> Component -> startup ( $Controller );
$this -> assertEqual ( $Controller -> RequestHandler -> prefers (), 'rss' );
unset ( $Controller );
}
2008-05-30 11:40:08 +00:00
}
2008-06-23 20:09:24 +00:00
?>