ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
ilStudyProgrammeLPTest.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 2015 Richard Klees <richard.klees@concepts-and-training.de> Extended GPL, see docs/LICENSE */
4 
6 
7 require_once(__DIR__ . "/mocks.php");
8 
18 {
19  protected $backupGlobals = false;
20 
21  protected function setUp() : void
22  {
23  require_once("./Modules/StudyProgramme/classes/class.ilObjStudyProgramme.php");
24  PHPUnit\Framework\Error\Deprecated::$enabled = false;
25 
26  global $DIC;
27  if (!$DIC) {
28  include_once("./Services/PHPUnit/classes/class.ilUnitUtil.php");
29  ilUnitUtil::performInitialisation();
30  }
31 
33  $this->root->putInTree(ROOT_FOLDER_ID);
34  $this->root->object_factory = new ilObjectFactoryWrapperMock();
35 
36  $this->node1 = ilObjStudyProgramme::createInstance();
37  $this->node2 = ilObjStudyProgramme::createInstance();
38 
39  $this->leaf1 = new ilStudyProgrammeLeafMock();
40  $this->leaf2 = new ilStudyProgrammeLeafMock();
41 
42  $this->root->addNode($this->node1);
43  $this->root->addNode($this->node2);
44  $this->node1->addLeaf($this->leaf1);
45  $this->node2->addLeaf($this->leaf2);
46 
47  global $DIC;
48  $tree = $DIC['tree'];
49  $this->tree = $tree;
50 
51  global $DIC;
52  $ilUser = $DIC['ilUser'];
53  $this->user = $ilUser;
54  }
55 
56  protected function tearDown() : void
57  {
58  if ($this->root) {
59  $this->root->delete();
60  }
61  }
62 
63  protected function newUser()
64  {
65  $user = new ilObjUser();
66  $user->create();
67  return $user;
68  }
69 
70  protected function setAllNodesActive()
71  {
72  $this->root->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
73  $this->node1->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
74  $this->node2->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
75  }
76 
77  protected function assignNewUserToRoot()
78  {
79  $user = $this->newUser();
80  return array($this->root->assignUser($user->getId(), 6), $user);
81  }
82 
83  public function testInitialLPActive()
84  {
85  $this->setAllNodesActive();
86  $tmp = $this->assignNewUserToRoot();
87  $ass = $tmp[0];
88  $user = $tmp[1];
89 
90  require_once("Services/Tracking/classes/class.ilLPStatusWrapper.php");
91  require_once("Services/Tracking/classes/class.ilLPStatus.php");
92  $this->assertEquals(
94  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
95  );
96  $this->assertEquals(
98  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
99  );
100  $this->assertEquals(
102  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
103  );
104  }
105 
106  public function testInitialLPDraft()
107  {
108  $this->root->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
109  $this->node1->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
110  $this->node2->setStatus(ilStudyProgrammeSettings::STATUS_DRAFT)->update();
111 
112  $tmp = $this->assignNewUserToRoot();
113  $user = $tmp[1];
114  $ass = $tmp[0];
115 
116  require_once("Services/Tracking/classes/class.ilLPStatusWrapper.php");
117  require_once("Services/Tracking/classes/class.ilLPStatus.php");
118  $this->assertEquals(
120  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
121  );
122  $this->assertEquals(
124  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
125  );
126  $this->assertEquals(
128  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
129  );
130  }
131 
132  public function testInitialProgressOutdated()
133  {
134  $this->root->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
135  $this->node1->setStatus(ilStudyProgrammeSettings::STATUS_ACTIVE)->update();
136  $this->node2->setStatus(ilStudyProgrammeSettings::STATUS_OUTDATED)->update();
137 
138  $tmp = $this->assignNewUserToRoot();
139  $user = $tmp[1];
140  $ass = $tmp[0];
141 
142  require_once("Services/Tracking/classes/class.ilLPStatusWrapper.php");
143  require_once("Services/Tracking/classes/class.ilLPStatus.php");
144  $this->assertEquals(
146  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
147  );
148  $this->assertEquals(
150  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
151  );
152  $this->assertEquals(
154  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
155  );
156  }
157 
158  public function testMarkAccredited()
159  {
160  $this->setAllNodesActive();
161  $tmp = $this->assignNewUserToRoot();
162  $ass = $tmp[0];
163  $user = $tmp[1];
164 
165  $user2 = $this->newUser();
166  $USER_ID = $user2->getId();
167 
168  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
169  $node2_progress->markAccredited($USER_ID);
170 
171  require_once("Services/Tracking/classes/class.ilLPStatusWrapper.php");
172  require_once("Services/Tracking/classes/class.ilLPStatus.php");
173  $this->assertEquals(
175  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
176  );
177  $this->assertEquals(
179  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
180  );
181  $this->assertEquals(
183  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
184  );
185  }
186 
187  public function testUnmarkAccredited()
188  {
189  $this->setAllNodesActive();
190  $tmp = $this->assignNewUserToRoot();
191  $ass = $tmp[0];
192  $user = $tmp[1];
193 
194  $user2 = $this->newUser();
195  $USER_ID = $user2->getId();
196 
197  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
198  $node2_progress->markAccredited($USER_ID);
199 
200  $this->assertEquals(
202  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
203  );
204 
205  $node2_progress->unmarkAccredited();
206 
207  $this->assertEquals(
209  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
210  );
211  $this->assertEquals(
213  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
214  );
215  $this->assertEquals(
217  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
218  );
219  }
220 
221 
222  public function testMarkNotRelevant()
223  {
224  $this->setAllNodesActive();
225  $tmp = $this->assignNewUserToRoot();
226  $ass = $tmp[0];
227  $user = $tmp[1];
228 
229  $user2 = $this->newUser();
230  $USER_ID = $user2->getId();
231 
232  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
233  $node2_progress->markNotRelevant($USER_ID);
234 
235  $this->assertEquals(
237  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
238  );
239  $this->assertEquals(
241  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
242  );
243  $this->assertEquals(
245  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
246  );
247  }
248 
249  public function testMarkFailed()
250  {
251  $this->setAllNodesActive();
252  $tmp = $this->assignNewUserToRoot();
253  $ass = $tmp[0];
254  $user = $tmp[1];
255 
256  $user2 = $this->newUser();
257  $USER_ID = $user2->getId();
258 
259  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
260  $node2_progress->markFailed($USER_ID);
261 
262  $this->assertEquals(
264  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
265  );
266  $this->assertEquals(
268  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
269  );
270  $this->assertEquals(
272  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
273  );
274  }
275 
276  public function testMarkNotFailed()
277  {
278  $this->setAllNodesActive();
279  $tmp = $this->assignNewUserToRoot();
280  $ass = $tmp[0];
281  $user = $tmp[1];
282 
283  $user2 = $this->newUser();
284  $USER_ID = (int) $user2->getId();
285 
286  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
287  $node2_progress->markFailed($USER_ID);
288 
289  $this->assertEquals(
291  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
292  );
293  $this->assertEquals(
295  ilLPStatusWrapper::_determineStatus($this->node1->getId(), $user->getId())
296  );
297  $this->assertEquals(
299  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
300  );
301 
302  $node2_progress->markNotFailed($USER_ID);
303  $this->assertEquals(
305  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
306  );
307  }
308 
309  // Neues Moduls: Wird dem Studierenden-Studierenden inkl. Kurse, Punkte als "Nicht relevant" hinzugefügt.
310  public function testNewNodesAreNotRelevant()
311  {
312  $this->setAllNodesActive();
313  $tmp = $this->assignNewUserToRoot();
314  $ass = $tmp[0];
315  $user = $tmp[1];
316 
318  $this->root->addNode($node3);
319 
320  $node3_progress = array_shift($node3->getProgressesOf($user->getId()));
321  $this->assertNotNull($node3_progress);
322  $this->assertEquals(
324  ilLPStatusWrapper::_determineStatus($node3->getId(), $user->getId())
325  );
326  }
327 
328  public function test_invalidate()
329  {
330  $progress_repo = ilStudyProgrammeDIC::dic()['model.Progress.ilStudyProgrammeProgressRepository'];
331  $this->setAllNodesActive();
332  $yesterday = new DateTime();
333  $yesterday->sub(new DateInterval('P1D'));
334 
335  $tmp = $this->assignNewUserToRoot();
336  $ass = $tmp[0];
337  $user = $tmp[1];
338 
339  $node2_progress = array_shift($this->node2->getProgressesOf($user->getId()));
340  $node2_progress->markAccredited(6);
341 
342  $this->assertEquals(
344  ilLPStatusWrapper::_determineStatus($this->node2->getId(), $user->getId())
345  );
346  $this->assertEquals(
348  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
349  );
350  $progress_repo->update(
351  $progress_repo->readByIds((int) $this->root->getId(), (int) $ass->getId(), (int) $user->getId())
352  ->setValidityOfQualification($yesterday)
353  );
354 
355  $root_progress = array_shift($this->root->getProgressesOf($user->getId()));
356  $this->assertTrue($root_progress->isSuccessfulExpired());
357  $this->assertFalse($root_progress->isInvalidated());
358  $root_progress->invalidate();
359  $root_progress = array_shift($this->root->getProgressesOf($user->getId()));
360  $this->assertTrue($root_progress->isSuccessfulExpired());
361  $this->assertTrue($root_progress->isInvalidated());
362  $this->assertEquals(
364  ilLPStatusWrapper::_determineStatus($this->root->getId(), $user->getId())
365  );
366  }
367 }
const LP_STATUS_COMPLETED_NUM
Mock classes for tests.
Definition: mocks.php:20
const LP_STATUS_IN_PROGRESS_NUM
user()
Definition: user.php:4
$ilUser
Definition: imgupload.php:18
const LP_STATUS_NOT_ATTEMPTED_NUM
$DIC
Definition: xapitoken.php:46
static createInstance()
Create an instance of ilObjStudyProgramme, put in cache.
Mock for object factory.
Definition: mocks.php:68
static _determineStatus($a_obj_id, $a_usr_id)
Determine status.
const LP_STATUS_FAILED_NUM
TestCase for the learning progress of users at a programme.