ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
PushoverHandlerTest.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the Monolog package.
5  *
6  * (c) Jordi Boggiano <j.boggiano@seld.be>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11 
12 namespace Monolog\Handler;
13 
15 use Monolog\Logger;
16 
24 {
25  private $res;
26  private $handler;
27 
28  public function testWriteHeader()
29  {
30  $this->createHandler();
31  $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
32  $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
33  fseek($this->res, 0);
34  $content = fread($this->res, 1024);
35 
36  $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content);
37 
38  return $content;
39  }
40 
44  public function testWriteContent($content)
45  {
46  $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog&timestamp=\d{10}$/', $content);
47  }
48 
49  public function testWriteWithComplexTitle()
50  {
51  $this->createHandler('myToken', 'myUser', 'Backup finished - SQL1');
52  $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
53  fseek($this->res, 0);
54  $content = fread($this->res, 1024);
55 
56  $this->assertRegexp('/title=Backup\+finished\+-\+SQL1/', $content);
57  }
58 
59  public function testWriteWithComplexMessage()
60  {
61  $this->createHandler();
62  $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
63  $this->handler->handle($this->getRecord(Logger::CRITICAL, 'Backup of database "example" finished in 16 minutes.'));
64  fseek($this->res, 0);
65  $content = fread($this->res, 1024);
66 
67  $this->assertRegexp('/message=Backup\+of\+database\+%22example%22\+finished\+in\+16\+minutes\./', $content);
68  }
69 
70  public function testWriteWithTooLongMessage()
71  {
72  $message = str_pad('test', 520, 'a');
73  $this->createHandler();
74  $this->handler->setHighPriorityLevel(Logger::EMERGENCY); // skip priority notifications
75  $this->handler->handle($this->getRecord(Logger::CRITICAL, $message));
76  fseek($this->res, 0);
77  $content = fread($this->res, 1024);
78 
79  $expectedMessage = substr($message, 0, 505);
80 
81  $this->assertRegexp('/message=' . $expectedMessage . '&title/', $content);
82  }
83 
84  public function testWriteWithHighPriority()
85  {
86  $this->createHandler();
87  $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1'));
88  fseek($this->res, 0);
89  $content = fread($this->res, 1024);
90 
91  $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog&timestamp=\d{10}&priority=1$/', $content);
92  }
93 
95  {
96  $this->createHandler();
97  $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1'));
98  fseek($this->res, 0);
99  $content = fread($this->res, 1024);
100 
101  $this->assertRegexp('/token=myToken&user=myUser&message=test1&title=Monolog&timestamp=\d{10}&priority=2&retry=30&expire=25200$/', $content);
102  }
103 
104  public function testWriteToMultipleUsers()
105  {
106  $this->createHandler('myToken', array('userA', 'userB'));
107  $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1'));
108  fseek($this->res, 0);
109  $content = fread($this->res, 1024);
110 
111  $this->assertRegexp('/token=myToken&user=userA&message=test1&title=Monolog&timestamp=\d{10}&priority=2&retry=30&expire=25200POST/', $content);
112  $this->assertRegexp('/token=myToken&user=userB&message=test1&title=Monolog&timestamp=\d{10}&priority=2&retry=30&expire=25200$/', $content);
113  }
114 
115  private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog')
116  {
117  $constructorArgs = array($token, $user, $title);
118  $this->res = fopen('php://memory', 'a');
119  $this->handler = $this->getMock(
120  '\Monolog\Handler\PushoverHandler',
121  array('fsockopen', 'streamSetTimeout', 'closeSocket'),
122  $constructorArgs
123  );
124 
125  $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString');
126  $reflectionProperty->setAccessible(true);
127  $reflectionProperty->setValue($this->handler, 'localhost:1234');
128 
129  $this->handler->expects($this->any())
130  ->method('fsockopen')
131  ->will($this->returnValue($this->res));
132  $this->handler->expects($this->any())
133  ->method('streamSetTimeout')
134  ->will($this->returnValue(true));
135  $this->handler->expects($this->any())
136  ->method('closeSocket')
137  ->will($this->returnValue(true));
138 
139  $this->handler->setFormatter($this->getIdentityFormatter());
140  }
141 }
getRecord($level=Logger::WARNING, $message='test', $context=array())
Definition: TestCase.php:19
createHandler($token='myToken', $user='myUser', $title='Monolog')
const EMERGENCY
Urgent alert.
Definition: Logger.php:77
Create styles array
The data for the language used.
const CRITICAL
Critical conditions.
Definition: Logger.php:64
Almost all examples (expected header, titles, messages) taken from https://www.pushover.net/api.
testWriteContent($content)
testWriteHeader