2008-05-30 11:40:08 +00:00
< ? php
/**
2009-03-18 17:55:58 +00:00
* RequestHandlerComponentTest file
2008-05-30 11:40:08 +00:00
*
* PHP versions 4 and 5
*
2010-05-19 01:15:13 +00:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2010-01-26 19:18:20 +00:00
* Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// 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 .
*
2010-01-26 19:18:20 +00:00
* @ copyright Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2010-05-19 01:15:13 +00:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs . controller . components
* @ since CakePHP ( tm ) v 1.2 . 0.5435
* @ license http :// www . opensource . org / licenses / opengroup . php The Open Group Test Suite License
2008-05-30 11:40:08 +00:00
*/
2009-07-26 01:27:02 +00:00
App :: import ( 'Controller' , 'Controller' , false );
2008-05-30 11:40:08 +00:00
App :: import ( 'Component' , array ( 'RequestHandler' ));
2009-03-01 06:11:03 +00:00
Mock :: generatePartial ( 'RequestHandlerComponent' , 'NoStopRequestHandler' , array ( '_stop' ));
2010-05-04 02:07:13 +00:00
Mock :: generatePartial ( 'Controller' , 'RequestHandlerMockController' , array ( 'header' ));
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* RequestHandlerTestController class
2008-06-10 22:38:05 +00:00
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller . components
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class RequestHandlerTestController extends Controller {
2009-07-24 19:18:37 +00:00
2009-07-14 03:52:06 +00:00
/**
* name property
*
* @ var string
* @ access public
2009-11-14 12:19:25 +00:00
*/
2009-07-14 03:52:06 +00:00
var $name = 'RequestHandlerTest' ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* uses property
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
* @ access public
*/
2008-05-30 11:40:08 +00:00
var $uses = null ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* construct method
2008-06-10 22:38:05 +00:00
*
* @ param array $params
2008-06-02 19:22:55 +00:00
* @ access private
* @ return void
*/
2008-05-30 11:40:08 +00:00
function __construct ( $params = array ()) {
foreach ( $params as $key => $val ) {
$this -> { $key } = $val ;
}
parent :: __construct ();
}
2009-07-24 19:18:37 +00:00
2009-03-01 06:11:03 +00:00
/**
* test method for ajax redirection
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-03-01 06:11:03 +00:00
function destination () {
$this -> viewPath = 'posts' ;
$this -> render ( 'index' );
}
2010-02-03 01:39:05 +00:00
/**
* test method for ajax redirection + parameter parsing
*
* @ return void
*/
function param_method ( $one = null , $two = null ) {
echo " one: $one two: $two " ;
$this -> autoRender = false ;
}
2010-06-08 03:43:35 +00:00
/**
* test method for testing layout rendering when isAjax ()
*
* @ return void
*/
function ajax2_layout () {
if ( $this -> autoLayout ) {
$this -> layout = 'ajax2' ;
}
$this -> destination ();
}
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-10 22:38:05 +00:00
/**
* RequestHandlerTestDisabledController class
*
2008-10-30 17:30:26 +00:00
* @ package cake
* @ subpackage cake . tests . cases . libs . controller . components
2008-06-10 22:38:05 +00:00
*/
class RequestHandlerTestDisabledController extends Controller {
2009-07-24 19:18:37 +00:00
2008-06-10 22:38:05 +00:00
/**
* uses property
*
* @ var mixed null
* @ access public
*/
var $uses = null ;
2009-07-24 19:18:37 +00:00
2008-06-10 22:38:05 +00:00
/**
* construct method
*
* @ param array $params
* @ access private
* @ return void
*/
function __construct ( $params = array ()) {
foreach ( $params as $key => $val ) {
$this -> { $key } = $val ;
}
parent :: __construct ();
}
2009-07-24 19:18:37 +00:00
2009-03-18 17:55:58 +00:00
/**
* beforeFilter method
*
* @ return void
* @ access public
*/
2008-06-10 22:38:05 +00:00
function beforeFilter () {
$this -> RequestHandler -> enabled = false ;
}
}
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
2009-03-18 17:55:58 +00:00
* RequestHandlerComponentTest class
2008-05-30 11:40:08 +00:00
*
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs . controller . components
2008-05-30 11:40:08 +00:00
*/
class RequestHandlerComponentTest extends CakeTestCase {
2009-07-24 19:18:37 +00:00
2009-03-18 17:55:58 +00:00
/**
* Controller property
*
* @ var RequestHandlerTestController
* @ access public
*/
var $Controller ;
2009-07-24 19:18:37 +00:00
2009-03-18 17:55:58 +00:00
/**
* RequestHandler property
*
* @ var RequestHandlerComponent
* @ access public
*/
var $RequestHandler ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
2009-07-14 03:52:06 +00:00
* startTest method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2009-07-14 03:52:06 +00:00
function startTest () {
2008-05-30 11:40:08 +00:00
$this -> _init ();
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
2009-07-14 03:52:06 +00:00
* init method
*
* @ access protected
* @ return void
*/
function _init () {
$this -> Controller = new RequestHandlerTestController ( array ( 'components' => array ( 'RequestHandler' )));
$this -> Controller -> constructClasses ();
$this -> RequestHandler =& $this -> Controller -> RequestHandler ;
}
2009-07-24 19:18:37 +00:00
2009-07-14 03:52:06 +00:00
/**
* endTest method
2008-06-10 22:38:05 +00:00
*
2009-03-18 17:55:58 +00:00
* @ access public
2008-06-02 19:22:55 +00:00
* @ return void
*/
2009-07-14 03:52:06 +00:00
function endTest () {
2009-03-18 17:55:58 +00:00
unset ( $this -> RequestHandler );
unset ( $this -> Controller );
if ( ! headers_sent ()) {
header ( 'Content-type: text/html' ); //reset content type.
}
2009-06-11 16:13:16 +00:00
App :: build ();
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testInitializeCallback method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testInitializeCallback () {
$this -> assertNull ( $this -> RequestHandler -> ext );
$this -> _init ();
$this -> Controller -> params [ 'url' ][ 'ext' ] = 'rss' ;
$this -> RequestHandler -> initialize ( $this -> Controller );
$this -> assertEqual ( $this -> RequestHandler -> ext , 'rss' );
2009-12-17 04:02:57 +00:00
$settings = array (
'ajaxLayout' => 'test_ajax'
);
$this -> RequestHandler -> initialize ( $this -> Controller , $settings );
$this -> assertEqual ( $this -> RequestHandler -> ajaxLayout , 'test_ajax' );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testDisabling method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDisabling () {
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'XMLHttpRequest' ;
2008-06-10 22:38:05 +00:00
$this -> _init ();
2008-06-12 18:36:08 +00:00
$this -> Controller -> Component -> initialize ( $this -> Controller );
$this -> Controller -> beforeFilter ();
$this -> Controller -> Component -> startup ( $this -> Controller );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $this -> Controller -> params , array ( 'isAjax' => true ));
2008-06-10 22:38:05 +00:00
$this -> Controller = new RequestHandlerTestDisabledController ( array ( 'components' => array ( 'RequestHandler' )));
2008-06-12 18:36:08 +00:00
$this -> Controller -> constructClasses ();
$this -> Controller -> Component -> initialize ( $this -> Controller );
$this -> Controller -> beforeFilter ();
$this -> Controller -> Component -> startup ( $this -> Controller );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $this -> Controller -> params , array ());
unset ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ]);
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testAutoResponseType method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testAutoResponseType () {
$this -> Controller -> ext = '.thtml' ;
$this -> Controller -> params [ 'url' ][ 'ext' ] = 'rss' ;
$this -> RequestHandler -> initialize ( $this -> Controller );
$this -> RequestHandler -> startup ( $this -> Controller );
$this -> assertEqual ( $this -> Controller -> ext , '.ctp' );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testStartupCallback method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testStartupCallback () {
$_SERVER [ 'REQUEST_METHOD' ] = 'PUT' ;
$_SERVER [ 'CONTENT_TYPE' ] = 'application/xml' ;
$this -> RequestHandler -> startup ( $this -> Controller );
2009-12-31 12:06:58 +00:00
$this -> assertTrue ( is_array ( $this -> Controller -> data ));
$this -> assertFalse ( is_object ( $this -> Controller -> data ));
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-08-09 18:32:59 +00:00
/**
* testStartupCallback with charset .
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2008-08-09 18:32:59 +00:00
function testStartupCallbackCharset () {
$_SERVER [ 'REQUEST_METHOD' ] = 'PUT' ;
$_SERVER [ 'CONTENT_TYPE' ] = 'application/xml; charset=UTF-8' ;
$this -> RequestHandler -> startup ( $this -> Controller );
2009-12-31 12:06:58 +00:00
$this -> assertTrue ( is_array ( $this -> Controller -> data ));
$this -> assertFalse ( is_object ( $this -> Controller -> data ));
2008-08-09 18:32:59 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testNonAjaxRedirect method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testNonAjaxRedirect () {
$this -> RequestHandler -> initialize ( $this -> Controller );
$this -> RequestHandler -> startup ( $this -> Controller );
$this -> assertNull ( $this -> RequestHandler -> beforeRedirect ( $this -> Controller , '/' ));
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testRenderAs method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRenderAs () {
$this -> assertFalse ( in_array ( 'Xml' , $this -> Controller -> helpers ));
$this -> RequestHandler -> renderAs ( $this -> Controller , 'xml' );
$this -> assertTrue ( in_array ( 'Xml' , $this -> Controller -> helpers ));
2009-10-13 04:01:09 +00:00
$this -> Controller -> viewPath = 'request_handler_test\\xml' ;
$this -> RequestHandler -> renderAs ( $this -> Controller , 'js' );
$this -> assertEqual ( $this -> Controller -> viewPath , 'request_handler_test' . DS . 'js' );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2009-07-14 03:52:06 +00:00
/**
* test that calling renderAs () more than once continues to work .
*
* @ link #6466
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-07-14 03:52:06 +00:00
function testRenderAsCalledTwice () {
$this -> RequestHandler -> renderAs ( $this -> Controller , 'xml' );
2009-10-13 03:55:40 +00:00
$this -> assertEqual ( $this -> Controller -> viewPath , 'request_handler_test' . DS . 'xml' );
2009-07-14 03:52:06 +00:00
$this -> assertEqual ( $this -> Controller -> layoutPath , 'xml' );
2009-07-24 19:18:37 +00:00
2009-07-14 03:52:06 +00:00
$this -> assertTrue ( in_array ( 'Xml' , $this -> Controller -> helpers ));
$this -> RequestHandler -> renderAs ( $this -> Controller , 'js' );
2009-10-13 03:55:40 +00:00
$this -> assertEqual ( $this -> Controller -> viewPath , 'request_handler_test' . DS . 'js' );
2009-07-14 03:52:06 +00:00
$this -> assertEqual ( $this -> Controller -> layoutPath , 'js' );
$this -> assertTrue ( in_array ( 'Js' , $this -> Controller -> helpers ));
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testRequestClientTypes method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRequestClientTypes () {
$this -> assertFalse ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Shockwave Flash' ;
$this -> assertTrue ( $this -> RequestHandler -> isFlash ());
unset ( $_SERVER [ 'HTTP_USER_AGENT' ], $_SERVER [ 'HTTP_X_REQUESTED_WITH' ]);
$this -> assertFalse ( $this -> RequestHandler -> isAjax ());
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'XMLHttpRequest' ;
$_SERVER [ 'HTTP_X_PROTOTYPE_VERSION' ] = '1.5' ;
$this -> assertTrue ( $this -> RequestHandler -> isAjax ());
$this -> assertEqual ( $this -> RequestHandler -> getAjaxVersion (), '1.5' );
unset ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ], $_SERVER [ 'HTTP_X_PROTOTYPE_VERSION' ]);
$this -> assertFalse ( $this -> RequestHandler -> isAjax ());
$this -> assertFalse ( $this -> RequestHandler -> getAjaxVersion ());
}
2009-07-24 19:18:37 +00:00
2008-12-10 13:55:58 +00:00
/**
* Tests the detection of various Flash versions
*
* @ access public
* @ return void
*/
function testFlashDetection () {
$_agent = env ( 'HTTP_USER_AGENT' );
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Shockwave Flash' ;
$this -> assertTrue ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Adobe Flash' ;
$this -> assertTrue ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Adobe Flash Player 9' ;
$this -> assertTrue ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Adobe Flash Player 10' ;
$this -> assertTrue ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Shock Flash' ;
$this -> assertFalse ( $this -> RequestHandler -> isFlash ());
$_SERVER [ 'HTTP_USER_AGENT' ] = $_agent ;
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testRequestContentTypes method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRequestContentTypes () {
$_SERVER [ 'REQUEST_METHOD' ] = 'GET' ;
$this -> assertNull ( $this -> RequestHandler -> requestedWith ());
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
$_SERVER [ 'CONTENT_TYPE' ] = 'application/json' ;
$this -> assertEqual ( $this -> RequestHandler -> requestedWith (), 'json' );
$result = $this -> RequestHandler -> requestedWith ( array ( 'json' , 'xml' ));
$this -> assertEqual ( $result , 'json' );
$result = $this -> RequestHandler -> requestedWith ( array ( 'rss' , 'atom' ));
$this -> assertFalse ( $result );
$_SERVER [ 'HTTP_ACCEPT' ] = 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*' ;
$this -> _init ();
$this -> assertTrue ( $this -> RequestHandler -> isXml ());
$this -> assertFalse ( $this -> RequestHandler -> isAtom ());
$this -> assertFalse ( $this -> RequestHandler -> isRSS ());
$_SERVER [ 'HTTP_ACCEPT' ] = 'application/atom+xml,text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*' ;
$this -> _init ();
$this -> assertTrue ( $this -> RequestHandler -> isAtom ());
$this -> assertFalse ( $this -> RequestHandler -> isRSS ());
$_SERVER [ 'HTTP_ACCEPT' ] = 'application/rss+xml,text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*' ;
$this -> _init ();
$this -> assertFalse ( $this -> RequestHandler -> isAtom ());
$this -> assertTrue ( $this -> RequestHandler -> isRSS ());
$this -> assertFalse ( $this -> RequestHandler -> isWap ());
$_SERVER [ 'HTTP_ACCEPT' ] = 'text/vnd.wap.wml,text/html,text/plain,image/png,*/*' ;
$this -> _init ();
$this -> assertTrue ( $this -> RequestHandler -> isWap ());
$_SERVER [ 'HTTP_ACCEPT' ] = 'application/rss+xml,text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*' ;
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testResponseContentType method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testResponseContentType () {
$this -> assertNull ( $this -> RequestHandler -> responseType ());
$this -> assertTrue ( $this -> RequestHandler -> respondAs ( 'atom' ));
$this -> assertEqual ( $this -> RequestHandler -> responseType (), 'atom' );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testMobileDeviceDetection method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMobileDeviceDetection () {
$this -> assertFalse ( $this -> RequestHandler -> isMobile ());
2010-03-14 20:28:38 +00:00
2008-05-30 11:40:08 +00:00
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3' ;
$this -> assertTrue ( $this -> RequestHandler -> isMobile ());
2010-03-14 20:28:38 +00:00
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Some imaginary UA' ;
$this -> RequestHandler -> mobileUA [] = 'imaginary' ;
$this -> assertTrue ( $this -> RequestHandler -> isMobile ());
array_pop ( $this -> RequestHandler -> mobileUA );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testRequestProperties method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRequestProperties () {
$_SERVER [ 'HTTPS' ] = 'on' ;
$this -> assertTrue ( $this -> RequestHandler -> isSSL ());
unset ( $_SERVER [ 'HTTPS' ]);
$this -> assertFalse ( $this -> RequestHandler -> isSSL ());
$_ENV [ 'SCRIPT_URI' ] = 'https://localhost/' ;
$s = $_SERVER ;
$_SERVER = array ();
$this -> assertTrue ( $this -> RequestHandler -> isSSL ());
$_SERVER = $s ;
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testRequestMethod method
2008-06-10 22:38:05 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRequestMethod () {
$_SERVER [ 'REQUEST_METHOD' ] = 'GET' ;
$this -> assertTrue ( $this -> RequestHandler -> isGet ());
$this -> assertFalse ( $this -> RequestHandler -> isPost ());
$this -> assertFalse ( $this -> RequestHandler -> isPut ());
$this -> assertFalse ( $this -> RequestHandler -> isDelete ());
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
$this -> assertFalse ( $this -> RequestHandler -> isGet ());
$this -> assertTrue ( $this -> RequestHandler -> isPost ());
$this -> assertFalse ( $this -> RequestHandler -> isPut ());
$this -> assertFalse ( $this -> RequestHandler -> isDelete ());
$_SERVER [ 'REQUEST_METHOD' ] = 'PUT' ;
$this -> assertFalse ( $this -> RequestHandler -> isGet ());
$this -> assertFalse ( $this -> RequestHandler -> isPost ());
$this -> assertTrue ( $this -> RequestHandler -> isPut ());
$this -> assertFalse ( $this -> RequestHandler -> isDelete ());
$_SERVER [ 'REQUEST_METHOD' ] = 'DELETE' ;
$this -> assertFalse ( $this -> RequestHandler -> isGet ());
$this -> assertFalse ( $this -> RequestHandler -> isPost ());
$this -> assertFalse ( $this -> RequestHandler -> isPut ());
$this -> assertTrue ( $this -> RequestHandler -> isDelete ());
}
2009-07-24 19:18:37 +00:00
2008-06-05 15:20:45 +00:00
/**
* testClientContentPreference method
2008-06-10 22:38:05 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testClientContentPreference () {
$_SERVER [ 'HTTP_ACCEPT' ] = 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/*' ;
$this -> _init ();
$this -> assertNotEqual ( $this -> RequestHandler -> prefers (), 'rss' );
$this -> RequestHandler -> ext = 'rss' ;
$this -> assertEqual ( $this -> RequestHandler -> prefers (), 'rss' );
2008-09-19 19:48:22 +00:00
$this -> assertFalse ( $this -> RequestHandler -> prefers ( 'xml' ));
2009-04-14 13:16:25 +00:00
$this -> assertEqual ( $this -> RequestHandler -> prefers ( array ( 'js' , 'xml' , 'xhtml' )), 'xml' );
2008-09-19 19:48:22 +00:00
$this -> assertTrue ( $this -> RequestHandler -> accepts ( 'xml' ));
2008-05-30 11:40:08 +00:00
$_SERVER [ 'HTTP_ACCEPT' ] = 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5' ;
$this -> _init ();
$this -> assertEqual ( $this -> RequestHandler -> prefers (), 'xml' );
$this -> assertEqual ( $this -> RequestHandler -> accepts ( array ( 'js' , 'xml' , 'html' )), 'xml' );
$this -> assertFalse ( $this -> RequestHandler -> accepts ( array ( 'gif' , 'jpeg' , 'foo' )));
$_SERVER [ 'HTTP_ACCEPT' ] = '*/*;q=0.5' ;
$this -> _init ();
$this -> assertEqual ( $this -> RequestHandler -> prefers (), 'html' );
2008-09-19 19:48:22 +00:00
$this -> assertFalse ( $this -> RequestHandler -> prefers ( 'rss' ));
$this -> assertFalse ( $this -> RequestHandler -> accepts ( 'rss' ));
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-05 15:20:45 +00:00
/**
* testCustomContent method
2008-06-10 22:38:05 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testCustomContent () {
$_SERVER [ 'HTTP_ACCEPT' ] = 'text/x-mobile,text/html;q=0.9,text/plain;q=0.8,*/*;q=0.5' ;
$this -> _init ();
$this -> RequestHandler -> setContent ( 'mobile' , 'text/x-mobile' );
$this -> RequestHandler -> startup ( $this -> Controller );
$this -> assertEqual ( $this -> RequestHandler -> prefers (), 'mobile' );
$this -> _init ();
$this -> RequestHandler -> setContent ( array ( 'mobile' => 'text/x-mobile' ));
$this -> RequestHandler -> startup ( $this -> Controller );
$this -> assertEqual ( $this -> RequestHandler -> prefers (), 'mobile' );
}
2009-07-24 19:18:37 +00:00
2008-06-05 15:20:45 +00:00
/**
* testClientProperties method
2008-06-10 22:38:05 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testClientProperties () {
$_SERVER [ 'HTTP_HOST' ] = 'localhost:80' ;
2009-12-20 17:36:28 +00:00
$this -> assertEqual ( $this -> RequestHandler -> getReferer (), 'localhost' );
2008-05-30 11:40:08 +00:00
$_SERVER [ 'HTTP_HOST' ] = null ;
$_SERVER [ 'HTTP_X_FORWARDED_HOST' ] = 'cakephp.org' ;
2009-12-20 17:36:28 +00:00
$this -> assertEqual ( $this -> RequestHandler -> getReferer (), 'cakephp.org' );
2008-05-30 11:40:08 +00:00
$_SERVER [ 'HTTP_X_FORWARDED_FOR' ] = '192.168.1.5, 10.0.1.1, proxy.com' ;
$_SERVER [ 'HTTP_CLIENT_IP' ] = '192.168.1.2' ;
$_SERVER [ 'REMOTE_ADDR' ] = '192.168.1.3' ;
2008-12-25 22:02:36 +00:00
$this -> assertEqual ( $this -> RequestHandler -> getClientIP ( false ), '192.168.1.5' );
$this -> assertEqual ( $this -> RequestHandler -> getClientIP (), '192.168.1.2' );
2008-05-30 11:40:08 +00:00
unset ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]);
$this -> assertEqual ( $this -> RequestHandler -> getClientIP (), '192.168.1.2' );
unset ( $_SERVER [ 'HTTP_CLIENT_IP' ]);
$this -> assertEqual ( $this -> RequestHandler -> getClientIP (), '192.168.1.3' );
$_SERVER [ 'HTTP_CLIENTADDRESS' ] = '10.0.1.2, 10.0.1.1' ;
$this -> assertEqual ( $this -> RequestHandler -> getClientIP (), '10.0.1.2' );
}
2009-07-24 19:18:37 +00:00
2009-03-01 06:11:03 +00:00
/**
* test that ajax requests involving redirects trigger requestAction instead .
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-03-01 06:11:03 +00:00
function testAjaxRedirectAsRequestAction () {
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'XMLHttpRequest' ;
$this -> _init ();
2009-11-03 22:19:02 +00:00
App :: build ( array (
'views' => array ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS )
), true );
2009-03-01 06:11:03 +00:00
$this -> Controller -> RequestHandler = new NoStopRequestHandler ( $this );
$this -> Controller -> RequestHandler -> expectOnce ( '_stop' );
ob_start ();
$this -> Controller -> RequestHandler -> beforeRedirect (
$this -> Controller , array ( 'controller' => 'request_handler_test' , 'action' => 'destination' )
);
$result = ob_get_clean ();
$this -> assertPattern ( '/posts index/' , $result , 'RequestAction redirect failed.' );
unset ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ]);
2009-11-03 22:19:02 +00:00
App :: build ();
2009-03-01 06:11:03 +00:00
}
2010-02-03 01:39:05 +00:00
2010-06-08 03:43:35 +00:00
/**
* test that ajax requests involving redirects don ' t force no layout
* this would cause the ajax layout to not be rendered .
*
* @ return void
*/
function testAjaxRedirectAsRequestActionStillRenderingLayout () {
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'XMLHttpRequest' ;
$this -> _init ();
App :: build ( array (
'views' => array ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS )
), true );
$this -> Controller -> RequestHandler = new NoStopRequestHandler ( $this );
$this -> Controller -> RequestHandler -> expectOnce ( '_stop' );
ob_start ();
$this -> Controller -> RequestHandler -> beforeRedirect (
$this -> Controller , array ( 'controller' => 'request_handler_test' , 'action' => 'ajax2_layout' )
);
$result = ob_get_clean ();
$this -> assertPattern ( '/posts index/' , $result , 'RequestAction redirect failed.' );
$this -> assertPattern ( '/Ajax!/' , $result , 'Layout was not rendered.' );
unset ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ]);
App :: build ();
}
2010-02-20 06:32:04 +00:00
/**
* test that the beforeRedirect callback properly converts
* array urls into their correct string ones , and adds base => false so
* the correct urls are generated .
*
* @ link http :// cakephp . lighthouseapp . com / projects / 42648 - cakephp - 1 x / tickets / 276
* @ return void
*/
function testBeforeRedirectCallbackWithArrayUrl () {
$_SERVER [ 'HTTP_X_REQUESTED_WITH' ] = 'XMLHttpRequest' ;
2010-05-04 02:07:13 +00:00
2010-02-20 06:32:04 +00:00
Router :: setRequestInfo ( array (
2010-06-08 03:43:35 +00:00
array ( 'plugin' => null , 'controller' => 'accounts' , 'action' => 'index' , 'pass' => array (), 'named' => array (), 'form' => array (), 'url' => array ( 'url' => 'accounts/' )),
2010-02-20 06:32:04 +00:00
array ( 'base' => '/officespace' , 'here' => '/officespace/accounts/' , 'webroot' => '/officespace/' )
));
$RequestHandler =& new NoStopRequestHandler ();
ob_start ();
$RequestHandler -> beforeRedirect (
$this -> Controller ,
array ( 'controller' => 'request_handler_test' , 'action' => 'param_method' , 'first' , 'second' )
);
$result = ob_get_clean ();
$this -> assertEqual ( $result , 'one: first two: second' );
2010-05-04 02:07:13 +00:00
}
/**
* assure that beforeRedirect with a status code will correctly set the status header
*
* @ return void
*/
function testBeforeRedirectCallingHeader () {
$controller =& new RequestHandlerMockController ();
$RequestHandler =& new NoStopRequestHandler ();
$controller -> expectOnce ( 'header' , array ( 'HTTP/1.1 403 Forbidden' ));
ob_start ();
$RequestHandler -> beforeRedirect ( $controller , 'request_handler_test/param_method/first/second' , 403 );
$result = ob_get_clean ();
2009-03-01 06:11:03 +00:00
}
2010-02-03 01:39:05 +00:00
2008-05-30 11:40:08 +00:00
}