ILIAS  release_7 Revision v7.30-3-g800a261c036
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 
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 
242  public function testUserWhichCanAccessTheTestResults() : void
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 }
$session
$container
Definition: wac.php:13
$query
$test
Definition: Utf8Test.php:84