ILIAS  release_8 Revision v8.24
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
93
94 $object_id_of_test_id = function (int $test) use (&$called): int {
95 $this->assertEquals(8, $test);
96 $called = true;
97 return 934;
98 };
99
100 $references_of = function (int $object_id): array {
101 $this->assertEquals(934, $object_id);
102 return [678];
103 };
104
105 $instance = new AccessFileUploadAnswer($container, $readable, $object_id_of_test_id, $references_of);
106
107 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
108 $this->assertTrue($called);
109 }
110
111 public function testAnonymousWithoutAccessCode(): void
112 {
113 $called = false;
114
115 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
116 $user->expects(self::never())->method('getId');
117 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
118
119 $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
120 $container->expects(self::once())->method('user')->willReturn($user);
121
122 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
123 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
124
125
126 $object_id_of_test_id = function (int $test) use (&$called): int {
127 $this->assertEquals(8, $test);
128 $called = true;
129 return 934;
130 };
131
132 $references_of = function (int $object_id): array {
133 $this->assertEquals(934, $object_id);
134 return [678];
135 };
136
137 $session = function (string $key): ?array {
139
140 return null;
141 };
142
143 $instance = new AccessFileUploadAnswer($container, $readable, $object_id_of_test_id, $references_of, $session);
144
145 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
146 $this->assertTrue($called);
147 }
148
150 {
151 $called = false;
152
153 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
154
155 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
156 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
157 $this->assertEquals([8389, 'file.mp3', 'Random access code.', 8], $values);
158
159 return $statement;
160 });
161 $database->expects(self::once())->method('numRows')->with($statement)->willReturn(0);
162
163 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
164 $user->expects(self::once())->method('getId')->willReturn(8389);
165 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
166
167 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
168 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
169
170 $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
171 $container->method('user')->willReturn($user);
172 $container->method('database')->willReturn($database);
173
174 $object_id_of_test_id = function (int $test) use (&$called): int {
175 $this->assertEquals(8, $test);
176 $called = true;
177 return 934;
178 };
179
180 $references_of = function (int $object_id): array {
181 $this->assertEquals(934, $object_id);
182 return [678];
183 };
184
185 $session = function (string $key): ?array {
187
188 return [8 => 'Random access code.'];
189 };
190
191 $instance = new AccessFileUploadAnswer($container, $readable, $object_id_of_test_id, $references_of, $session);
192
193 $this->assertFalse($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
194 $this->assertTrue($called);
195 }
196
197 public function testAnonymousWithValidAccessCode(): void
198 {
199 $called = false;
200
201 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
202
203 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
204 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
205 $this->assertEquals([8389, 'file.mp3', 'Random access code.', 8], $values);
206
207 return $statement;
208 });
209 $database->expects(self::once())->method('numRows')->with($statement)->willReturn(1);
210
211 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
212 $user->expects(self::once())->method('getId')->willReturn(8389);
213 $user->expects(self::once())->method('isAnonymous')->willReturn(true);
214
215 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
216 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
217
218 $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
219 $container->method('user')->willReturn($user);
220 $container->method('database')->willReturn($database);
221
222 $object_id_of_test_id = function (int $test) use (&$called): int {
223 $this->assertEquals(8, $test);
224 $called = true;
225 return 934;
226 };
227
228 $references_of = function (int $object_id): array {
229 $this->assertEquals(934, $object_id);
230 return [678];
231 };
232
233 $session = function (string $key): ?array {
235
236 return [8 => 'Random access code.'];
237 };
238
239 $instance = new AccessFileUploadAnswer($container, $readable, $object_id_of_test_id, $references_of, $session);
240
241 $this->assertTrue($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
242 $this->assertTrue($called);
243 }
244
246 {
247 $called = false;
248 $checkResultsAccessCalled = false;
249
250 $statement = $this->getMockBuilder(ilDBStatement::class)->disableOriginalConstructor()->getMock();
251
252 $database = $this->getMockBuilder(ilDBInterface::class)->disableOriginalConstructor()->getMock();
253 $database->expects(self::once())->method('queryF')->willReturnCallback(function (string $query, array $types, array $values) use ($statement): ilDBStatement {
254 $this->assertEquals(['assFileUpload', 8], $values);
255
256 return $statement;
257 });
258 $database->expects(self::once())->method('fetchAssoc')->with($statement)->willReturn([
259 'active_fi' => '11111',
260 'value1' => 'file.mp3'
261 ]);
262
263 $user = $this->getMockBuilder(ilObjUser::class)->disableOriginalConstructor()->getMock();
264 $user->method('getId')->willReturn(8389);
265 $user->expects(self::once())->method('isAnonymous')->willReturn(false);
266
267 $readable = $this->getMockBuilder(Readable::class)->disableOriginalConstructor()->getMock();
268 $readable->expects(self::once())->method('references')->with([678])->willReturn(true);
269
270 $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
271 $container->method('user')->willReturn($user);
272 $container->method('database')->willReturn($database);
273
274 $object_id_of_test_id = function (int $test) use (&$called): int {
275 $this->assertEquals(8, $test);
276 $called = true;
277 return 934;
278 };
279
280 $references_of = function (int $object_id): array {
281 $this->assertEquals(934, $object_id);
282 return [678];
283 };
284
285 $session = function (string $key): ?array {
287
288 return [8 => 'Random access code.'];
289 };
290
291 $checkResultsAccess = function (int $reference, int $test, int $active_id) use (&$checkResultsAccessCalled): bool {
292 $checkResultsAccessCalled = true;
293 $this->assertEquals('678', $reference);
294 $this->assertEquals(8, $test);
295 $this->assertEquals(11111, $active_id);
296
297 return true;
298 };
299
300 $instance = new AccessFileUploadAnswer($container, $readable, $object_id_of_test_id, $references_of, $session, $checkResultsAccess);
301
302 $this->assertTrue($instance->isPermitted('/data/assessment/tst_8/ignored/file.mp3')->value());
303 $this->assertTrue($called);
304 $this->assertTrue($checkResultsAccessCalled);
305 }
306}
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:32
User class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface ilDBInterface.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
string $key
Consumer key/client ID value.
Definition: System.php:193
$query
$session
$container
@noRector
Definition: wac.php:14