AjaxComponentTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. App::uses('AjaxComponent', 'Tools.Controller/Component');
  3. App::uses('Component', 'Controller');
  4. App::uses('Controller', 'Controller');
  5. App::uses('AppModel', 'Model');
  6. /**
  7. */
  8. class AjaxComponentTest extends CakeTestCase {
  9. public $fixtures = array('core.cake_session', 'plugin.tools.tools_user', 'plugin.tools.role');
  10. public function setUp() {
  11. parent::setUp();
  12. Configure::delete('Ajax');
  13. $this->Controller = new AjaxComponentTestController(new CakeRequest, new CakeResponse);
  14. $this->Controller->constructClasses();
  15. }
  16. /**
  17. * AjaxComponentTest::testNonAjax()
  18. *
  19. * @return void
  20. */
  21. public function testNonAjax() {
  22. $this->Controller->startupProcess();
  23. $this->assertFalse($this->Controller->Components->Ajax->respondAsAjax);
  24. }
  25. /**
  26. * AjaxComponentTest::testDefaults()
  27. *
  28. * @return void
  29. */
  30. public function testDefaults() {
  31. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  32. $this->Controller->startupProcess();
  33. $this->assertTrue($this->Controller->Components->Ajax->respondAsAjax);
  34. $this->Controller->Session->setFlash('A message', 'custom');
  35. $session = $this->Controller->Session->read('Message.flash');
  36. $expected = array(
  37. 'message' => 'A message',
  38. 'element' => 'custom',
  39. 'params' => array()
  40. );
  41. $this->assertEquals($expected, $session);
  42. $this->Controller->Components->Ajax->beforeRender($this->Controller);
  43. $this->assertEquals('Tools.Ajax', $this->Controller->viewClass);
  44. $this->assertEquals($expected, $this->Controller->viewVars['_message']);
  45. $session = $this->Controller->Session->read('Message.flash');
  46. $this->assertNull($session);
  47. $this->Controller->redirect('/');
  48. $this->assertSame(array(), $this->Controller->response->header());
  49. $expected = array(
  50. 'url' => Router::url('/', true),
  51. 'status' => null,
  52. 'exit' => true
  53. );
  54. $this->assertEquals($expected, $this->Controller->viewVars['_redirect']);
  55. }
  56. /**
  57. * AjaxComponentTest::testAutoDetectOnFalse()
  58. *
  59. * @return void
  60. */
  61. public function testAutoDetectOnFalse() {
  62. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  63. $this->Controller->Components->unload('Ajax');
  64. $this->Controller->Components->load('Tools.Ajax', array('autoDetect' => false));
  65. $this->Controller->startupProcess();
  66. $this->assertFalse($this->Controller->Components->Ajax->respondAsAjax);
  67. }
  68. /**
  69. * AjaxComponentTest::testAutoDetectOnFalseViaConfig()
  70. *
  71. * @return void
  72. */
  73. public function testAutoDetectOnFalseViaConfig() {
  74. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  75. Configure::write('Ajax.autoDetect', false);
  76. $this->Controller->Components->unload('Ajax');
  77. $this->Controller->Components->load('Tools.Ajax');
  78. $this->Controller->startupProcess();
  79. $this->assertFalse($this->Controller->Components->Ajax->respondAsAjax);
  80. }
  81. /**
  82. * AjaxComponentTest::testToolsMultiMessages()
  83. *
  84. * @return void
  85. */
  86. public function testToolsMultiMessages() {
  87. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  88. Configure::write('Ajax.flashKey', 'messages');
  89. $this->Controller->Components->unload('Ajax');
  90. $this->Controller->Components->load('Tools.Ajax');
  91. $this->Controller->startupProcess();
  92. $this->assertTrue($this->Controller->Components->Ajax->respondAsAjax);
  93. $this->Controller->Flash->message('A message', 'success');
  94. $session = $this->Controller->Session->read('messages');
  95. $expected = array(
  96. 'success' => array('A message')
  97. );
  98. $this->assertEquals($expected, $session);
  99. $this->Controller->Components->Ajax->beforeRender($this->Controller);
  100. $this->assertEquals('Tools.Ajax', $this->Controller->viewClass);
  101. $this->assertEquals($expected, $this->Controller->viewVars['_message']);
  102. $session = $this->Controller->Session->read('messages');
  103. $this->assertNull($session);
  104. }
  105. /**
  106. * AjaxComponentTest::testSetVars()
  107. *
  108. * @return void
  109. */
  110. public function testSetVars() {
  111. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  112. $this->Controller->Components->unload('Ajax');
  113. $content = array('id' => 1, 'title' => 'title');
  114. $this->Controller->set(compact('content'));
  115. $this->Controller->set('_serialize', array('content'));
  116. $this->Controller->Components->load('Tools.Ajax');
  117. $this->assertNotEmpty($this->Controller->viewVars);
  118. $this->assertNotEmpty($this->Controller->viewVars['_serialize']);
  119. $this->assertEquals('content', $this->Controller->viewVars['_serialize'][0]);
  120. }
  121. /**
  122. * AjaxComponentTest::testSetVarsWithRedirect()
  123. *
  124. * @return void
  125. */
  126. public function testSetVarsWithRedirect() {
  127. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  128. $this->Controller->startupProcess();
  129. $content = array('id' => 1, 'title' => 'title');
  130. $this->Controller->set(compact('content'));
  131. $this->Controller->set('_serialize', array('content'));
  132. $this->Controller->redirect('/');
  133. $this->assertSame(array(), $this->Controller->response->header());
  134. $expected = array(
  135. 'url' => Router::url('/', true),
  136. 'status' => null,
  137. 'exit' => true
  138. );
  139. $this->assertEquals($expected, $this->Controller->viewVars['_redirect']);
  140. $this->assertNotEmpty($this->Controller->viewVars);
  141. $this->assertNotEmpty($this->Controller->viewVars['_serialize']);
  142. $this->assertTrue(in_array('content', $this->Controller->viewVars['_serialize']));
  143. }
  144. }
  145. // Use Controller instead of AppController to avoid conflicts
  146. class AjaxComponentTestController extends Controller {
  147. public $components = array('Session', 'Tools.Ajax', 'Tools.Common');
  148. }