ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilIndividualAssessmentMembersStorageDBTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\TestCase;
23
25{
28 ilObjUser $usr,
29 array $record
31 return $this->createAssessmentMember($obj, $usr, $record);
32 }
33
34 // The access modifier is changed to public here to allow the actual test
35 // to access this.
36 public function getActualDateTime(): string
37 {
38 return "2021-12-02 12:55:33";
39 }
40
44 public function getWhereFromFilterWrapper($filter): string
45 {
46 return $this->getWhereFromFilter($filter);
47 }
48
49 public function getOrderByFromSortWrapper(string $sort): string
50 {
51 return $this->getOrderByFromSort($sort);
52 }
53}
54
56{
58 {
59 $irss = $this->createMock(IRSS::class);
62 $db,
63 $irss,
64 $stakeholder
65 );
66 }
67
68 public function testCreateObject(): void
69 {
70 $db = $this->createMock(ilDBInterface::class);
71 $irss = $this->createMock(IRSS::class);
73 $db,
74 $irss,
76 );
77 $this->assertInstanceOf(ilIndividualAssessmentMembersStorageDB::class, $obj);
78 }
79
80 public function test_loadMembers(): void
81 {
82 $sql = "SELECT ex.firstname as " . ilIndividualAssessmentMembers::FIELD_EXAMINER_FIRSTNAME
90 . " ,iassme.obj_id, iassme.usr_id, iassme.examiner_id, iassme.record, iassme.internal_note, iassme.notify"
91 . " ,iassme.notification_ts, iassme.learning_progress, iassme.finalized,iassme.place"
92 . " ,iassme.event_time, iassme.changer_id, iassme.change_time\n"
93 . " FROM iass_members iassme"
94 . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id"
95 . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id"
96 . " LEFT JOIN usr_data ud ON iassme.changer_id = ud.usr_id"
97 . " WHERE obj_id = 22";
98
99
100 $iass = $this->createMock(ilObjIndividualAssessment::class);
101 $iass
102 ->expects($this->once())
103 ->method("getId")
104 ->willReturn(22)
105 ;
106
107 $db_statement = $this->createMock(ilDBStatement::class);
108
109 $db = $this->createMock(ilDBInterface::class);
110 $db
111 ->expects($this->once())
112 ->method("quote")
113 ->with(22, "integer")
114 ->willReturn("22")
115 ;
116 $db
117 ->expects($this->once())
118 ->method("query")
119 ->with($sql)
120 ->willReturn($db_statement)
121 ;
122 $db
123 ->expects($this->any())
124 ->method("fetchAssoc")
125 ->with($db_statement)
126 ->willReturn(null)
127 ;
128
130 $db,
131 $this->createMock(IRSS::class),
133 );
134
135 $result = $obj->loadMembers($iass);
136 $this->assertInstanceOf(ilIndividualAssessmentMembers::class, $result);
137 }
138
139 public function test_loadMembersAsSingleObjects(): void
140 {
141 $sql = "SELECT "
142 . "iassme.obj_id,"
143 . "iassme.usr_id,"
144 . "iassme.examiner_id,"
145 . "iassme.record,"
146 . "iassme.internal_note,"
147 . "iassme.notify,"
148 . "iassme.notification_ts,"
149 . "iassme.learning_progress,"
150 . "iassme.finalized,"
151 . "iassme.place,"
152 . "iassme.event_time,"
153 . "iassme.user_view_file,"
154 . "iassme.file_name,"
155 . "iassme.changer_id,"
156 . "iassme.change_time,"
157 . "usr.login AS user_login,"
158 . "ex.login AS examiner_login"
160 . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id\n"
161 . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id\n"
162 . " WHERE obj_id = 22"
163 ;
164
165 $iass = $this->createMock(ilObjIndividualAssessment::class);
166 $iass
167 ->expects($this->once())
168 ->method("getId")
169 ->willReturn(22)
170 ;
171
172 $db_statement = $this->createMock(ilDBStatement::class);
173
174 $db = $this->createMock(ilDBInterface::class);
175 $db
176 ->expects($this->once())
177 ->method("quote")
178 ->with(22, "integer")
179 ->willReturn("22")
180 ;
181 $db
182 ->expects($this->once())
183 ->method("query")
184 ->with($sql)
185 ->willReturn($db_statement)
186 ;
187 $db
188 ->expects($this->once())
189 ->method("fetchAssoc")
190 ->with($db_statement)
191 ->willReturn(null)
192 ;
193
194 $irss = $this->createMock(IRSS::class);
195 $stakeholder = new ilIndividualAssessmentGradingStakeholder();
196 $obj = new ilIndividualAssessmentMembersStorageDB($db, $irss, $stakeholder);
197 $result = $obj->loadMembersAsSingleObjects($iass);
198
199 $this->assertIsArray($result);
200 $this->assertEmpty($result);
201 }
202
203 public function test_loadMember_exception(): void
204 {
205 $sql = "SELECT "
206 . "iassme.obj_id,"
207 . "iassme.usr_id,"
208 . "iassme.examiner_id,"
209 . "iassme.record,"
210 . "iassme.internal_note,"
211 . "iassme.notify,"
212 . "iassme.notification_ts,"
213 . "iassme.learning_progress,"
214 . "iassme.finalized,"
215 . "iassme.place,"
216 . "iassme.event_time,"
217 . "iassme.user_view_file,"
218 . "iassme.file_name,"
219 . "iassme.changer_id,"
220 . "iassme.change_time,"
221 . "usr.login AS user_login,"
222 . "ex.login AS examiner_login"
224 . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id\n"
225 . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id\n"
226 . " WHERE obj_id = 22\n"
227 . " AND iassme.usr_id = 33"
228 ;
229
230 $iass = $this->createMock(ilObjIndividualAssessment::class);
231 $iass
232 ->expects($this->once())
233 ->method("getId")
234 ->willReturn(22)
235 ;
236
237 $usr = $this->createMock(ilObjUser::class);
238 $usr
239 ->expects($this->once())
240 ->method("getId")
241 ->willReturn(33)
242 ;
243
244 $db_statement = $this->createMock(ilDBStatement::class);
245
246 $consecutive = [
247 [22, "integer"],
248 [33, "integer"]
249 ];
250 $db = $this->createMock(ilDBInterface::class);
251 $db
252 ->expects($this->exactly(2))
253 ->method("quote")
254 ->willReturnCallback(
255 function (int $v, string $type) use (&$consecutive) {
256 list($ev, $etype) = array_shift($consecutive);
257 $this->assertEquals($ev, $v);
258 $this->assertEquals($etype, $type);
259 return (string)$v;
260 }
261 );
262
263 $db
264 ->expects($this->once())
265 ->method("query")
266 ->with($sql)
267 ->willReturn($db_statement)
268 ;
269 $db
270 ->expects($this->once())
271 ->method("fetchAssoc")
272 ->with($db_statement)
273 ->willReturn(null)
274 ;
275
276 $irss = $this->createMock(IRSS::class);
277 $stakeholder = new ilIndividualAssessmentGradingStakeholder();
278 $obj = new ilIndividualAssessmentMembersStorageDB($db, $irss, $stakeholder);
279
280 $this->expectException(ilIndividualAssessmentException::class);
281 $this->expectExceptionMessage("invalid usr-obj combination");
282 $obj->loadMember($iass, $usr);
283 }
284
285 public function test_loadMember(): void
286 {
287 $sql = "SELECT "
288 . "iassme.obj_id,"
289 . "iassme.usr_id,"
290 . "iassme.examiner_id,"
291 . "iassme.record,"
292 . "iassme.internal_note,"
293 . "iassme.notify,"
294 . "iassme.notification_ts,"
295 . "iassme.learning_progress,"
296 . "iassme.finalized,"
297 . "iassme.place,"
298 . "iassme.event_time,"
299 . "iassme.user_view_file,"
300 . "iassme.file_name,"
301 . "iassme.changer_id,"
302 . "iassme.change_time,"
303 . "usr.login AS user_login,"
304 . "ex.login AS examiner_login"
306 . " JOIN usr_data usr ON iassme.usr_id = usr.usr_id\n"
307 . " LEFT JOIN usr_data ex ON iassme.examiner_id = ex.usr_id\n"
308 . " WHERE obj_id = 22\n"
309 . " AND iassme.usr_id = 33"
310 ;
311
312 $iass = $this->createMock(ilObjIndividualAssessment::class);
313 $iass
314 ->expects($this->once())
315 ->method("getId")
316 ->willReturn(22)
317 ;
318
319 $usr = $this->createMock(ilObjUser::class);
320 $usr
321 ->expects($this->once())
322 ->method("getId")
323 ->willReturn(33)
324 ;
325
326 $db_statement = $this->createMock(ilDBStatement::class);
327
328 $consecutive = [
329 [22, "integer"],
330 [33, "integer"]
331 ];
332 $db = $this->createMock(ilDBInterface::class);
333 $db
334 ->expects($this->exactly(2))
335 ->method("quote")
336 ->willReturnCallback(
337 function (int $v, string $type) use (&$consecutive) {
338 list($ev, $etype) = array_shift($consecutive);
339 $this->assertEquals($ev, $v);
340 $this->assertEquals($etype, $type);
341 return (string)$v;
342 }
343 );
344
345 $db
346 ->expects($this->once())
347 ->method("query")
348 ->with($sql)
349 ->willReturn($db_statement)
350 ;
351 $db
352 ->expects($this->once())
353 ->method("fetchAssoc")
354 ->with($db_statement)
355 ->willReturn(null)
356 ;
357
358 $irss = $this->createMock(IRSS::class);
359 $stakeholder = new ilIndividualAssessmentGradingStakeholder();
360 $obj = new ilIndividualAssessmentMembersStorageDB($db, $irss, $stakeholder);
361
362 $this->expectException(ilIndividualAssessmentException::class);
363 $this->expectExceptionMessage("invalid usr-obj combination");
364 $obj->loadMember($iass, $usr);
365 }
366
367 public function test_createAssessmentMember(): void
368 {
369 $iass = $this->createMock(ilObjIndividualAssessment::class);
370 $usr = $this->createMock(ilObjUser::class);
371 $usr
372 ->expects($this->once())
373 ->method("getFullname")
374 ->willReturn("Full Name")
375 ;
376
377 $timestamp = 1638431626;
378
379 $record = [
393 ];
394
395 $db = $this->createMock(ilDBInterface::class);
396 $obj = $this->getWrapperObj($db);
397
398 $member = $obj->createAssessmentMemberWrapper($iass, $usr, $record);
399
400 $this->assertEquals("Full Name", $member->getGrading()->getName());
401 $this->assertEquals(11, $member->changerId());
402 $this->assertEquals("2021-12-02", $member->changeTime()->format("Y-m-d"));
403 $this->assertEquals(22, $member->examinerId());
404 $this->assertEquals($timestamp, $member->notificationTS());
405 $this->assertEquals($timestamp, $member->eventTime()->getTimestamp());
406 $this->assertEquals("record", $member->record());
407 $this->assertEquals("internal_note", $member->internalNote());
408 $this->assertEquals("file_name", $member->fileName());
409 $this->assertTrue($member->viewFile());
410 $this->assertEquals(33, $member->LPStatus());
411 $this->assertTrue($member->notify());
412 $this->assertTrue($member->finalized());
413 }
414
415 public function test_updateMember(): void
416 {
417 $timestamp = 1638431626;
418 $date = (new DateTimeImmutable())->setTimestamp($timestamp);
419
420 $member = $this->createMock(ilIndividualAssessmentMember::class);
421 $member
422 ->expects($this->once())
423 ->method("assessmentId")
424 ->willReturn(11)
425 ;
426 $member
427 ->expects($this->once())
428 ->method("id")
429 ->willReturn(22)
430 ;
431 $member
432 ->expects($this->once())
433 ->method("eventTime")
434 ->willReturn($date)
435 ;
436 $member
437 ->expects($this->once())
438 ->method("LPStatus")
439 ->willReturn(33)
440 ;
441 $member
442 ->expects($this->once())
443 ->method("examinerId")
444 ->willReturn(44)
445 ;
446 $member
447 ->expects($this->once())
448 ->method("record")
449 ->willReturn("record")
450 ;
451 $member
452 ->expects($this->once())
453 ->method("internalNote")
454 ->willReturn("internalNote")
455 ;
456 $member
457 ->expects($this->once())
458 ->method("place")
459 ->willReturn("place")
460 ;
461 $member
462 ->expects($this->once())
463 ->method("notify")
464 ->willReturn(true)
465 ;
466 $member
467 ->expects($this->once())
468 ->method("finalized")
469 ->willReturn(true)
470 ;
471 $member
472 ->expects($this->once())
473 ->method("notificationTS")
474 ->willReturn($timestamp)
475 ;
476 $member
477 ->expects($this->once())
478 ->method("fileName")
479 ->willReturn("fileName")
480 ;
481 $member
482 ->expects($this->once())
483 ->method("viewFile")
484 ->willReturn(true)
485 ;
486 $member
487 ->expects($this->once())
488 ->method("changerId")
489 ->willReturn(55)
490 ;
491
492 $db = $this->createMock(ilDBInterface::class);
493 $obj = $this->getWrapperObj($db);
494
495 $where = [
496 "obj_id" => ["integer", 11],
497 "usr_id" => ["integer", 22]
498 ];
499
500 $values = [
504 ilIndividualAssessmentMembers::FIELD_INTERNAL_NOTE => ["text", "internalNote"],
513 ilIndividualAssessmentMembers::FIELD_CHANGE_TIME => ["string", $obj->getActualDateTime()]
514 ];
515
516 $db
517 ->expects($this->once())
518 ->method("update")
519 ->with("iass_members", $values, $where)
520 ;
521
522
523 $obj->updateMember($member);
524 }
525
526 public function test_deleteMembers(): void
527 {
528 $iass = $this->createMock(ilObjIndividualAssessment::class);
529 $iass
530 ->expects($this->exactly(2))
531 ->method("getId")
532 ->willReturn(22)
533 ;
534
535 $sql = "DELETE FROM iass_members WHERE obj_id = 22";
536
537 $db = $this->createMock(ilDBInterface::class);
538 $db
539 ->expects($this->any())
540 ->method("quote")
541 ->with(22, "integer")
542 ->willReturn("22")
543 ;
544 $db
545 ->expects($this->once())
546 ->method("manipulate")
547 ->with($sql)
548 ;
549
550 $irss = $this->createMock(IRSS::class);
551 $stakeholder = new ilIndividualAssessmentGradingStakeholder();
552 $obj = new ilIndividualAssessmentMembersStorageDB($db, $irss, $stakeholder);
553 $obj->deleteMembers($iass);
554 }
555
556 public function test_insertMembersRecord(): void
557 {
558 $timestamp = 1638431626;
559
560 $iass = $this->createMock(ilObjIndividualAssessment::class);
561 $iass
562 ->expects($this->once())
563 ->method("getId")
564 ->willReturn(11)
565 ;
566
567 $db = $this->createMock(ilDBInterface::class);
568 $obj = $this->getWrapperObj($db);
569
570 $record = [
584 ilIndividualAssessmentMembers::FIELD_CHANGE_TIME => $obj->getActualDateTime()
585 ];
586
587 $values = [
588 "obj_id" => ["integer", 11],
596 ilIndividualAssessmentMembers::FIELD_INTERNAL_NOTE => ["text", "internalNote"],
602 ilIndividualAssessmentMembers::FIELD_CHANGE_TIME => ["text", $obj->getActualDateTime()]
603 ];
604
605 $db
606 ->expects($this->once())
607 ->method("insert")
608 ->with("iass_members", $values)
609 ;
610
611 $obj->insertMembersRecord($iass, $record);
612 }
613
614 public function test_removeMembersRecord(): void
615 {
616 $iass = $this->createMock(ilObjIndividualAssessment::class);
617 $iass
618 ->expects($this->once())
619 ->method("getId")
620 ->willReturn(11)
621 ;
622
624
625 $sql =
626 "DELETE FROM iass_members" . PHP_EOL
627 . "WHERE obj_id = 11" . PHP_EOL
628 . "AND usr_id = 22" . PHP_EOL
629 ;
630
631 $consecutive = [
632 [11, "integer"],
633 [22, "integer"]
634 ];
635 $db = $this->createMock(ilDBInterface::class);
636 $db
637 ->expects($this->exactly(2))
638 ->method("quote")
639 ->willReturnCallback(
640 function (int $v, string $type) use (&$consecutive) {
641 list($ev, $etype) = array_shift($consecutive);
642 $this->assertEquals($ev, $v);
643 $this->assertEquals($etype, $type);
644 return (string)$v;
645 }
646 );
647
648 $db
649 ->expects($this->once())
650 ->method("manipulate")
651 ->with($sql)
652 ;
653
654 $irss = $this->createMock(IRSS::class);
655 $stakeholder = new ilIndividualAssessmentGradingStakeholder();
656 $obj = new ilIndividualAssessmentMembersStorageDB($db, $irss, $stakeholder);
657 $obj->removeMembersRecord($iass, $record);
658 }
659
660 public static function dataFor_getWhereFromFilter(): array
661 {
662 return [
663 [
665 " AND finalized = 0 AND examiner_id IS NULL\n"
666 ],
667 [
669 " AND finalized = 0 AND examiner_id IS NOT NULL\n"
670 ],
671 [
673 " AND finalized = 1 AND learning_progress = 2\n"
674 ],
675 [
677 " AND finalized = 1 AND learning_progress = 3\n"
678 ],
679 [
680 "test",
681 ""
682 ]
683 ];
684 }
685
686 #[\PHPUnit\Framework\Attributes\DataProvider('dataFor_getWhereFromFilter')]
687 public function test_getWhereFromFilter($filter, $result): void
688 {
689 $db = $this->createMock(ilDBInterface::class);
690 $obj = $this->getWrapperObj($db);
691 $res = $obj->getWhereFromFilterWrapper($filter);
692
693 $this->assertEquals($result, $res);
694 }
695
696 public function test_getOrderByFromSort(): void
697 {
698 $db = $this->createMock(ilDBInterface::class);
699 $obj = $this->getWrapperObj($db);
700
701 $sort = "test:foo";
702
703 $res = $obj->getOrderByFromSortWrapper($sort);
704
705 $this->assertEquals(" ORDER BY test foo", $res);
706 }
707}
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:70
return true
Edit the record of a user, set LP.
createAssessmentMemberWrapper(ilObjIndividualAssessment $obj, ilObjUser $usr, array $record)
createAssessmentMember(ilObjIndividualAssessment $obj, ilObjUser $usr, array $record)
For the purpose of streamlining the grading and learning-process status definition outside of tests,...
User class.
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface ilDBInterface.
$res
Definition: ltiservices.php:69