ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ilIndividualAssessmentMembersStorageDBTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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);
60  $stakeholder = new ilIndividualAssessmentGradingStakeholder();
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
86  . " ,usr.firstname as " . ilIndividualAssessmentMembers::FIELD_FIRSTNAME
87  . " ,usr.lastname as " . ilIndividualAssessmentMembers::FIELD_LASTNAME
88  . " ,usr.login as " . ilIndividualAssessmentMembers::FIELD_LOGIN
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 = [
503  ilIndividualAssessmentMembers::FIELD_RECORD => ["text", "record"],
504  ilIndividualAssessmentMembers::FIELD_INTERNAL_NOTE => ["text", "internalNote"],
505  ilIndividualAssessmentMembers::FIELD_PLACE => ["text", "place"],
507  ilIndividualAssessmentMembers::FIELD_NOTIFY => ["integer", true],
510  ilIndividualAssessmentMembers::FIELD_FILE_NAME => ["text", "fileName"],
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],
591  ilIndividualAssessmentMembers::FIELD_NOTIFY => ["integer", true],
595  ilIndividualAssessmentMembers::FIELD_RECORD => ["text", "record"],
596  ilIndividualAssessmentMembers::FIELD_INTERNAL_NOTE => ["text", "internalNote"],
597  ilIndividualAssessmentMembers::FIELD_PLACE => ["text", "place"],
599  ilIndividualAssessmentMembers::FIELD_FILE_NAME => ["text", "fileName"],
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 
689  public function test_getWhereFromFilter($filter, $result): void
690  {
691  $db = $this->createMock(ilDBInterface::class);
692  $obj = $this->getWrapperObj($db);
693  $res = $obj->getWhereFromFilterWrapper($filter);
694 
695  $this->assertEquals($result, $res);
696  }
697 
698  public function test_getOrderByFromSort(): void
699  {
700  $db = $this->createMock(ilDBInterface::class);
701  $obj = $this->getWrapperObj($db);
702 
703  $sort = "test:foo";
704 
705  $res = $obj->getOrderByFromSortWrapper($sort);
706 
707  $this->assertEquals(" ORDER BY test foo", $res);
708  }
709 }
createAssessmentMember(ilObjIndividualAssessment $obj, ilObjUser $usr, array $record)
$res
Definition: ltiservices.php:66
For the purpose of streamlining the grading and learning-process status definition outside of tests...
test_getWhereFromFilter($filter, $result)
dataFor_getWhereFromFilter
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
createAssessmentMemberWrapper(ilObjIndividualAssessment $obj, ilObjUser $usr, array $record)
Edit the record of a user, set LP.
foreach($mandatory_scripts as $file) $timestamp
Definition: buildRTE.php:70