FlashComponentTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. App::uses('FlashComponent', 'Tools.Controller/Component');
  3. App::uses('Component', 'Controller');
  4. App::uses('CakeSession', 'Model/Datasource');
  5. App::uses('Controller', 'Controller');
  6. App::uses('AppModel', 'Model');
  7. /**
  8. */
  9. class FlashComponentTest extends CakeTestCase {
  10. public $fixtures = ['core.cake_session'];
  11. public function setUp() {
  12. parent::setUp();
  13. // BUGFIX for CakePHP2.5 - One has to write to the session before deleting actually works
  14. CakeSession::write('Auth', '');
  15. CakeSession::delete('Auth');
  16. $this->Controller = new FlashComponentTestController(new CakeRequest, new CakeResponse);
  17. $this->Controller->constructClasses();
  18. $this->Controller->startupProcess();
  19. $this->Controller->Session->delete('messages');
  20. }
  21. public function tearDown() {
  22. parent::tearDown();
  23. unset($this->Controller);
  24. }
  25. /**
  26. * FlashComponentTest::testTransientFlashMessage()
  27. *
  28. * @return void
  29. */
  30. public function testTransientMessage() {
  31. $this->Controller->Flash->transientMessage('xyz', 'success');
  32. $res = Configure::read('messages');
  33. //debug($res);
  34. $this->assertTrue(!empty($res));
  35. $this->assertTrue(isset($res['success'][0]) && $res['success'][0] === 'xyz');
  36. }
  37. /**
  38. * FlashComponentTest::testFlashMessage()
  39. *
  40. * @return void
  41. */
  42. public function testFlashMessage() {
  43. $this->Controller->Flash->message('efg');
  44. $res = $this->Controller->Session->read('messages');
  45. $this->assertTrue(!empty($res));
  46. $this->assertTrue(isset($res['info'][0]) && $res['info'][0] === 'efg');
  47. }
  48. /**
  49. * FlashComponentTest::testFlashMessage()
  50. *
  51. * @return void
  52. */
  53. public function testFlashMessageComplex() {
  54. $this->Controller->Flash->settings['useElements'] = true;
  55. $this->Controller->Flash->message('efg', ['escape' => true, 'element' => 'PluginName.Baz', 'params' => ['foo' => 'bar']]);
  56. $res = $this->Controller->Session->read('messages');
  57. $this->assertTrue(!empty($res));
  58. $expected = [
  59. 'message' => 'efg',
  60. 'params' => ['foo' => 'bar'],
  61. 'escape' => true,
  62. 'element' => 'PluginName.Flash/Baz'
  63. ];
  64. $this->assertSame($expected, $res['info'][0]);
  65. }
  66. /**
  67. * FlashComponentTest::testFlashMessage()
  68. *
  69. * @return void
  70. */
  71. public function testFlashMessageTypeToElement() {
  72. $this->Controller->Flash->settings['useElements'] = true;
  73. $this->Controller->Flash->settings['typeToElement'] = true;
  74. $this->Controller->Flash->settings['plugin'] = 'Tools';
  75. $this->Controller->Flash->message('INFO', ['escape' => true, 'params' => ['foo' => 'bar']]);
  76. $this->Controller->Flash->success('OK', ['escape' => true, 'plugin' => 'BarBaz', 'params' => ['foo' => 'bar']]);
  77. $this->Controller->Flash->error('NO', ['escape' => true, 'plugin' => null, 'params' => ['foo' => 'bar']]);
  78. $res = $this->Controller->Session->read('messages');
  79. $this->assertTrue(!empty($res));
  80. $expected = 'Tools.Flash/info';
  81. $this->assertSame($expected, $res['info'][0]['element']);
  82. $expected = 'BarBaz.Flash/success';
  83. $this->assertSame($expected, $res['success'][0]['element']);
  84. $expected = 'Flash/error';
  85. $this->assertSame($expected, $res['error'][0]['element']);
  86. }
  87. /**
  88. * FlashComponentTest::testMagicMessage()
  89. *
  90. * @return void
  91. */
  92. public function testMagicMessage() {
  93. $this->Controller->Flash->success('s');
  94. $this->Controller->Flash->error('e');
  95. $this->Controller->Flash->warning('w');
  96. $res = $this->Controller->Session->read('messages');
  97. $expected = [
  98. 'success' => ['s'],
  99. 'error' => ['e'],
  100. 'warning' => ['w']];
  101. $this->assertSame($expected, $res);
  102. }
  103. }
  104. // Use Controller instead of AppController to avoid conflicts
  105. class FlashComponentTestController extends Controller {
  106. public $components = ['Session', 'Tools.Flash'];
  107. public $failed = false;
  108. public $testHeaders = [];
  109. public function fail() {
  110. $this->failed = true;
  111. }
  112. public function redirect($url, $status = null, $exit = true) {
  113. return $status;
  114. }
  115. public function header($status) {
  116. $this->testHeaders[] = $status;
  117. }
  118. }