ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ilTestSessionTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
26{
28
29 protected function setUp(): void
30 {
32
33 $this->addGlobal_ilTabs();
35 $this->addGlobal_rbacsystem();
36 $this->addGlobal_ilHelp();
37 $this->addGlobal_ilToolbar();
40
41 $this->testObj = new ilTestSession(
42 $this->createMock(ilDBInterface::class),
43 $this->createMock(ilObjUser::class)
44 );
45 }
46
48 {
49 $this->assertInstanceOf(ilTestSession::class, $this->testObj);
50 }
51
52 public function testRefId(): void
53 {
54 $ref_id = 20;
55 $this->testObj->setRefId($ref_id);
56 $this->assertEquals($ref_id, $this->testObj->getRefId());
57 }
58
59 public function testActiveId(): void
60 {
61 $active_id = 20;
62 $this->testObj->active_id = $active_id;
63 $this->assertEquals($active_id, $this->testObj->getActiveId());
64 }
65
66 public function testUserId(): void
67 {
68 $user_id = 20;
69 $this->testObj->setUserId($user_id);
70 $this->assertEquals($user_id, $this->testObj->getUserId());
71 }
72
73 public function testTestId(): void
74 {
75 $test_id = 20;
76 $this->testObj->setTestId($test_id);
77 $this->assertEquals($test_id, $this->testObj->getTestId());
78 }
79
80 public function testAnonymousId(): void
81 {
82 $anonymous_id = '20';
83 $this->testObj->setAnonymousId($anonymous_id);
84 $this->assertEquals($anonymous_id, $this->testObj->getAnonymousId());
85 }
86
87 public function testLastSequence(): void
88 {
89 $lastsequence = 20;
90 $this->testObj->setLastSequence($lastsequence);
91 $this->assertEquals($lastsequence, $this->testObj->getLastSequence());
92 }
93
94 public function testPass(): void
95 {
96 $pass = 20;
97 $this->testObj->setPass($pass);
98 $this->assertEquals($pass, $this->testObj->getPass());
99 }
100
101 public function testIncreasePass(): void
102 {
103 $pass = 20;
104 $this->testObj->setPass($pass);
105 $this->assertEquals($pass, $this->testObj->getPass());
106
107 $this->testObj->increasePass();
108 $this->assertEquals(++$pass, $this->testObj->getPass());
109 }
110
111 public function testSubmitted(): void
112 {
113 $this->assertFalse($this->testObj->isSubmitted());
114 $this->testObj->setSubmitted();
115
116 $this->assertTrue($this->testObj->isSubmitted());
117 }
118
119 public function testSubmittedTimestamp(): void
120 {
121 $this->assertEmpty($this->testObj->getSubmittedTimestamp());
122 $this->testObj->setSubmittedTimestamp();
123
124 $this->assertIsString($this->testObj->getSubmittedTimestamp());
125 }
126
127 public function testLastFinishedPass(): void
128 {
129 $lastFinishedPass = 20;
130 $this->testObj->setLastFinishedPass($lastFinishedPass);
131 $this->assertEquals($lastFinishedPass, $this->testObj->getLastFinishedPass());
132 }
133
134 public function testObjectiveOrientedContainerId(): void
135 {
136 $objectiveOriented = 20;
137 $this->testObj->setObjectiveOrientedContainerId($objectiveOriented);
138 $this->assertEquals($objectiveOriented, $this->testObj->getObjectiveOrientedContainerId());
139 }
140
141 public function testLastStartedPass(): void
142 {
143 $lastStartedPass = 20;
144 $this->testObj->setLastStartedPass($lastStartedPass);
145 $this->assertEquals($lastStartedPass, $this->testObj->getLastStartedPass());
146 }
147
148 public function testIsObjectiveOriented(): void
149 {
150 $this->assertFalse($this->testObj->isObjectiveOriented());
151
152 $this->testObj->setObjectiveOrientedContainerId(20);
153 $this->assertTrue($this->testObj->isObjectiveOriented());
154 }
155
156 public function testSetAccessCodeToSession(): void
157 {
159 $access_code = '17';
160 $this->testObj->setAccessCodeToSession($access_code);
161 $this->assertEquals([(int) $access_code], ilSession::get(ilTestSession::ACCESS_CODE_SESSION_INDEX));
162 }
163
164 public function testUnsetAccessCodeInSession(): void
165 {
167 $access_code = '17';
168 $this->testObj->setAccessCodeToSession($access_code);
169 $this->assertEquals([(int) $access_code], ilSession::get(ilTestSession::ACCESS_CODE_SESSION_INDEX));
170
171 $this->testObj->unsetAccessCodeInSession();
173 }
174
175 public function testIsAnonymousUser(): void
176 {
177 $this->assertFalse($this->testObj->isAnonymousUser());
178
179 $this->testObj->setUserId(ANONYMOUS_USER_ID);
180 $this->assertTrue($this->testObj->isAnonymousUser());
181 }
182
183 public function testPasswordChecked(): void
184 {
185 $active_id = 20;
186 $this->testObj->active_id = $active_id;
187 $this->testObj->setPasswordChecked(true);
188 $this->assertTrue(ilSession::get("pw_checked_$active_id"));
189 $this->assertTrue($this->testObj->isPasswordChecked());
190 }
191
193 {
195
196 $this->expectException(ilTestException::class);
197 $this->expectExceptionMessage('active id given does not relate to current anonymous session!');
198
199 $this->createTestSession(ANONYMOUS_USER_ID, 99, 42, 'victim-code')->checkAccess(
200 $this->getTestObject(42)
201 );
202 }
203
205 {
206 $session = $this->createTestSession(ANONYMOUS_USER_ID, 99, 42, 'victim-code');
207 $session->setAccessCodeToSession('attacker-code');
208
209 $this->expectException(ilTestException::class);
210 $this->expectExceptionMessage('active id given does not relate to current anonymous session!');
211
212 $session->checkAccess(
213 $this->getTestObject(42)
214 );
215 }
216
218 {
219 $session = $this->createTestSession(ANONYMOUS_USER_ID, 99, 42, 'matching-code');
220 $session->setAccessCodeToSession('matching-code');
221
222 $session->checkAccess(
223 $this->getTestObject(42)
224 );
225
226 $this->addToAssertionCount(1);
227 }
228
230 {
231 $session = $this->createTestSession(ANONYMOUS_USER_ID, 99, 99, 'matching-code');
232 $session->setAccessCodeToSession('matching-code');
233
234 $this->expectException(ilTestException::class);
235 $this->expectExceptionMessage('active id given does not relate to current test!');
236 $session->checkAccess(
237 $this->getTestObject(42)
238 );
239 }
240
242 {
243 $this->createTestSession(6, 99, 42)->checkAccess(
244 $this->getTestObject(42)
245 );
246
247 $this->addToAssertionCount(1);
248 }
249
251 {
252 $session = $this->createTestSession(6, 99, 42);
253 $session->setUserId(2);
254
255 $this->expectException(ilTestException::class);
256 $this->expectExceptionMessage('active id given does not relate to current user!');
257
258 $session->checkAccess(
259 $this->getTestObject(42)
260 );
261
262 $this->addToAssertionCount(1);
263 }
264
266 {
267 $this->createTestSession(ANONYMOUS_USER_ID, 0, 42)->checkAccess(
268 $this->getTestObject(42)
269 );
270
271 $this->addToAssertionCount(1);
272 }
273
274 private function getTestObject(int $test_id): ilObjTest
275 {
276 $test = $this->getTestObjMock();
277 $test->method('getTestId')->willReturn($test_id);
278 return $test;
279 }
280
281 private function createTestSession(
282 int $user_id,
283 int $active_id,
284 int $test_id,
285 ?string $access_code = null
286 ): ilTestSession {
287 $user = $this->createMock(ilObjUser::class);
288 $user->method('getId')->willReturn($user_id);
289 $this->setGlobalVariable('ilUser', $user);
290
291 $session = new ilTestSession(
292 $this->createMock(ilDBInterface::class),
293 $user
294 );
295 $session->setUserId($user_id);
296 $session->setTestId($test_id);
297 $session->active_id = $active_id;
298
299 if ($access_code !== null) {
300 $session->setAnonymousId($access_code);
301 }
302
303 return $session;
304 }
305}
User class.
static get(string $a_var)
static set(string $a_var, $a_val)
Set a value.
Class ilTestBaseClass.
Class ilTestSessionTest.
testCheckAccessRejectsAnonymousActiveIdWithoutAccessCode()
testCheckAccessRejectsActiveIdFromDifferentTest()
ilTestSession $testObj
getTestObject(int $test_id)
createTestSession(int $user_id, int $active_id, int $test_id, ?string $access_code=null)
testCheckAccessRejectsAuthenticatedUsersWithInconsistentUserId()
test_instantiateObject_shouldReturnInstance()
testCheckAccessAcceptsAnonymousActiveIdWithMatchingAccessCode()
testCheckAccessAllowsAnonymousWithoutActiveId()
testCheckAccessRejectsAnonymousActiveIdWithForeignAccessCode()
Test session handler.
const ANONYMOUS_USER_ID
Definition: constants.php:27
addGlobal_ilNavigationHistory()
addGlobal_GlobalScreenService()
setGlobalVariable(string $name, mixed $value)
addGlobal_ilObjDataCache()
addGlobal_rbacsystem()