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