ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
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
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['3gp', '7z', 'ai', 'aif', 'aifc', 'aiff', 'au', 'arw', 'avi', 'backup', 'bak', 'bas', 'bpmn', 'bpmn2', 'bmp', 'bib', 'bibtex', 'bz', 'bz2', 'c', 'c++', 'cc', 'cct', 'cdf', 'cer', 'class', 'cls', 'conf', 'cpp', 'crt', 'crs', 'crw', 'cr2', 'css', 'cst', 'csv', 'cur', 'db', 'dcr', 'des', 'dng', 'doc', 'docx', 'dot', 'dotx', 'dtd', 'dvi', 'el', 'eps', 'epub', 'f', 'f77', 'f90', 'flv', 'for', 'g3', 'gif', 'gl', 'gan', 'ggb', 'gsd', 'gsm', 'gtar', 'gz', 'gzip', 'h', 'hpp', 'htm', 'html', 'htmls', 'ibooks', 'ico', 'ics', 'ini', 'ipynb', 'java', 'jbf', 'jpeg', 'jpg', 'js', 'jsf', 'jso', 'json', 'latex', 'lang', 'less', 'log', 'lsp', 'ltx', 'm1v', 'm2a', 'm2v', 'm3u', 'm4a', 'm4v', 'markdown', 'm', 'mat', 'md', 'mdl', 'mdown', 'mid', 'min', 'midi', 'mobi', 'mod', 'mov', 'movie', 'mp2', 'mp3', 'mp4', 'mpa', 'mpeg', 'mpg', 'mph', 'mpga', 'mpp', 'mpt', 'mpv', 'mpx', 'mv', 'mw', 'mv4', 'nb', 'nbp', 'nef', 'nif', 'niff', 'obj', 'obm', 'odt', 'ods', 'odp', 'odg', 'odf', 'oga', 'ogg', 'ogv', 'old', 'p', 'pas', 'pbm', 'pcl', 'pct', 'pcx', 'pdf', 'pgm', 'pic', 'pict', 'png', 'por', 'pov', 'project', 'properties', 'ppa', 'ppm', 'pps', 'ppsx', 'ppt', 'pptx', 'ppz', 'ps', 'psd', 'pwz', 'qt', 'qtc', 'qti', 'qtif', 'r', 'ra', 'ram', 'rar', 'rast', 'rda', 'rev', 'rexx', 'ris', 'rf', 'rgb', 'rm', 'rmd', 'rmi', 'rmm', 'rmp', 'rt', 'rtf', 'rtx', 'rv', 's', 's3m', 'sav', 'sbs', 'sec', 'sdml', 'sgm', 'sgml', 'smi', 'smil', 'srt', 'sps', 'spv', 'stl', 'svg', 'swa', 'swf', 'swz', 'tar', 'tex', 'texi', 'texinfo', 'text', 'tgz', 'tif', 'tiff', 'ttf', 'txt', 'tmp', 'uvproj', 'vdf', 'vimeo', 'viv', 'vivo', 'vrml', 'vsdx', 'vtt', 'wav', 'webm', 'wmv', 'wmx', 'wmz', 'woff', 'wwd', 'xhtml', 'xif', 'xls', 'xlsx', 'xmind', 'xml', 'xsl', 'xsd', 'zip']
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface ilDBInterface.
foreach($_POST as $key=> $value) $res