View = new View(new ServerRequest(['session' => $session])); $this->Flash = new FlashHelper($this->View); $session->write([ 'Flash' => [ 'flash' => [ [ 'key' => 'flash', 'message' => 'This is a calling', 'element' => 'flash/default', 'params' => [], ], ], 'notification' => [ [ 'key' => 'notification', 'message' => 'This is a test of the emergency broadcasting system', 'element' => 'flash_helper', 'params' => [ 'title' => 'Notice!', 'name' => 'Alert!', ], ], ], 'classy' => [ [ 'key' => 'classy', 'message' => 'Recorded', 'element' => 'flash_classy', 'params' => [], ], ], 'stack' => [ [ 'key' => 'flash', 'message' => 'This is a calling', 'element' => 'flash/default', 'params' => [], ], [ 'key' => 'notification', 'message' => 'This is a test of the emergency broadcasting system', 'element' => 'flash_helper', 'params' => [ 'title' => 'Notice!', 'name' => 'Alert!', ], ], [ 'key' => 'classy', 'message' => 'Recorded', 'element' => 'flash_classy', 'params' => [], ], ], ], ]); } /** * tearDown method */ public function tearDown(): void { parent::tearDown(); unset($this->View, $this->Flash); $this->clearPlugins(); } /** * testFlash method */ public function testFlash(): void { $result = $this->Flash->render(); $expected = '
This is a calling
'; $this->assertStringContainsString($expected, $result); $expected = '
Recorded
'; $result = $this->Flash->render('classy'); $this->assertSame($expected, $result); $result = $this->Flash->render('notification'); $expected = [ 'div' => ['id' => 'notificationLayout'], 'assertHtml($expected, $result); $this->assertNull($this->Flash->render('nonexistent')); } /** * test setting the element from the attrs. */ public function testFlashElementInAttrs(): void { $result = $this->Flash->render('notification', [ 'element' => 'flash_helper', 'params' => ['title' => 'Notice!', 'name' => 'Alert!'], ]); $expected = [ 'div' => ['id' => 'notificationLayout'], 'assertHtml($expected, $result); } /** * test using elements in plugins. */ public function testFlashWithPluginElement(): void { $this->loadPlugins(['TestPlugin']); $result = $this->Flash->render('flash', ['element' => 'TestPlugin.flash/plugin_element']); $expected = 'this is the plugin element'; $this->assertSame($expected, $result); } /** * test that when View theme is set, flash element from that theme (plugin) is used. */ public function testFlashWithTheme(): void { $this->loadPlugins(['TestTheme']); $this->View->setTheme('TestTheme'); $result = $this->Flash->render('flash'); $expected = 'flash element from TestTheme'; $this->assertStringContainsString($expected, $result); } /** * Test that when rendering a stack, messages are displayed in their * respective element, in the order they were added in the stack */ public function testFlashWithStack(): void { $result = $this->Flash->render('stack'); $expected = [ ['div' => ['class' => 'message']], 'This is a calling', '/div', ['div' => ['id' => 'notificationLayout']], ' ['id' => 'classy-message']], 'Recorded', '/div', ]; $this->assertHtml($expected, $result); $this->assertNull($this->View->getRequest()->getSession()->read('Flash.stack')); } /** * test that when View prefix is set, flash element from that prefix * is used if available. */ public function testFlashWithPrefix(): void { $this->View->setRequest($this->View->getRequest()->withParam('prefix', 'Admin')); $result = $this->Flash->render('flash'); $expected = 'flash element from Admin prefix folder'; $this->assertStringContainsString($expected, $result); } }