19 declare(strict_types=1);
38 $valueAsObject->thr_top_fk = 8;
39 $valueAsObject->thr_display_user_id = 8;
40 $valueAsObject->thr_usr_alias =
'';
41 $valueAsObject->thr_subject =
'';
42 $valueAsObject->thr_date =
'';
43 $valueAsObject->thr_update =
'';
44 $valueAsObject->import_name =
'';
45 $valueAsObject->thr_num_posts = 8;
46 $valueAsObject->thr_last_post =
'';
47 $valueAsObject->visits = 8;
48 $valueAsObject->is_sticky =
false;
49 $valueAsObject->is_closed =
false;
50 $valueAsObject->frm_obj_id = 8;
51 $valueAsObject->avg_rating = 9;
52 $valueAsObject->thr_author_id = 8;
54 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
55 $mockStatement->expects(self::once())
58 ->willReturn($valueAsObject);
61 $this->mockDatabase->expects(self::once())->method(
'queryF'),
64 )->willReturn($mockStatement);
68 $this->assertInstanceOf(ilForumTopic::class, $instance);
77 'thr_display_user_id' =>
'',
78 'thr_usr_alias' =>
'',
79 'thr_last_post' =>
'',
87 'thr_author_id' =>
'',
90 'num_unread_posts' =>
'',
91 'usr_notification_is_enabled' =>
'',
95 $instance->assignData(
$data);
97 $this->assertSame(0, $instance->getId());
98 $this->assertSame(0, $instance->getForumId());
99 $this->assertSame(
'', $instance->getSubject());
100 $this->assertSame(0, $instance->getDisplayUserId());
101 $this->assertSame(
'', $instance->getUserAlias());
102 $this->assertSame(
'', $instance->getLastPostString());
103 $this->assertSame(
'', $instance->getCreateDate());
104 $this->assertSame(
'', $instance->getChangeDate());
105 $this->assertSame(0, $instance->getVisits());
106 $this->assertSame(
'', $instance->getImportName());
107 $this->assertFalse($instance->isSticky());
108 $this->assertFalse($instance->isClosed());
109 $this->assertSame(0.0, $instance->getAverageRating());
110 $this->assertSame(0, $instance->getThrAuthorId());
112 $this->assertSame(0, $instance->getNumPosts());
113 $this->assertSame(0, $instance->getNumUnreadPosts());
114 $this->assertFalse($instance->isUserNotificationEnabled());
122 $instance->setForumId(10);
123 $instance->setSubject(
'aa');
124 $instance->setDisplayUserId(188);
125 $instance->setUserAlias(
'jl');
126 $instance->setNumPosts(86);
127 $instance->setLastPostString(
'ahssh');
128 $instance->setCreateDate(
'some date');
129 $instance->setImportName(
'xaii');
130 $instance->setSticky(
true);
131 $instance->setClosed(
true);
132 $instance->setAverageRating(78);
133 $instance->setThrAuthorId(8890);
135 $this->mockDatabase->expects(self::once())->method(
'nextId')->with(
'frm_threads')->willReturn($nextId);
137 $this->mockDatabase->expects(self::once())->method(
'insert')->with(
140 'thr_pk' => [
'integer', $nextId],
141 'thr_top_fk' => [
'integer', 10],
142 'thr_subject' => [
'text',
'aa'],
143 'thr_display_user_id' => [
'integer', 188],
144 'thr_usr_alias' => [
'text',
'jl'],
145 'thr_num_posts' => [
'integer', 86],
146 'thr_last_post' => [
'text',
'ahssh'],
147 'thr_date' => [
'timestamp',
'some date'],
148 'thr_update' => [
'timestamp',
null],
149 'import_name' => [
'text',
'xaii'],
150 'is_sticky' => [
'integer', 1],
151 'is_closed' => [
'integer', 1],
152 'avg_rating' => [
'text', 78],
153 'thr_author_id' => [
'integer', 8890],
157 $this->assertTrue($instance->insert());
163 $this->mockDatabase->expects(self::never())->method(
'nextId');
164 $this->mockDatabase->expects(self::never())->method(
'insert');
165 $instance->setForumId(0);
166 $this->assertFalse($instance->insert());
173 $instance->setForumId(789);
174 $instance->setSubject(
'abc');
175 $instance->setNumPosts(67);
176 $instance->setLastPostString(
'hej');
177 $instance->setAverageRating(27);
180 $this->mockDatabase->expects(self::once())->method(
'manipulateF'),
181 [
'integer',
'text',
'timestamp',
'integer',
'text',
'text',
'integer'],
192 $this->assertTrue($instance->update());
198 $this->mockDatabase->expects(self::never())->method(
'manipulateF');
199 $instance->setForumId(0);
200 $this->assertFalse($instance->update());
205 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
206 $mockStatement->expects(self::once())->method(
'fetchRow')->willReturn(
null);
207 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturn($mockStatement);
209 $instance->setId(89);
217 $stdObject->pos_fk = 5678;
218 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
219 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
220 'SELECT pos_fk FROM frm_posts_tree WHERE thr_fk = %s AND parent_pos = %s AND depth = %s ORDER BY rgt DESC',
221 [
'integer',
'integer',
'integer'],
223 )->willReturn($mockStatement);
224 $this->mockDatabase->expects(self::once())->method(
'fetchObject')->with($mockStatement)->willReturn($stdObject);
227 $instance->setId(
$id);
228 $this->assertSame($stdObject->pos_fk, $instance->getPostRootId());
235 $stdObject->pos_fk = 5678;
236 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
237 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
238 'SELECT pos_fk FROM frm_posts_tree WHERE thr_fk = %s AND parent_pos != %s AND depth = %s ORDER BY rgt DESC',
239 [
'integer',
'integer',
'integer'],
241 )->willReturn($mockStatement);
242 $this->mockDatabase->expects(self::once())->method(
'fetchObject')->with($mockStatement)->willReturn($stdObject);
245 $instance->setId(
$id);
246 $this->assertSame($stdObject->pos_fk, $instance->getFirstVisiblePostId());
252 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
253 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
254 'SELECT pos_fk FROM frm_posts_tree WHERE thr_fk = %s AND parent_pos = %s AND depth = %s ORDER BY rgt DESC',
255 [
'integer',
'integer',
'integer'],
257 )->willReturn($mockStatement);
258 $this->mockDatabase->expects(self::once())->method(
'fetchObject')->with($mockStatement)->willReturn(
null);
261 $instance->setId(
$id);
262 $this->assertSame(0, $instance->getPostRootId());
268 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
269 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
270 'SELECT pos_fk FROM frm_posts_tree WHERE thr_fk = %s AND parent_pos != %s AND depth = %s ORDER BY rgt DESC',
271 [
'integer',
'integer',
'integer'],
273 )->willReturn($mockStatement);
274 $this->mockDatabase->expects(self::once())->method(
'fetchObject')->with($mockStatement)->willReturn(
null);
277 $instance->setId(
$id);
278 $this->assertSame(0, $instance->getFirstVisiblePostId());
284 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
286 $this->mockDatabase->expects(self::once())->method(
'queryF'),
289 )->willReturn($mockStatement);
290 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
'cnt' => 678]);
293 $instance->setId(
$id);
294 $this->assertSame(678, $instance->countPosts(
true));
300 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
302 $this->mockDatabase->expects(self::once())->method(
'queryF'),
305 )->willReturn($mockStatement);
306 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn(
null);
309 $instance->setId(
$id);
310 $this->assertSame(0, $instance->countPosts(
true));
317 $this->mockUser->expects(self::once())->method(
'getId')->willReturn($userId);
318 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
320 $this->mockDatabase->expects(self::once())->method(
'queryF'),
321 [
'integer',
'integer',
'integer',
'integer'],
322 [
'1',
'0', $userId,
$id]
323 )->willReturn($mockStatement);
324 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
'cnt' => 79]);
327 $instance->setId(
$id);
328 $this->assertSame(79, $instance->countActivePosts(
true));
335 $this->mockUser->expects(self::once())->method(
'getId')->willReturn($userId);
336 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
338 $this->mockDatabase->expects(self::once())->method(
'queryF'),
339 [
'integer',
'integer',
'integer',
'integer'],
340 [
'1',
'0', $userId,
$id]
341 )->willReturn($mockStatement);
342 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn(
null);
345 $instance->setId(
$id);
346 $this->assertSame(0, $instance->countActivePosts(
true));
352 $firstRow->pos_pk = 89;
354 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
355 $mockStatement->expects(self::exactly(2))
358 ->willReturnOnConsecutiveCalls($firstRow,
null);
359 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
360 'SELECT pos_pk FROM frm_posts WHERE pos_thr_fk = %s',
363 )->willReturn($mockStatement);
366 $instance->setId(
$id);
367 $this->assertSame([$firstRow->pos_pk => $firstRow->pos_pk], $instance->getAllPostIds());
376 $instance->setId(
$id);
378 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
379 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
380 'SELECT COUNT(notification_id) cnt FROM frm_notification WHERE user_id = %s AND thread_id = %s',
381 [
'integer',
'integer'],
383 )->willReturn($mockStatement);
384 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
'cnt' => 46]);
386 $this->assertTrue($instance->isNotificationEnabled($userId));
395 $instance->setId(
$id);
397 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
398 $this->mockDatabase->expects(self::once())->method(
'queryF')->with(
399 'SELECT COUNT(notification_id) cnt FROM frm_notification WHERE user_id = %s AND thread_id = %s',
400 [
'integer',
'integer'],
402 )->willReturn($mockStatement);
403 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn(
null);
405 $this->assertFalse($instance->isNotificationEnabled($userId));
414 $instance->setId(
$id);
416 $this->mockDatabase->expects(self::never())->method(
'queryF');
417 $this->mockDatabase->expects(self::never())->method(
'fetchAssoc');
419 $this->assertFalse($instance->isNotificationEnabled($userId));
428 $mockStatement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
429 $this->mockDatabase->expects(self::once())->method(
'nextId')->with(
'frm_notification')->willReturn($nextId);
430 $this->mockDatabase->expects(self::once())->method(
'queryF')->willReturn($mockStatement);
432 $this->mockDatabase->expects(self::once())->method(
'manipulateF'),
433 [
'integer',
'integer',
'integer'],
434 [$nextId, $userId,
$id]
436 $this->mockDatabase->expects(self::once())->method(
'fetchAssoc')->with($mockStatement)->willReturn([
'cnt' => 0]);
439 $instance->setId(
$id);
440 $instance->enableNotification($userId);
448 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->with(
449 'DELETE FROM frm_notification WHERE user_id = %s AND thread_id = %s',
450 [
'integer',
'integer'],
455 $instance->setId(
$id);
456 $instance->disableNotification($userId);
463 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->with(
464 'UPDATE frm_threads SET is_sticky = %s WHERE thr_pk = %s',
465 [
'integer',
'integer'],
470 $instance->setId(
$id);
471 $this->assertTrue($instance->makeSticky());
476 $this->mockDatabase->expects(self::never())->method(
'manipulateF');
479 $this->assertFalse($instance->makeSticky());
486 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->with(
487 'UPDATE frm_threads SET is_sticky = %s WHERE thr_pk = %s',
488 [
'integer',
'integer'],
493 $instance->setId(
$id);
494 $instance->setSticky(
true);
495 $this->assertTrue($instance->unmakeSticky());
502 $this->mockDatabase->expects(self::never())->method(
'manipulateF');
505 $instance->setId(
$id);
506 $this->assertFalse($instance->unmakeSticky());
513 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->with(
514 'UPDATE frm_threads SET is_closed = %s WHERE thr_pk = %s',
515 [
'integer',
'integer'],
520 $instance->setId(
$id);
521 $instance->setClosed(
false);
529 $this->mockDatabase->expects(self::once())->method(
'manipulateF')->with(
530 'UPDATE frm_threads SET is_closed = %s WHERE thr_pk = %s',
531 [
'integer',
'integer'],
536 $instance->setId(
$id);
537 $instance->setClosed(
true);
545 $this->dic = is_object($DIC) ? clone
$DIC :
$DIC;
549 $this->mockDatabase = $this->getMockBuilder(ilDBInterface::class)->getMock();
550 $this->mockUser = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
565 private function withIgnoredQuery(InvocationMocker $mock, array ...$expected): InvocationMocker
567 return $mock->willReturnCallback(
function ($ignored, ...$actual) use ($expected):
void {
568 $this->assertSame($expected, $actual);
Customizing of pimple-DIC for ILIAS.
testGetFirstVisiblePostId()
withIgnoredQuery(InvocationMocker $mock, array ... $expected)
testIsNotificationEnabledNoResult()
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
testGetPostRootIdFailed()
testIsNotificationEnabledInvalidIds()
MockObject &ilObjUser $mockUser
testDisableNotification()
testIsNotificationEnabled()
MockObject &ilDBInterface $mockDatabase
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
testCountActivePostsFailed()
testGetFirstVisiblePostIdFailed()