ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
AccessFileUploadAnswerTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
23use PHPUnit\Framework\TestCase;
26use ilObjUser;
30
31class AccessFileUploadAnswerTest extends TestCase
32{
33 public function testConstruct(): void
34 {
35 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
36 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
37 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
38 $this->assertInstanceOf(AccessFileUploadAnswer::class, new AccessFileUploadAnswer($user, $database, $readable));
39 }
40
41 public function testNoUploadPath(): void
42 {
43 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
44 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
45 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
46
47 $instance = new AccessFileUploadAnswer($user, $database, $readable);
48
49 $this->assertTrue($instance->isPermitted('/data/some/path/file.pdf')->isError());
50 }
51
52 public function testFalseWithZeroAsTestId(): void
53 {
54 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
55 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
56 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
57
58 $instance = new AccessFileUploadAnswer($user, $database, $readable);
59
60 $object_id_of_test_id = function (): void {
61 $this->assertFalse('Should not be called.');
62 };
63
64 $this->assertFalse($instance->isPermitted('/data/assessment/tst_0/ignored/file.mp3')->value());
65 }
66
67 public function testFalseWithInvalidTestId(): void
68 {
69 $called = false;
70 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
71 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
72 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
73
74 $object_id_of_test_id = function (int $test) use (&$called): int {
75 $this->assertEquals(8, $test);
76 $called = true;
77 return 0;
78 };
79
80 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id);
81
82 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
83 $this->assertTrue($called);
84 }
85
86 public function testCantRead(): void
87 {
88 $called = false;
89
90 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
91 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
92
93 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
94 $readable->expects(self::once())->method('references')->with([678])->willReturn(false);
95
96
97
98 $object_id_of_test_id = function (int $test) use (&$called): int {
99 $this->assertEquals(8, $test);
100 $called = true;
101 return 934;
102 };
103
104 $references_of = function (int $object_id): array {
105 $this->assertEquals(934, $object_id);
106 return [678];
107 };
108
109 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id, $references_of);
110
111 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
112 $this->assertTrue($called);
113 }
114
115 public function testAnonymousWithoutAccessCode(): void
116 {
117 $called = false;
118
119 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
120 $user->expects(self::never())->method('getId');
121 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
122
123 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
124
125 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
126 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
127
128
129 $object_id_of_test_id = function (int $test) use (&$called): int {
130 $this->assertEquals(8, $test);
131 $called = true;
132 return 934;
133 };
134
135 $references_of = function (int $object_id): array {
136 $this->assertEquals(934, $object_id);
137 return [678];
138 };
139
140 $session = function (string $key): ?array {
141 $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
142
143 return null;
144 };
145
146 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id, $references_of, $session);
147
148 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
149 $this->assertTrue($called);
150 }
151
153 {
154 $called = false;
155
156 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
157
158 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
159 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
160 $this->assertEquals([8389, 'file.mp3', 'Random access code.', 8], $values);
161
162 return $statement;
163 });
164 $database->expects(self::once())->method('numRows')->with($statement)->willReturn(0);
165
166 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
167 $user->expects(self::once())->method('getId')->willReturn(8389);
168 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
169
170 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
171 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
172
173 $object_id_of_test_id = function (int $test) use (&$called): int {
174 $this->assertEquals(8, $test);
175 $called = true;
176 return 934;
177 };
178
179 $references_of = function (int $object_id): array {
180 $this->assertEquals(934, $object_id);
181 return [678];
182 };
183
184 $session = function (string $key): ?array {
185 $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
186
187 return [8 => 'Random access code.'];
188 };
189
190 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id, $references_of, $session);
191
192 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
193 $this->assertTrue($called);
194 }
195
196 public function testAnonymousWithValidAccessCode(): void
197 {
198 $called = false;
199
200 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
201
202 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
203 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
204 $this->assertEquals([8389, 'file.mp3', 'Random access code.', 8], $values);
205
206 return $statement;
207 });
208 $database->expects(self::once())->method('numRows')->with($statement)->willReturn(1);
209
210 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
211 $user->expects(self::once())->method('getId')->willReturn(8389);
212 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
213
214 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
215 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
216
217 $object_id_of_test_id = function (int $test) use (&$called): int {
218 $this->assertEquals(8, $test);
219 $called = true;
220 return 934;
221 };
222
223 $references_of = function (int $object_id): array {
224 $this->assertEquals(934, $object_id);
225 return [678];
226 };
227
228 $session = function (string $key): ?array {
229 $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
230
231 return [8 => 'Random access code.'];
232 };
233
234 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id, $references_of, $session);
235
236 $this->assertTrue($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
237 $this->assertTrue($called);
238 }
239
241 {
242 $called = false;
243 $checkResultsAccessCalled = false;
244
245 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
246
247 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
248 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
249 $this->assertEquals(['assFileUpload', 8], $values);
250
251 return $statement;
252 });
253 $database->expects(self::once())->method('fetchAssoc')->with($statement)->willReturn([
254 'active_fi' => '11111',
255 'value1' => 'file.mp3'
256 ]);
257
258 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
259 $user->method('getId')->willReturn(8389);
260 $user->expects(self::once())->method('isAnonymous')->willReturn(false);
261
262 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
263 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
264
265 $object_id_of_test_id = function (int $test) use (&$called): int {
266 $this->assertEquals(8, $test);
267 $called = true;
268 return 934;
269 };
270
271 $references_of = function (int $object_id): array {
272 $this->assertEquals(934, $object_id);
273 return [678];
274 };
275
276 $session = function (string $key): ?array {
277 $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
278
279 return [8 => 'Random access code.'];
280 };
281
282 $checkResultsAccess = function (int $reference, int $test, int $active_id) use (&$checkResultsAccessCalled): bool {
283 $checkResultsAccessCalled = true;
284 $this->assertEquals('678', $reference);
285 $this->assertEquals(8, $test);
286 $this->assertEquals(11111, $active_id);
287
288 return true;
289 };
290
291 $instance = new AccessFileUploadAnswer($user, $database, $readable, $object_id_of_test_id, $references_of, $session, $checkResultsAccess);
292
293 $this->assertTrue($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
294 $this->assertTrue($called);
295 $this->assertTrue($checkResultsAccessCalled);
296 }
297}
User class.
Test session handler.
Interface ilDBInterface.
Interface ilDBStatement.