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 * * @return void */ public function tearDown() { parent::tearDown(); unset($this->View, $this->Flash); $this->clearPlugins(); } /** * testFlash method * * @return void */ public function testFlash() { $result = $this->Flash->render(); $expected = '
This is a calling
'; $this->assertContains($expected, $result); $expected = '
Recorded
'; $result = $this->Flash->render('classy'); $this->assertEquals($expected, $result); $result = $this->Flash->render('notification'); $expected = [ 'div' => ['id' => 'notificationLayout'], 'assertHtml($expected, $result); $this->assertNull($this->Flash->render('non-existent')); } /** * testFlashThrowsException */ public function testFlashThrowsException() { $this->expectException(\UnexpectedValueException::class); $this->View->getRequest()->getSession()->write('Flash.foo', 'bar'); $this->Flash->render('foo'); } /** * test setting the element from the attrs. * * @return void */ public function testFlashElementInAttrs() { $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. * * @return void */ public function testFlashWithPluginElement() { $this->loadPlugins(['TestPlugin']); $result = $this->Flash->render('flash', ['element' => 'TestPlugin.Flash/plugin_element']); $expected = 'this is the plugin element'; $this->assertEquals($expected, $result); } /** * test that when View theme is set, flash element from that theme (plugin) is used. * * @return void */ public function testFlashWithTheme() { $this->loadPlugins(['TestTheme']); $this->View->setTheme('TestTheme'); $result = $this->Flash->render('flash'); $expected = 'flash element from TestTheme'; $this->assertContains($expected, $result); } /** * Test that when rendering a stack, messages are displayed in their * respective element, in the order they were added in the stack * * @return void */ public function testFlashWithStack() { $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. * * @return void */ public function testFlashWithPrefix() { $this->View->setRequest($this->View->getRequest()->withParam('prefix', 'Admin')); $result = $this->Flash->render('flash'); $expected = 'flash element from Admin prefix folder'; $this->assertContains($expected, $result); } }