Session = new Session();
$this->Flash = new FlashMessage($this->Session);
}
public function tearDown(): void
{
parent::tearDown();
$this->Session->destroy();
}
public function testSet(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->set('This is a test message');
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->set(
'This is a test message',
['element' => 'test', 'params' => ['foo' => 'bar']]
);
$expected[] = [
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/test',
'params' => ['foo' => 'bar'],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->set('This is a test message', ['element' => 'MyPlugin.alert']);
$expected[] = [
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'MyPlugin.flash/alert',
'params' => [],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->set('This is a test message', ['key' => 'foobar']);
$expected = [
[
'message' => 'This is a test message',
'key' => 'foobar',
'element' => 'flash/default',
'params' => [],
],
];
$result = $this->Session->read('Flash.foobar');
$this->assertEquals($expected, $result);
}
public function testDefaultParamsOverriding(): void
{
$this->Flash = new FlashMessage(
$this->Session,
['params' => ['foo' => 'bar']]
);
$this->Flash->set(
'This is a test message',
['params' => ['username' => 'ADmad']]
);
$expected[] = [
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => ['username' => 'ADmad'],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
public function testDuplicateIgnored(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->setConfig('duplicate', false);
$this->Flash->set('This test message should appear once only');
$this->Flash->set('This test message should appear once only');
$result = $this->Session->read('Flash.flash');
$this->assertCount(1, $result);
}
public function testSetEscape(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->set(
'This is a test message',
['escape' => false, 'params' => ['foo' => 'bar']]
);
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => ['foo' => 'bar', 'escape' => false],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->set(
'This is a test message',
['key' => 'escaped', 'escape' => false, 'params' => ['foo' => 'bar', 'escape' => true]]
);
$expected = [
[
'message' => 'This is a test message',
'key' => 'escaped',
'element' => 'flash/default',
'params' => ['foo' => 'bar', 'escape' => true],
],
];
$result = $this->Session->read('Flash.escaped');
$this->assertEquals($expected, $result);
}
public function testSetWithClear(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->set('This is a test message');
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->set('This is another test message', ['clear' => true]);
$expected = [
[
'message' => 'This is another test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
public function testSetWithPlugin(): void
{
$this->Flash->set('This is a test message', ['plugin' => 'FooBar']);
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'FooBar.flash/default',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
// Value of 'plugin' will override the plugin name used in 'element'
$this->Flash->set('This is a test message', [
'key' => 'msg',
'element' => 'Plugin.success',
'plugin' => 'FooBar',
]);
$expected = [
[
'message' => 'This is a test message',
'key' => 'msg',
'element' => 'FooBar.flash/success',
'params' => [],
],
];
$result = $this->Session->read('Flash.msg');
$this->assertEquals($expected, $result);
}
public function testSetExceptionMessage(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->setExceptionMessage(new Exception('This is a test message', 404));
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/error',
'params' => ['code' => 404],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->setExceptionMessage(
new Exception('This is a test message'),
['element' => 'default', 'clear' => true]
);
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/default',
'params' => ['code' => null],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
public function testSetWithConstructorConfiguration(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$flash = new FlashMessage($this->Session, ['element' => 'test']);
$flash->set('This is a test message');
$expected = [
[
'message' => 'This is a test message',
'key' => 'flash',
'element' => 'flash/test',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
/**
* @dataProvider convenienceMethods
*/
public function testConvenienceMethods(string $type): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->{$type}('It worked');
$expected = [
[
'message' => 'It worked',
'key' => 'flash',
'element' => 'flash/' . $type,
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
public static function convenienceMethods(): array
{
return [
['success'],
['error'],
['warning'],
['info'],
];
}
public function testSuccessWithClear(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->success('It worked');
$expected = [
[
'message' => 'It worked',
'key' => 'flash',
'element' => 'flash/success',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
$this->Flash->success('It worked too', ['clear' => true]);
$expected = [
[
'message' => 'It worked too',
'key' => 'flash',
'element' => 'flash/success',
'params' => [],
],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result);
}
public function testError(): void
{
$this->assertNull($this->Session->read('Flash.flash'));
$this->Flash->error('It did not work', ['element' => 'error_thing']);
$expected[] = [
'message' => 'It did not work',
'key' => 'flash',
'element' => 'flash/error',
'params' => [],
];
$result = $this->Session->read('Flash.flash');
$this->assertEquals($expected, $result, 'Element is ignored in convenience method call.');
}
}