ILIAS  release_8 Revision v8.24
ilNotificationOSDTest.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
21use PHPUnit\Framework\TestCase;
22
27{
28 private \ILIAS\Notifications\ilNotificationOSDHandler $handler;
31 private array $database;
32 private array $result;
33
34 private function createDBFunctionCalls(int $insert = 0, int $queryF = 0, int $fetchAssoc = 0, int $manipulateF = 0): void
35 {
36 $this->database = [];
37 $this->result = [];
38 $this->db->expects(self::exactly($insert))->method('nextId')->willReturnCallback(function (string $table): int {
39 return count($this->database) + 1;
40 });
41 $this->db->expects(self::exactly($insert))->method('insert')->willReturnCallback(function (string $table, array $object): int {
42 foreach ($object as &$value) {
43 $value = $value[1];
44 }
45 unset($value);
46 $this->database[] = $object;
47 return $object['notification_osd_id'];
48 });
49 $this->db->expects(self::exactly($queryF))->method('queryF')->willReturnCallback(function (string $query, array $types, array $values): ilPDOStatement {
50 $this->result = [];
51 if (strpos($query, 'WHERE usr_id') !== false) {
52 foreach ($this->database as $row) {
53 if ($row['usr_id'] === $values[0]) {
54 $this->result[] = $row;
55 }
56 }
57 }
58 if (strpos($query, 'WHERE notification_osd_id') !== false) {
59 foreach ($this->database as $row) {
60 if ($row['notification_osd_id'] === $values[0]) {
61 $this->result[] = $row;
62 }
63 }
64 }
65 if (strpos($query, 'SELECT count(*) AS count') !== false) {
66 $this->result = [0 => ['count' => count($this->result)]];
67 }
68 return $this->createMock(ilPDOStatement::class);
69 });
70 $this->db->expects(self::exactly($fetchAssoc))->method('fetchAssoc')->willReturnCallback(function (ilPDOStatement $rset): ?array {
71 return array_shift($this->result);
72 });
73 $this->db->expects(self::exactly($manipulateF))->method('manipulateF')->willReturnCallback(function (string $query, array $types, array $values): int {
74 if (count($values) === 1) {
75 foreach ($this->database as $key => $row) {
76 if ($row['notification_osd_id'] === $values[0]) {
77 unset($this->database[$key]);
78 return 1;
79 }
80 }
81 }
82 if (count($values) === 2) {
83 $i = 0;
84 foreach ($this->database as $key => $row) {
85 if ($row['usr_id'] === $values[0] && $row['type'] === $values[1]) {
86 unset($this->database[$key]);
87 $i++;
88 }
89 }
90 return $i;
91 }
92 return 0;
93 });
94 }
95
96 protected function setUp(): void
97 {
98 $this->db = $this->createMock(ilDBPdo::class);
99 $this->handler = new \ILIAS\Notifications\ilNotificationOSDHandler(
100 new ILIAS\Notifications\Repository\ilNotificationOSDRepository($this->db)
101 );
102 $this->user = $this->createMock(ilObjUser::class);
103 $this->user->method('getId')->willReturn(4);
104 }
105
106 public function testCreateNotification(): void
107 {
108 $this->createDBFunctionCalls(1);
109 $config = new \ILIAS\Notifications\Model\ilNotificationConfig('test_type');
110 $config->setTitleVar('Test Notification');
111 $config->setShortDescriptionVar('This is a test notification');
112 $test_obj = new \ILIAS\Notifications\Model\ilNotificationObject($config, $this->user);
113 $this->handler->notify($test_obj);
114
115 $this->assertCount(1, $this->database);
116 }
117
118 public function testGet0Notification(): void
119 {
120 $this->createDBFunctionCalls(0, 1, 1);
121 $this->assertCount(0, $this->handler->getOSDNotificationsForUser($this->user->getId()));
122 }
123
124 public function testGetNotification(): void
125 {
126 $this->createDBFunctionCalls(1, 1, 2);
127 $config = new \ILIAS\Notifications\Model\ilNotificationConfig('test_type');
128 $test_obj = new \ILIAS\Notifications\Model\ilNotificationObject($config, $this->user);
129 $this->handler->notify($test_obj);
130
131 $this->assertCount(1, $this->handler->getOSDNotificationsForUser($this->user->getId()));
132 }
133
134 public function testRemoveNotification(): void
135 {
136 $this->createDBFunctionCalls(1, 3, 4, 1);
137 $config = new \ILIAS\Notifications\Model\ilNotificationConfig('test_type');
138 $test_obj = new \ILIAS\Notifications\Model\ilNotificationObject($config, $this->user);
139 $this->handler->notify($test_obj);
140
141 $notifications = $this->handler->getOSDNotificationsForUser($this->user->getId());
142
143 $this->assertCount(1, $notifications);
144 $this->assertTrue($this->handler->removeOSDNotification($notifications[0]->getId()));
145 $this->assertCount(0, $this->handler->getOSDNotificationsForUser($this->user->getId()));
146 }
147
148 public function testRemoveNoNotification(): void
149 {
150 $this->createDBFunctionCalls(0, 2, 2, 0);
151 $this->assertCount(0, $this->handler->getOSDNotificationsForUser($this->user->getId()));
152 $this->assertFalse($this->handler->removeOSDNotification(3));
153 }
154}
createDBFunctionCalls(int $insert=0, int $queryF=0, int $fetchAssoc=0, int $manipulateF=0)
ILIAS Notifications ilNotificationOSDHandler $handler
User class.
Class ilPDOStatement is a Wrapper Class for PDOStatement.
Interface ilDBInterface.
if(!array_key_exists('PATH_INFO', $_SERVER)) $config
Definition: metadata.php:85
$i
Definition: metadata.php:41
string $key
Consumer key/client ID value.
Definition: System.php:193
Class ChatMainBarProvider \MainMenu\Provider.
$query