ILIAS  trunk Revision v11.0_alpha-1723-g8e69f309bab
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
AccessFileUploadAnswerTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
26 use ilObjUser;
27 use ilTestSession;
28 use ilDBInterface;
29 use ilDBStatement;
30 
31 class 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 
152  public function testAnonymousWithInvalidAccessCode(): void
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 
240  public function testUserWhichCanAccessTheTestResults(): void
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 }
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null