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);
}
}