FlashHelperTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. App::uses('FlashHelper', 'Tools.View/Helper');
  3. App::uses('View', 'View');
  4. App::uses('MyCakeTestCase', 'Tools.TestSuite');
  5. /**
  6. * FlashHelper tests
  7. */
  8. class FlashHelperTest extends MyCakeTestCase {
  9. public $fixtures = array('core.cake_session');
  10. public $Flash;
  11. public function setUp() {
  12. parent::setUp();
  13. Router::reload();
  14. $this->View = new View();
  15. $this->Flash = new FlashHelper($this->View);
  16. }
  17. /**
  18. * FlashHelperTest::testFlashMessage()
  19. *
  20. * @return void
  21. */
  22. public function testMessage() {
  23. $result = $this->Flash->message(h('Foo & bar'), 'success');
  24. $expected = '<div class="flash-messages flashMessages"><div class="message success">Foo &amp; bar</div></div>';
  25. $this->assertEquals($expected, $result);
  26. }
  27. /**
  28. * FlashHelperTest::testFlash()
  29. *
  30. * @return void
  31. */
  32. public function testFlash() {
  33. $this->Flash->addTransientMessage(h('Foo & bar'), 'success');
  34. $result = $this->Flash->flash();
  35. $expected = '<div class="flash-messages flashMessages"><div class="message success">Foo &amp; bar</div></div>';
  36. $this->assertEquals($expected, $result);
  37. $this->Flash->addTransientMessage('I am an error', 'error');
  38. $this->Flash->addTransientMessage('I am a warning', 'warning');
  39. $this->Flash->addTransientMessage('I am some info', 'info');
  40. $this->Flash->addTransientMessage('I am also some info');
  41. $this->Flash->addTransientMessage('I am sth custom', 'custom');
  42. $result = $this->Flash->flash();
  43. $this->assertTextContains('message error', $result);
  44. $this->assertTextContains('message warning', $result);
  45. $this->assertTextContains('message info', $result);
  46. $this->assertTextContains('message custom', $result);
  47. $result = substr_count($result, 'message info');
  48. $this->assertSame(2, $result);
  49. }
  50. /**
  51. * FlashComponentTest::testFlashMessage()
  52. *
  53. * @return void
  54. */
  55. public function testFlashComplex() {
  56. $this->Flash->settings['useElements'] = true;
  57. FlashComponent::transientMessage('efg', array('type' => 'success', 'escape' => true,
  58. 'useElements' => true, 'params' => array('foo' => 'bar')));
  59. $res = $this->Flash->flash();
  60. $this->assertTrue(!empty($res));
  61. $expected = '<div class="flash-messages flashMessages"><div class="message success">efg</div>
  62. </div>';
  63. $this->assertSame($expected, $res);
  64. }
  65. /**
  66. * FlashComponentTest::testFlashMessage()
  67. *
  68. * @return void
  69. */
  70. public function testFlashHtml() {
  71. $this->Flash->settings['useElements'] = true;
  72. FlashComponent::transientMessage('<b>OK<b>', array('type' => 'success', 'escape' => false,
  73. 'useElements' => true, 'params' => array('foo' => 'bar')));
  74. FlashComponent::transientMessage('<b>Error<b>', array('type' => 'error', 'escape' => true,
  75. 'useElements' => true, 'params' => array('foo' => 'bar')));
  76. $res = $this->Flash->flash();
  77. $this->assertTrue(!empty($res));
  78. $expected = '<div class="flash-messages flashMessages"><div class="message success"><b>OK<b></div>
  79. <div class="message error">&lt;b&gt;Error&lt;b&gt;</div>
  80. </div>';
  81. $this->assertTextEquals($expected, $res);
  82. }
  83. /**
  84. * FlashComponentTest::testFlashMessage()
  85. *
  86. * @return void
  87. */
  88. public function testFlashComplexMocked() {
  89. $this->View = $this->getMock('View', ['element']);
  90. $this->Flash = new FlashHelper($this->View);
  91. $this->Flash->settings['useElements'] = true;
  92. FlashComponent::transientMessage('efg', array('type' => 'success', 'escape' => true,
  93. 'useElements' => true, 'element' => 'PluginName.default_element', 'params' => array('foo' => 'bar')));
  94. $this->View->expects($this->once())
  95. ->method('element')
  96. ->with('PluginName.Flash/default_element')
  97. ->will($this->returnValue('xyz'));
  98. $res = $this->Flash->flash();
  99. $this->assertTrue(!empty($res));
  100. $expected = '<div class="flash-messages flashMessages">xyz</div>';
  101. $this->assertSame($expected, $res);
  102. }
  103. /**
  104. * Test that you can define your own order or just output a subpart of
  105. * the types.
  106. *
  107. * @return void
  108. */
  109. public function testFlashWithStringTypes() {
  110. $this->Flash->addTransientMessage('I am an error', 'error');
  111. $this->Flash->addTransientMessage('I am a warning', 'warning');
  112. $this->Flash->addTransientMessage('I am some info', 'info');
  113. $this->Flash->addTransientMessage('I am also some info');
  114. $this->Flash->addTransientMessage('I am sth custom', 'custom');
  115. $result = $this->Flash->flash(array('warning', 'error'));
  116. $expected = '<div class="flash-messages flashMessages"><div class="message warning">I am a warning</div><div class="message error">I am an error</div></div>';
  117. $this->assertEquals($expected, $result);
  118. $result = $this->Flash->flash(array('info'));
  119. $expected = '<div class="flash-messages flashMessages"><div class="message info">I am some info</div><div class="message info">I am also some info</div></div>';
  120. $this->assertEquals($expected, $result);
  121. $result = $this->Flash->flash();
  122. $expected = '<div class="flash-messages flashMessages"><div class="message custom">I am sth custom</div></div>';
  123. $this->assertEquals($expected, $result);
  124. }
  125. /**
  126. * TearDown method
  127. *
  128. * @return void
  129. */
  130. public function tearDown() {
  131. parent::tearDown();
  132. unset($this->Flash);
  133. }
  134. }