ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
AccessFileUploadAnswerTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
27 use ilObjUser;
28 use ilTestSession;
29 use ilDBInterface;
30 use ilDBStatement;
31 
32 class 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 {
138  $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
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 
149  public function testAnonymousWithInvalidAccessCode(): void
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 {
186  $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
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 {
234  $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
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 
245  public function testUserWhichCanAccessTheTestResults(): void
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 {
286  $this->assertEquals(ilTestSession::ACCESS_CODE_SESSION_INDEX, $key);
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 }
$session
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$container
Definition: wac.php:14
string $key
Consumer key/client ID value.
Definition: System.php:193
$query