pictcode / lib / Cake / Test / Case / TestSuite / ControllerTestCaseTest.php @ 40928d1c
履歴 | 表示 | アノテート | ダウンロード (17.061 KB)
| 1 | 635eef61 | spyder1211 | <?php
|
|---|---|---|---|
| 2 | /**
|
||
| 3 | * ControllerTestCaseTest file
|
||
| 4 | *
|
||
| 5 | * Test Case for ControllerTestCase class
|
||
| 6 | *
|
||
| 7 | * CakePHP : Rapid Development Framework (http://cakephp.org)
|
||
| 8 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
| 9 | *
|
||
| 10 | * Licensed under The MIT License
|
||
| 11 | * For full copyright and license information, please see the LICENSE.txt
|
||
| 12 | * Redistributions of files must retain the above copyright notice.
|
||
| 13 | *
|
||
| 14 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
| 15 | * @link http://cakephp.org CakePHP Project
|
||
| 16 | * @package Cake.Test.Case.TestSuite
|
||
| 17 | * @since CakePHP v 2.0
|
||
| 18 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
| 19 | */
|
||
| 20 | |||
| 21 | App::uses('Controller', 'Controller'); |
||
| 22 | App::uses('Model', 'Model'); |
||
| 23 | App::uses('AppModel', 'Model'); |
||
| 24 | App::uses('CakeHtmlReporter', 'TestSuite/Reporter'); |
||
| 25 | |||
| 26 | require_once dirname(dirname(__FILE__)) . DS . 'Model' . DS . 'models.php'; |
||
| 27 | |||
| 28 | if (!class_exists('AppController', false)) { |
||
| 29 | /**
|
||
| 30 | * AppController class
|
||
| 31 | *
|
||
| 32 | * @package Cake.Test.Case.TestSuite
|
||
| 33 | */
|
||
| 34 | class AppController extends Controller { |
||
| 35 | |||
| 36 | /**
|
||
| 37 | * helpers property
|
||
| 38 | *
|
||
| 39 | * @var array
|
||
| 40 | */
|
||
| 41 | public $helpers = array('Html'); |
||
| 42 | |||
| 43 | /**
|
||
| 44 | * uses property
|
||
| 45 | *
|
||
| 46 | * @var array
|
||
| 47 | */
|
||
| 48 | public $uses = array('ControllerPost'); |
||
| 49 | |||
| 50 | /**
|
||
| 51 | * components property
|
||
| 52 | *
|
||
| 53 | * @var array
|
||
| 54 | */
|
||
| 55 | public $components = array('Cookie'); |
||
| 56 | |||
| 57 | } |
||
| 58 | } elseif (!defined('APP_CONTROLLER_EXISTS')) { |
||
| 59 | define('APP_CONTROLLER_EXISTS', true); |
||
| 60 | } |
||
| 61 | |||
| 62 | /**
|
||
| 63 | * PostsController class
|
||
| 64 | */
|
||
| 65 | if (!class_exists('PostsController')) { |
||
| 66 | |||
| 67 | /**
|
||
| 68 | * Class PostsController
|
||
| 69 | *
|
||
| 70 | * @package Cake.Test.Case.TestSuite
|
||
| 71 | */
|
||
| 72 | class PostsController extends AppController { |
||
| 73 | |||
| 74 | /**
|
||
| 75 | * Components array
|
||
| 76 | *
|
||
| 77 | * @var array
|
||
| 78 | */
|
||
| 79 | public $components = array( |
||
| 80 | 'RequestHandler',
|
||
| 81 | 'Email',
|
||
| 82 | 'Auth'
|
||
| 83 | ); |
||
| 84 | } |
||
| 85 | } |
||
| 86 | |||
| 87 | /**
|
||
| 88 | * ControllerTestCaseTest controller
|
||
| 89 | *
|
||
| 90 | * @package Cake.Test.Case.TestSuite
|
||
| 91 | */
|
||
| 92 | class ControllerTestCaseTestController extends AppController { |
||
| 93 | |||
| 94 | /**
|
||
| 95 | * Uses array
|
||
| 96 | *
|
||
| 97 | * @param array
|
||
| 98 | */
|
||
| 99 | public $uses = array('TestPlugin.TestPluginComment'); |
||
| 100 | |||
| 101 | } |
||
| 102 | |||
| 103 | /**
|
||
| 104 | * ControllerTestCaseTest
|
||
| 105 | *
|
||
| 106 | * @package Cake.Test.Case.TestSuite
|
||
| 107 | */
|
||
| 108 | class ControllerTestCaseTest extends CakeTestCase { |
||
| 109 | |||
| 110 | /**
|
||
| 111 | * fixtures property
|
||
| 112 | *
|
||
| 113 | * @var array
|
||
| 114 | */
|
||
| 115 | public $fixtures = array('core.post', 'core.author', 'core.test_plugin_comment'); |
||
| 116 | |||
| 117 | /**
|
||
| 118 | * reset environment.
|
||
| 119 | *
|
||
| 120 | * @return void
|
||
| 121 | */
|
||
| 122 | public function setUp() { |
||
| 123 | parent::setUp();
|
||
| 124 | App::build(array( |
||
| 125 | 'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), |
||
| 126 | 'Controller' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Controller' . DS), |
||
| 127 | 'Model' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS), |
||
| 128 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
| 129 | ), App::RESET); |
||
| 130 | CakePlugin::load(array('TestPlugin', 'TestPluginTwo')); |
||
| 131 | $this->Case = $this->getMockForAbstractClass('ControllerTestCase'); |
||
| 132 | Router::reload();
|
||
| 133 | } |
||
| 134 | |||
| 135 | /**
|
||
| 136 | * tearDown
|
||
| 137 | *
|
||
| 138 | * @return void
|
||
| 139 | */
|
||
| 140 | public function tearDown() { |
||
| 141 | parent::tearDown();
|
||
| 142 | CakePlugin::unload();
|
||
| 143 | $this->Case->controller = null; |
||
| 144 | } |
||
| 145 | |||
| 146 | /**
|
||
| 147 | * Test that ControllerTestCase::generate() creates mock objects correctly
|
||
| 148 | *
|
||
| 149 | * @return void
|
||
| 150 | */
|
||
| 151 | public function testGenerate() { |
||
| 152 | if (defined('APP_CONTROLLER_EXISTS')) { |
||
| 153 | $this->markTestSkipped('AppController exists, cannot run.'); |
||
| 154 | } |
||
| 155 | $Posts = $this->Case->generate('Posts'); |
||
| 156 | $this->assertEquals('Posts', $Posts->name); |
||
| 157 | $this->assertEquals('Post', $Posts->modelClass); |
||
| 158 | $this->assertNull($Posts->response->send()); |
||
| 159 | |||
| 160 | $Posts = $this->Case->generate('Posts', array( |
||
| 161 | 'methods' => array( |
||
| 162 | 'render'
|
||
| 163 | ) |
||
| 164 | )); |
||
| 165 | $this->assertNull($Posts->render('index')); |
||
| 166 | |||
| 167 | $Posts = $this->Case->generate('Posts', array( |
||
| 168 | 'models' => array('Post'), |
||
| 169 | 'components' => array('RequestHandler') |
||
| 170 | )); |
||
| 171 | |||
| 172 | $this->assertInstanceOf('Post', $Posts->Post); |
||
| 173 | $this->assertNull($Posts->Post->save(array())); |
||
| 174 | $this->assertNull($Posts->Post->find('all')); |
||
| 175 | $this->assertEquals('posts', $Posts->Post->useTable); |
||
| 176 | $this->assertNull($Posts->RequestHandler->isAjax()); |
||
| 177 | |||
| 178 | $Posts = $this->Case->generate('Posts', array( |
||
| 179 | 'models' => array( |
||
| 180 | 'Post' => true |
||
| 181 | ) |
||
| 182 | )); |
||
| 183 | $this->assertNull($Posts->Post->save(array())); |
||
| 184 | $this->assertNull($Posts->Post->find('all')); |
||
| 185 | |||
| 186 | $Posts = $this->Case->generate('Posts', array( |
||
| 187 | 'models' => array( |
||
| 188 | 'Post' => array('save'), |
||
| 189 | ) |
||
| 190 | )); |
||
| 191 | $this->assertNull($Posts->Post->save(array())); |
||
| 192 | $this->assertInternalType('array', $Posts->Post->find('all')); |
||
| 193 | |||
| 194 | $Posts = $this->Case->generate('Posts', array( |
||
| 195 | 'models' => array('Post'), |
||
| 196 | 'components' => array( |
||
| 197 | 'RequestHandler' => array('isPut'), |
||
| 198 | 'Email' => array('send'), |
||
| 199 | 'Session'
|
||
| 200 | ) |
||
| 201 | )); |
||
| 202 | $Posts->RequestHandler->expects($this->once()) |
||
| 203 | ->method('isPut')
|
||
| 204 | ->will($this->returnValue(true)); |
||
| 205 | $this->assertTrue($Posts->RequestHandler->isPut()); |
||
| 206 | |||
| 207 | $Posts->Auth->Session->expects($this->any()) |
||
| 208 | ->method('write')
|
||
| 209 | ->will($this->returnValue('written!')); |
||
| 210 | $this->assertEquals('written!', $Posts->Auth->Session->write('something')); |
||
| 211 | } |
||
| 212 | |||
| 213 | /**
|
||
| 214 | * testGenerateWithComponentConfig
|
||
| 215 | *
|
||
| 216 | * @return void
|
||
| 217 | */
|
||
| 218 | public function testGenerateWithComponentConfig() { |
||
| 219 | $Tests = $this->Case->generate('TestConfigs', array( |
||
| 220 | )); |
||
| 221 | |||
| 222 | $expected = array('some' => 'config'); |
||
| 223 | $settings = array_intersect_key($Tests->RequestHandler->settings, array('some' => 'foo')); |
||
| 224 | $this->assertSame($expected, $settings, 'A mocked component should have the same config as an unmocked component'); |
||
| 225 | |||
| 226 | $Tests = $this->Case->generate('TestConfigs', array( |
||
| 227 | 'components' => array( |
||
| 228 | 'RequestHandler' => array('isPut') |
||
| 229 | ) |
||
| 230 | )); |
||
| 231 | |||
| 232 | $expected = array('some' => 'config'); |
||
| 233 | $settings = array_intersect_key($Tests->RequestHandler->settings, array('some' => 'foo')); |
||
| 234 | $this->assertSame($expected, $settings, 'A mocked component should have the same config as an unmocked component'); |
||
| 235 | } |
||
| 236 | |||
| 237 | /**
|
||
| 238 | * Tests ControllerTestCase::generate() using classes from plugins
|
||
| 239 | *
|
||
| 240 | * @return void
|
||
| 241 | */
|
||
| 242 | public function testGenerateWithPlugin() { |
||
| 243 | $Tests = $this->Case->generate('TestPlugin.Tests', array( |
||
| 244 | 'models' => array( |
||
| 245 | 'TestPlugin.TestPluginComment'
|
||
| 246 | ), |
||
| 247 | 'components' => array( |
||
| 248 | 'TestPlugin.Plugins'
|
||
| 249 | ) |
||
| 250 | )); |
||
| 251 | $this->assertEquals('Tests', $Tests->name); |
||
| 252 | $this->assertInstanceOf('PluginsComponent', $Tests->Plugins); |
||
| 253 | |||
| 254 | $result = ClassRegistry::init('TestPlugin.TestPluginComment'); |
||
| 255 | $this->assertInstanceOf('TestPluginComment', $result); |
||
| 256 | |||
| 257 | $Tests = $this->Case->generate('ControllerTestCaseTest', array( |
||
| 258 | 'models' => array( |
||
| 259 | 'TestPlugin.TestPluginComment' => array('save') |
||
| 260 | ) |
||
| 261 | )); |
||
| 262 | $this->assertInstanceOf('TestPluginComment', $Tests->TestPluginComment); |
||
| 263 | $Tests->TestPluginComment->expects($this->at(0)) |
||
| 264 | ->method('save')
|
||
| 265 | ->will($this->returnValue(true)); |
||
| 266 | $Tests->TestPluginComment->expects($this->at(1)) |
||
| 267 | ->method('save')
|
||
| 268 | ->will($this->returnValue(false)); |
||
| 269 | $this->assertTrue($Tests->TestPluginComment->save(array())); |
||
| 270 | $this->assertFalse($Tests->TestPluginComment->save(array())); |
||
| 271 | } |
||
| 272 | |||
| 273 | /**
|
||
| 274 | * Tests testAction
|
||
| 275 | *
|
||
| 276 | * @return void
|
||
| 277 | */
|
||
| 278 | public function testTestAction() { |
||
| 279 | $this->Case->generate('TestsApps'); |
||
| 280 | $this->Case->testAction('/tests_apps/index'); |
||
| 281 | $this->assertInternalType('array', $this->Case->controller->viewVars); |
||
| 282 | |||
| 283 | $this->Case->testAction('/tests_apps/set_action'); |
||
| 284 | $results = $this->Case->controller->viewVars; |
||
| 285 | $expected = array( |
||
| 286 | 'var' => 'string' |
||
| 287 | ); |
||
| 288 | $this->assertEquals($expected, $results); |
||
| 289 | |||
| 290 | $result = $this->Case->controller->response->body(); |
||
| 291 | $this->assertRegExp('/This is the TestsAppsController index view/', $result); |
||
| 292 | |||
| 293 | $Controller = $this->Case->generate('TestsApps'); |
||
| 294 | $this->Case->testAction('/tests_apps/redirect_to'); |
||
| 295 | $results = $this->Case->headers; |
||
| 296 | $expected = array( |
||
| 297 | 'Location' => 'http://cakephp.org' |
||
| 298 | ); |
||
| 299 | $this->assertEquals($expected, $results); |
||
| 300 | $this->assertSame(302, $Controller->response->statusCode()); |
||
| 301 | } |
||
| 302 | |||
| 303 | /**
|
||
| 304 | * Test array URLs with testAction()
|
||
| 305 | *
|
||
| 306 | * @return void
|
||
| 307 | */
|
||
| 308 | public function testTestActionArrayUrls() { |
||
| 309 | $this->Case->generate('TestsApps'); |
||
| 310 | $this->Case->testAction(array('controller' => 'tests_apps', 'action' => 'index')); |
||
| 311 | $this->assertInternalType('array', $this->Case->controller->viewVars); |
||
| 312 | } |
||
| 313 | |||
| 314 | /**
|
||
| 315 | * Test that file responses don't trigger errors.
|
||
| 316 | *
|
||
| 317 | * @return void
|
||
| 318 | */
|
||
| 319 | public function testActionWithFile() { |
||
| 320 | $Controller = $this->Case->generate('TestsApps'); |
||
| 321 | $this->Case->testAction('/tests_apps/file'); |
||
| 322 | $this->assertArrayHasKey('Content-Disposition', $Controller->response->header()); |
||
| 323 | $this->assertArrayHasKey('Content-Length', $Controller->response->header()); |
||
| 324 | } |
||
| 325 | |||
| 326 | /**
|
||
| 327 | * Make sure testAction() can hit plugin controllers.
|
||
| 328 | *
|
||
| 329 | * @return void
|
||
| 330 | */
|
||
| 331 | public function testTestActionWithPlugin() { |
||
| 332 | $this->Case->generate('TestPlugin.Tests'); |
||
| 333 | $this->Case->testAction('/test_plugin/tests/index'); |
||
| 334 | $this->assertEquals('It is a variable', $this->Case->controller->viewVars['test_value']); |
||
| 335 | } |
||
| 336 | |||
| 337 | /**
|
||
| 338 | * Tests using loaded routes during tests
|
||
| 339 | *
|
||
| 340 | * @return void
|
||
| 341 | */
|
||
| 342 | public function testUseRoutes() { |
||
| 343 | Router::connect('/:controller/:action/*'); |
||
| 344 | include CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS . 'routes.php'; |
||
| 345 | |||
| 346 | $controller = $this->Case->generate('TestsApps'); |
||
| 347 | $controller->Components->load('RequestHandler'); |
||
| 348 | $result = $this->Case->testAction('/tests_apps/index.json', array('return' => 'contents')); |
||
| 349 | $result = json_decode($result, true); |
||
| 350 | $expected = array('cakephp' => 'cool'); |
||
| 351 | $this->assertEquals($expected, $result); |
||
| 352 | |||
| 353 | include CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS . 'routes.php'; |
||
| 354 | $result = $this->Case->testAction('/some_alias'); |
||
| 355 | $this->assertEquals(5, $result); |
||
| 356 | } |
||
| 357 | |||
| 358 | /**
|
||
| 359 | * Tests not using loaded routes during tests
|
||
| 360 | *
|
||
| 361 | * @expectedException MissingActionException
|
||
| 362 | * @return void
|
||
| 363 | */
|
||
| 364 | public function testSkipRoutes() { |
||
| 365 | Router::connect('/:controller/:action/*'); |
||
| 366 | include CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS . 'routes.php'; |
||
| 367 | |||
| 368 | $this->Case->loadRoutes = false; |
||
| 369 | $this->Case->testAction('/tests_apps/missing_action.json', array('return' => 'view')); |
||
| 370 | } |
||
| 371 | |||
| 372 | /**
|
||
| 373 | * Tests backwards compatibility with setting the return type
|
||
| 374 | *
|
||
| 375 | * @return void
|
||
| 376 | */
|
||
| 377 | public function testBCSetReturn() { |
||
| 378 | $this->Case->autoMock = true; |
||
| 379 | |||
| 380 | $result = $this->Case->testAction('/tests_apps/some_method'); |
||
| 381 | $this->assertEquals(5, $result); |
||
| 382 | |||
| 383 | $data = array('var' => 'set'); |
||
| 384 | $result = $this->Case->testAction('/tests_apps_posts/post_var', array( |
||
| 385 | 'data' => $data, |
||
| 386 | 'return' => 'vars' |
||
| 387 | )); |
||
| 388 | $this->assertEquals($data, $result['data']); |
||
| 389 | |||
| 390 | $result = $this->Case->testAction('/tests_apps/set_action', array( |
||
| 391 | 'return' => 'view' |
||
| 392 | )); |
||
| 393 | $this->assertEquals('This is the TestsAppsController index view string', $result); |
||
| 394 | |||
| 395 | $result = $this->Case->testAction('/tests_apps/set_action', array( |
||
| 396 | 'return' => 'contents' |
||
| 397 | )); |
||
| 398 | $this->assertRegExp('/<html/', $result); |
||
| 399 | $this->assertRegExp('/This is the TestsAppsController index view/', $result); |
||
| 400 | $this->assertRegExp('/<\/html>/', $result); |
||
| 401 | } |
||
| 402 | |||
| 403 | /**
|
||
| 404 | * Tests sending POST data to testAction
|
||
| 405 | *
|
||
| 406 | * @return void
|
||
| 407 | */
|
||
| 408 | public function testTestActionPostData() { |
||
| 409 | $this->Case->autoMock = true; |
||
| 410 | |||
| 411 | $data = array( |
||
| 412 | 'Post' => array( |
||
| 413 | 'name' => 'Some Post' |
||
| 414 | ) |
||
| 415 | ); |
||
| 416 | $this->Case->testAction('/tests_apps_posts/post_var', array( |
||
| 417 | 'data' => $data |
||
| 418 | )); |
||
| 419 | $this->assertEquals($this->Case->controller->viewVars['data'], $data); |
||
| 420 | $this->assertEquals($this->Case->controller->data, $data); |
||
| 421 | |||
| 422 | $this->Case->testAction('/tests_apps_posts/post_var/named:param', array( |
||
| 423 | 'data' => $data |
||
| 424 | )); |
||
| 425 | $expected = array( |
||
| 426 | 'named' => 'param' |
||
| 427 | ); |
||
| 428 | $this->assertEquals($expected, $this->Case->controller->request->named); |
||
| 429 | $this->assertEquals($this->Case->controller->data, $data); |
||
| 430 | |||
| 431 | $result = $this->Case->testAction('/tests_apps_posts/post_var', array( |
||
| 432 | 'return' => 'vars', |
||
| 433 | 'method' => 'post', |
||
| 434 | 'data' => array( |
||
| 435 | 'name' => 'is jonas', |
||
| 436 | 'pork' => 'and beans', |
||
| 437 | ) |
||
| 438 | )); |
||
| 439 | $this->assertEquals(array('name', 'pork'), array_keys($result['data'])); |
||
| 440 | |||
| 441 | $result = $this->Case->testAction('/tests_apps_posts/add', array('return' => 'vars')); |
||
| 442 | $this->assertTrue(array_key_exists('posts', $result)); |
||
| 443 | $this->assertEquals(4, count($result['posts'])); |
||
| 444 | $this->assertTrue($this->Case->controller->request->is('post')); |
||
| 445 | } |
||
| 446 | |||
| 447 | /**
|
||
| 448 | * Tests sending GET data to testAction
|
||
| 449 | *
|
||
| 450 | * @return void
|
||
| 451 | */
|
||
| 452 | public function testTestActionGetData() { |
||
| 453 | $this->Case->autoMock = true; |
||
| 454 | |||
| 455 | $this->Case->testAction('/tests_apps_posts/url_var', array( |
||
| 456 | 'method' => 'get', |
||
| 457 | 'data' => array( |
||
| 458 | 'some' => 'var', |
||
| 459 | 'lackof' => 'creativity' |
||
| 460 | ) |
||
| 461 | )); |
||
| 462 | $this->assertEquals('var', $this->Case->controller->request->query['some']); |
||
| 463 | $this->assertEquals('creativity', $this->Case->controller->request->query['lackof']); |
||
| 464 | |||
| 465 | $result = $this->Case->testAction('/tests_apps_posts/url_var/var1:value1/var2:val2', array( |
||
| 466 | 'return' => 'vars', |
||
| 467 | 'method' => 'get', |
||
| 468 | )); |
||
| 469 | $this->assertEquals(array('var1', 'var2'), array_keys($result['params']['named'])); |
||
| 470 | |||
| 471 | $result = $this->Case->testAction('/tests_apps_posts/url_var/gogo/val2', array( |
||
| 472 | 'return' => 'vars', |
||
| 473 | 'method' => 'get', |
||
| 474 | )); |
||
| 475 | $this->assertEquals(array('gogo', 'val2'), $result['params']['pass']); |
||
| 476 | |||
| 477 | $this->Case->testAction('/tests_apps_posts/url_var', array( |
||
| 478 | 'return' => 'vars', |
||
| 479 | 'method' => 'get', |
||
| 480 | 'data' => array( |
||
| 481 | 'red' => 'health', |
||
| 482 | 'blue' => 'mana' |
||
| 483 | ) |
||
| 484 | )); |
||
| 485 | $query = $this->Case->controller->request->query; |
||
| 486 | $this->assertTrue(isset($query['red'])); |
||
| 487 | $this->assertTrue(isset($query['blue'])); |
||
| 488 | } |
||
| 489 | |||
| 490 | /**
|
||
| 491 | * Test that REST actions with XML/JSON input work.
|
||
| 492 | *
|
||
| 493 | * @return void
|
||
| 494 | */
|
||
| 495 | public function testTestActionJsonData() { |
||
| 496 | $result = $this->Case->testAction('/tests_apps_posts/input_data', array( |
||
| 497 | 'return' => 'vars', |
||
| 498 | 'method' => 'post', |
||
| 499 | 'data' => '{"key":"value","json":true}' |
||
| 500 | )); |
||
| 501 | $this->assertEquals('value', $result['data']['key']); |
||
| 502 | $this->assertTrue($result['data']['json']); |
||
| 503 | } |
||
| 504 | |||
| 505 | /**
|
||
| 506 | * Tests autoMock ability
|
||
| 507 | *
|
||
| 508 | * @return void
|
||
| 509 | */
|
||
| 510 | public function testAutoMock() { |
||
| 511 | $this->Case->autoMock = true; |
||
| 512 | $this->Case->testAction('/tests_apps/set_action'); |
||
| 513 | $results = $this->Case->controller->viewVars; |
||
| 514 | $expected = array( |
||
| 515 | 'var' => 'string' |
||
| 516 | ); |
||
| 517 | $this->assertEquals($expected, $results); |
||
| 518 | } |
||
| 519 | |||
| 520 | /**
|
||
| 521 | * Test using testAction and not mocking
|
||
| 522 | *
|
||
| 523 | * @return void
|
||
| 524 | */
|
||
| 525 | public function testNoMocking() { |
||
| 526 | $result = $this->Case->testAction('/tests_apps/some_method'); |
||
| 527 | $this->Case->assertEquals(5, $result); |
||
| 528 | |||
| 529 | $data = array('var' => 'set'); |
||
| 530 | $result = $this->Case->testAction('/tests_apps_posts/post_var', array( |
||
| 531 | 'data' => $data, |
||
| 532 | 'return' => 'vars' |
||
| 533 | )); |
||
| 534 | $this->assertEquals($data, $result['data']); |
||
| 535 | |||
| 536 | $result = $this->Case->testAction('/tests_apps/set_action', array( |
||
| 537 | 'return' => 'view' |
||
| 538 | )); |
||
| 539 | $this->assertEquals('This is the TestsAppsController index view string', $result); |
||
| 540 | |||
| 541 | $result = $this->Case->testAction('/tests_apps/set_action', array( |
||
| 542 | 'return' => 'contents' |
||
| 543 | )); |
||
| 544 | $this->assertRegExp('/<html/', $result); |
||
| 545 | $this->assertRegExp('/This is the TestsAppsController index view/', $result); |
||
| 546 | $this->assertRegExp('/<\/html>/', $result); |
||
| 547 | } |
||
| 548 | |||
| 549 | /**
|
||
| 550 | * Test that controllers don't get reused.
|
||
| 551 | *
|
||
| 552 | * @return void
|
||
| 553 | */
|
||
| 554 | public function testNoControllerReuse() { |
||
| 555 | $this->Case->autoMock = true; |
||
| 556 | $result = $this->Case->testAction('/tests_apps/index', array( |
||
| 557 | 'data' => array('var' => 'first call'), |
||
| 558 | 'method' => 'get', |
||
| 559 | 'return' => 'contents', |
||
| 560 | )); |
||
| 561 | $this->assertContains('<html', $result); |
||
| 562 | $this->assertContains('This is the TestsAppsController index view', $result); |
||
| 563 | $this->assertContains('first call', $result); |
||
| 564 | $this->assertContains('</html>', $result); |
||
| 565 | |||
| 566 | $result = $this->Case->testAction('/tests_apps/index', array( |
||
| 567 | 'data' => array('var' => 'second call'), |
||
| 568 | 'method' => 'get', |
||
| 569 | 'return' => 'contents' |
||
| 570 | )); |
||
| 571 | $this->assertContains('second call', $result); |
||
| 572 | |||
| 573 | $result = $this->Case->testAction('/tests_apps/index', array( |
||
| 574 | 'data' => array('var' => 'third call'), |
||
| 575 | 'method' => 'get', |
||
| 576 | 'return' => 'contents' |
||
| 577 | )); |
||
| 578 | $this->assertContains('third call', $result); |
||
| 579 | } |
||
| 580 | |||
| 581 | /**
|
||
| 582 | * Test that multiple calls to redirect in the same test method don't cause issues.
|
||
| 583 | *
|
||
| 584 | * @return void
|
||
| 585 | */
|
||
| 586 | public function testTestActionWithMultipleRedirect() { |
||
| 587 | $this->Case->generate('TestsApps'); |
||
| 588 | |||
| 589 | $options = array('method' => 'get'); |
||
| 590 | $this->Case->testAction('/tests_apps/redirect_to', $options); |
||
| 591 | $this->Case->testAction('/tests_apps/redirect_to', $options); |
||
| 592 | } |
||
| 593 | |||
| 594 | /**
|
||
| 595 | * Tests that Components storing response or request objects internally during construct
|
||
| 596 | * will always have a fresh reference to those object available
|
||
| 597 | *
|
||
| 598 | * @return void
|
||
| 599 | * @see https://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/2705-requesthandler-weird-behavior
|
||
| 600 | */
|
||
| 601 | public function testComponentsSameRequestAndResponse() { |
||
| 602 | $this->Case->generate('TestsApps'); |
||
| 603 | $options = array('method' => 'get'); |
||
| 604 | $this->Case->testAction('/tests_apps/index', $options); |
||
| 605 | $this->assertSame($this->Case->controller->response, $this->Case->controller->RequestHandler->response); |
||
| 606 | $this->assertSame($this->Case->controller->request, $this->Case->controller->RequestHandler->request); |
||
| 607 | } |
||
| 608 | |||
| 609 | /**
|
||
| 610 | * Test that testAction() doesn't destroy data in GET & POST
|
||
| 611 | *
|
||
| 612 | * @return void
|
||
| 613 | */
|
||
| 614 | public function testRestoreGetPost() { |
||
| 615 | $restored = array('new' => 'value'); |
||
| 616 | |||
| 617 | $_GET = $restored; |
||
| 618 | $_POST = $restored; |
||
| 619 | |||
| 620 | $this->Case->generate('TestsApps'); |
||
| 621 | $options = array('method' => 'get'); |
||
| 622 | $this->Case->testAction('/tests_apps/index', $options); |
||
| 623 | |||
| 624 | $this->assertEquals($restored, $_GET); |
||
| 625 | $this->assertEquals($restored, $_POST); |
||
| 626 | } |
||
| 627 | |||
| 628 | } |