1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
<?php
/*
* This file is part of the JoliNotif project.
*
* (c) Loïck Piera <pyrech@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Joli\JoliNotif\tests\Driver;
use Joli\JoliNotif\Driver\DriverInterface;
use Joli\JoliNotif\Driver\LibNotifyDriver;
use Joli\JoliNotif\Exception\InvalidNotificationException;
use Joli\JoliNotif\Notification;
class LibNotifyDriverTest extends AbstractDriverTestCase
{
public function testGetPriority()
{
$driver = $this->getDriver();
$this->assertSame(DriverInterface::PRIORITY_HIGH, $driver->getPriority());
}
public function testSendWithEmptyBody()
{
$driver = $this->getDriver();
$this->expectException(InvalidNotificationException::class);
$this->expectExceptionMessage('Notification body can not be empty');
$driver->send(new Notification());
}
/**
* @requires extension ffi
*/
public function testInitialize()
{
$driver = $this->getDriver();
if (!$driver::isLibraryExists()) {
$this->markTestSkipped('Looks like libnotify is not installed');
}
$this->assertTrue($driver->isSupported());
}
public function testSendThrowsExceptionWhenNotificationDoesntHaveBody()
{
$driver = $this->getDriver();
$notification = new Notification();
try {
$driver->send($notification);
$this->fail('Expected a InvalidNotificationException');
} catch (\Exception $e) {
$this->assertInstanceOf('Joli\JoliNotif\Exception\InvalidNotificationException', $e);
}
}
public function testSendThrowsExceptionWhenNotificationHasAnEmptyBody()
{
$driver = $this->getDriver();
$notification = new Notification();
$notification->setBody('');
try {
$driver->send($notification);
$this->fail('Expected a InvalidNotificationException');
} catch (\Exception $e) {
$this->assertInstanceOf('Joli\JoliNotif\Exception\InvalidNotificationException', $e);
}
}
/**
* @requires extension ffi
*/
public function testSendNotificationWithAllOptions()
{
$driver = $this->getDriver();
$notification = (new Notification())
->setBody('I\'m the notification body')
->setTitle('I\'m the notification title')
->addOption('subtitle', 'I\'m the notification subtitle')
->addOption('sound', 'Frog')
->addOption('url', 'https://google.com')
->setIcon($this->getIconDir() . '/image.gif')
;
$result = $driver->send($notification);
if (!$result) {
$this->markTestSkipped('Notification was not sent');
}
$this->assertTrue($driver->send($notification));
}
/**
* @requires extension ffi
*/
public function testWithMultipleInstance()
{
$notification = (new Notification())
->setBody('I\'m the notification body')
->setTitle('I\'m the notification title')
;
$result = (new LibNotifyDriver())->send($notification);
if (!$result) {
$this->markTestSkipped('Notification was not sent');
}
$this->assertTrue($result);
$this->assertTrue((new LibNotifyDriver())->send($notification));
$this->assertTrue((new LibNotifyDriver())->send($notification));
}
protected function getDriver(): DriverInterface
{
static $driver;
$driver ??= new LibNotifyDriver();
return $driver;
}
}
|