ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilCertificateTemplateRepositoryTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22{
24 {
25 $database = $this->createMock(ilDBInterface::class);
26
27 $logger = $this->getMockBuilder(ilLogger::class)
28 ->disableOriginalConstructor()
29 ->getMock();
30
31 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
32 ->disableOriginalConstructor()
33 ->getMock();
34
35 $objectDataCache->method('lookUpType')->willReturn('crs');
36
37 $database->method('nextId')
38 ->willReturn(10);
39
40 $database->method('insert')
41 ->with(
42 'il_cert_template',
43 [
44 'id' => ['integer', 10],
45 'obj_id' => ['integer', 100],
46 'obj_type' => ['text', 'crs'],
47 'certificate_content' => ['clob', '<xml>Some Content</xml>'],
48 'certificate_hash' => ['text', md5('<xml>Some Content</xml>')],
49 'template_values' => ['clob', '[]'],
50 'version' => ['integer', 1],
51 'ilias_version' => ['text', 'v5.4.0'],
52 'created_timestamp' => ['integer', 123_456_789],
53 'currently_active' => ['integer', true],
54 'deleted' => ['integer', 0],
55 'background_image_path' => ['text', '/some/where/background.jpg'],
56 'tile_image_path' => ['text', '/some/path/test.svg'],
57 'background_image_ident' => ['text', '-'],
58 'tile_image_ident' => ['text', '-']
59 ]
60 );
61
62 $database->method('tableColumnExists')->willReturnMap(
63 [
64 ['il_cert_user_cert', 'background_image_path', true],
65 ['il_cert_user_cert', 'tile_image_path', true],
66 ]
67 );
68
69 $logger->expects($this->atLeastOnce())
70 ->method('debug');
71
72 $template = new ilCertificateTemplate(
73 100,
74 'crs',
75 '<xml>Some Content</xml>',
76 md5('<xml>Some Content</xml>'),
77 '[]',
78 1,
79 'v5.4.0',
80 123_456_789,
81 true,
82 '/some/where/background.jpg',
83 '/some/path/test.svg',
84 '-',
85 '-'
86 );
87
88 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
89
90 $repository->save($template);
91 }
92
94 {
95 $logger = $this->getMockBuilder(ilLogger::class)
96 ->disableOriginalConstructor()
97 ->getMock();
98
99 $database = $this->createMock(ilDBInterface::class);
100 $consecutive = [
101 [
102 'id' => 1,
103 'obj_id' => 10,
104 'obj_type' => 'crs',
105 'certificate_content' => '<xml>Some Content</xml>',
106 'certificate_hash' => md5('<xml>Some Content</xml>'),
107 'template_values' => '[]',
108 'version' => 1,
109 'ilias_version' => 'v5.4.0',
110 'created_timestamp' => 123_456_789,
111 'currently_active' => true,
112 'background_image_path' => '/some/where/background.jpg',
113 'tile_image_path' => 'some/path/test.svg',
114 'background_image_ident' => '-',
115 'tile_image_ident' => '-'
116 ],
117 [
118 'id' => 30,
119 'obj_id' => 10,
120 'obj_type' => 'tst',
121 'certificate_content' => '<xml>Some Other Content</xml>',
122 'certificate_hash' => md5('<xml>Some Content</xml>'),
123 'template_values' => '[]',
124 'version' => 55,
125 'ilias_version' => 'v5.3.0',
126 'created_timestamp' => 123_456_789,
127 'currently_active' => false,
128 'background_image_path' => '/some/where/else/background.jpg',
129 'tile_image_path' => 'some/path/test.svg',
130 'background_image_ident' => '-',
131 'tile_image_ident' => '-'
132 ]
133 ];
134 $database->method('fetchAssoc')->willReturnCallback(
135 function () use (&$consecutive) {
136 return array_shift($consecutive);
137 }
138 );
139
140 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
141 ->disableOriginalConstructor()
142 ->getMock();
143
144 $objectDataCache->method('lookUpType')->willReturn('crs');
145
146 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
147
148 $templates = $repository->fetchCertificateTemplatesByObjId(10);
149
150 $this->assertSame(1, $templates[0]->getId());
151 $this->assertSame(30, $templates[1]->getId());
152 }
153
155 {
156 $logger = $this->getMockBuilder(ilLogger::class)
157 ->disableOriginalConstructor()
158 ->getMock();
159
160 $database = $this->createMock(ilDBInterface::class);
161 $consecutive = [
162 [
163 'id' => 1,
164 'obj_id' => 10,
165 'obj_type' => 'crs',
166 'certificate_content' => '<xml>Some Content</xml>',
167 'certificate_hash' => md5('<xml>Some Content</xml>'),
168 'template_values' => '[]',
169 'version' => 1,
170 'ilias_version' => 'v5.4.0',
171 'created_timestamp' => 123_456_789,
172 'currently_active' => true,
173 'background_image_path' => '/some/where/background.jpg',
174 'tile_image_path' => 'some/path/test.svg',
175 'background_image_ident' => '-',
176 'tile_image_ident' => '-'
177 ],
178 [
179 'id' => 30,
180 'obj_id' => 10,
181 'obj_type' => 'tst',
182 'certificate_content' => '<xml>Some Other Content</xml>',
183 'certificate_hash' => md5('<xml>Some Content</xml>'),
184 'template_values' => '[]',
185 'version' => 55,
186 'ilias_version' => 'v5.3.0',
187 'created_timestamp' => 123_456_789,
188 'currently_active' => false,
189 'background_image_path' => '/some/where/else/background.jpg',
190 'tile_image_path' => 'some/path/test.svg',
191 'background_image_ident' => '-',
192 'tile_image_ident' => '-'
193 ]
194 ];
195 $database->method('fetchAssoc')->willReturnCallback(
196 function () use (&$consecutive) {
197 return array_shift($consecutive);
198 }
199 );
200
201 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
202 ->disableOriginalConstructor()
203 ->getMock();
204
205 $objectDataCache->method('lookUpType')->willReturn('crs');
206
207 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
208
209 $template = $repository->fetchCurrentlyActiveCertificate(10);
210
211 $this->assertSame(1, $template->getId());
212 }
213
214 public function testFetchPreviousCertificate(): void
215 {
216 $logger = $this->getMockBuilder(ilLogger::class)
217 ->disableOriginalConstructor()
218 ->getMock();
219
220 $database = $this->createMock(ilDBInterface::class);
221 $consecutive = [
222 [
223 'id' => 1,
224 'obj_id' => 10,
225 'obj_type' => 'crs',
226 'certificate_content' => '<xml>Some Content</xml>',
227 'certificate_hash' => md5('<xml>Some Content</xml>'),
228 'template_values' => '[]',
229 'version' => 1,
230 'ilias_version' => 'v5.4.0',
231 'created_timestamp' => 123_456_789,
232 'currently_active' => true,
233 'background_image_path' => '/some/where/background.jpg',
234 'tile_image_path' => 'some/path/test.svg',
235 'background_image_ident' => '-',
236 'tile_image_ident' => '-'
237 ],
238 [
239 'id' => 30,
240 'obj_id' => 10,
241 'obj_type' => 'tst',
242 'certificate_content' => '<xml>Some Other Content</xml>',
243 'certificate_hash' => md5('<xml>Some Content</xml>'),
244 'template_values' => '[]',
245 'version' => 55,
246 'ilias_version' => 'v5.3.0',
247 'created_timestamp' => 123_456_789,
248 'currently_active' => false,
249 'background_image_path' => '/some/where/else/background.jpg',
250 'tile_image_path' => 'some/path/test.svg',
251 'background_image_ident' => '-',
252 'tile_image_ident' => '-'
253 ]
254 ];
255 $database->method('fetchAssoc')->willReturnCallback(
256 function () use (&$consecutive) {
257 return array_shift($consecutive);
258 }
259 );
260
261 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
262 ->disableOriginalConstructor()
263 ->getMock();
264
265 $objectDataCache->method('lookUpType')->willReturn('crs');
266
267 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
268
269 $template = $repository->fetchPreviousCertificate(10);
270
271 $this->assertSame(30, $template->getId());
272 }
273
274 public function testDeleteTemplateFromDatabase(): void
275 {
276 $database = $this->createMock(ilDBInterface::class);
277
278 $logger = $this->getMockBuilder(ilLogger::class)
279 ->disableOriginalConstructor()
280 ->getMock();
281
282 $quote_consecutive = [
283 [10, 'integer'],
284 [200, 'integer']
285 ];
286 $database->method('quote')->willReturnCallback(
287 function (int $v, string $type) use (&$quote_consecutive) {
288 list($expected, $type) = array_shift($quote_consecutive);
289 $this->assertEquals('integer', $type);
290 $this->assertEquals($expected, $v);
291 return (string) ($v);
292 }
293 );
294
295
296 $database->method('query')
297 ->with('
298DELETE FROM il_cert_template
299WHERE id = 10
300AND obj_id = 200');
301
302 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
303 ->disableOriginalConstructor()
304 ->getMock();
305
306 $objectDataCache->method('lookUpType')->willReturn('crs');
307
308 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
309
310 $repository->deleteTemplate(10, 200);
311 }
312
313 public function testActivatePreviousCertificate(): void
314 {
315 $logger = $this->getMockBuilder(ilLogger::class)
316 ->disableOriginalConstructor()
317 ->getMock();
318
319 $database = $this->createMock(ilDBInterface::class);
320
321 $quote_consecutive = [
322 [10, 'integer'],
323 [30, 'integer']
324 ];
325 $database->method('quote')->willReturnCallback(
326 function (int $v, string $type) use (&$quote_consecutive) {
327 list($expected, $type) = array_shift($quote_consecutive);
328 $this->assertEquals('integer', $type);
329 $this->assertEquals($expected, $v);
330 return (string) ($v);
331 }
332 );
333
334 $consecutive = [
335 [
336 'id' => 1,
337 'obj_id' => 10,
338 'obj_type' => 'crs',
339 'certificate_content' => '<xml>Some Content</xml>',
340 'certificate_hash' => md5('<xml>Some Content</xml>'),
341 'template_values' => '[]',
342 'version' => 1,
343 'ilias_version' => 'v5.4.0',
344 'created_timestamp' => 123_456_789,
345 'currently_active' => true,
346 'background_image_path' => '/some/where/background.jpg',
347 'tile_image_path' => 'some/path/test.svg',
348 'background_image_ident' => '-',
349 'tile_image_ident' => '-'
350 ],
351 [
352 'id' => 30,
353 'obj_id' => 10,
354 'obj_type' => 'tst',
355 'certificate_content' => '<xml>Some Other Content</xml>',
356 'certificate_hash' => md5('<xml>Some Content</xml>'),
357 'template_values' => '[]',
358 'version' => 55,
359 'ilias_version' => 'v5.3.0',
360 'created_timestamp' => 123_456_789,
361 'currently_active' => false,
362 'background_image_path' => '/some/where/else/background.jpg',
363 'tile_image_path' => 'some/path/test.svg',
364 'background_image_ident' => '-',
365 'tile_image_ident' => '-'
366 ]
367 ];
368 $database->method('fetchAssoc')->willReturnCallback(
369 function () use (&$consecutive) {
370 return array_shift($consecutive);
371 }
372 );
373
374 $query_consecutive = [
375 "SELECT * FROM il_cert_template WHERE obj_id = 10 AND deleted = 0 ORDER BY version ASC",
376 'UPDATE il_cert_template SET currently_active = 1 WHERE id = 30'
377 ];
378 $database->method('query')->willReturnCallback(
379 function (string $v) use (&$query_consecutive) {
380 $expected = array_shift($query_consecutive);
381 $v = trim(str_replace(array("\n", "\r"), ' ', $v)) ;
382 $this->assertEquals($expected, $v);
383 return $this->createMock(ilDBStatement::class);
384 },
385 );
386
387 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
388 ->disableOriginalConstructor()
389 ->getMock();
390
391 $objectDataCache->method('lookUpType')->willReturn('crs');
392
393 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
394
395 $template = $repository->activatePreviousCertificate(10);
396
397 $this->assertSame(30, $template->getId());
398 }
399
400 public function testFetchAllObjectIdsByType(): void
401 {
402 $logger = $this->getMockBuilder(ilLogger::class)
403 ->disableOriginalConstructor()
404 ->getMock();
405
406 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
407 ->disableOriginalConstructor()
408 ->getMock();
409
410
411 $database = $this->createMock(ilDBInterface::class);
412 $consecutive = [
413 [
414 'id' => 1,
415 'obj_id' => 10,
416 'obj_type' => 'crs',
417 'certificate_content' => '<xml>Some Content</xml>',
418 'certificate_hash' => md5('<xml>Some Content</xml>'),
419 'template_values' => '[]',
420 'version' => 1,
421 'ilias_version' => 'v5.4.0',
422 'created_timestamp' => 123_456_789,
423 'currently_active' => true,
424 'background_image_path' => '/some/where/background.jpg',
425 'tile_image_path' => '/some/where/tile_image.svg',
426 'background_image_ident' => '-',
427 'tile_image_ident' => '-'
428 ],
429 [
430 'id' => 30,
431 'obj_id' => 30,
432 'obj_type' => 'crs',
433 'certificate_content' => '<xml>Some Other Content</xml>',
434 'certificate_hash' => md5('<xml>Some Content</xml>'),
435 'template_values' => '[]',
436 'version' => 55,
437 'ilias_version' => 'v5.3.0',
438 'created_timestamp' => 123_456_789,
439 'currently_active' => false,
440 'background_image_path' => '/some/where/else/background.jpg',
441 'tile_image_path' => '/some/where/tile_image.svg',
442 'background_image_ident' => '-',
443 'tile_image_ident' => '-'
444 ]
445 ];
446 $database->method('fetchAssoc')->willReturnCallback(
447 function () use (&$consecutive) {
448 return array_shift($consecutive);
449 }
450 );
451
452 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
453
454 $templates = $repository->fetchActiveCertificateTemplatesForCoursesWithDisabledLearningProgress(true);
455
456 $this->assertSame(10, $templates[0]->getObjId());
457 $this->assertSame(30, $templates[1]->getObjId());
458 }
459
461 {
462 $this->expectException(ilException::class);
463
464 $database = $this->createMock(ilDBInterface::class);
465
466 $logger = $this->getMockBuilder(ilLogger::class)
467 ->disableOriginalConstructor()
468 ->getMock();
469
470 $database->method('quote')
471 ->with(10, 'integer')
472 ->willReturn('10');
473
474 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
475 ->disableOriginalConstructor()
476 ->getMock();
477
478 $database->method('fetchAssoc')
479 ->willReturn([]);
480
481 $database->method('fetchAssoc')
482 ->willReturn([]);
483
484 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
485
486 $repository->fetchFirstCreatedTemplate(10);
487
488 $this->fail();
489 }
490
491 public function fetchFirstCreateTemplate(): void
492 {
493 $database = $this->createMock(ilDBInterface::class);
494
495 $logger = $this->getMockBuilder(ilLogger::class)
496 ->disableOriginalConstructor()
497 ->getMock();
498
499 $database->method('quote')
500 ->with(10, 'integer')
501 ->willReturn(10);
502
503 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
504 ->disableOriginalConstructor()
505 ->getMock();
506
507 $database->method('fetchAssoc')
508 ->willReturn([]);
509
510 $database->method('fetchAssoc')->willReturn(
511 [
512 'id' => 1,
513 'obj_id' => 10,
514 'obj_type' => 'crs',
515 'certificate_content' => '<xml>Some Content</xml>',
516 'certificate_hash' => md5('<xml>Some Content</xml>'),
517 'template_values' => '[]',
518 'version' => 1,
519 'ilias_version' => 'v5.4.0',
520 'created_timestamp' => 123_456_789,
521 'currently_active' => true,
522 'background_image_ident' => '/some/where/background.jpg'
523 ]
524 );
525
526 $repository = new ilCertificateTemplateDatabaseRepository($database, $logger, $objectDataCache);
527
528 $firstTemplate = $repository->fetchFirstCreatedTemplate(10);
529
530 $this->assertSame(1, $firstTemplate->getId());
531 }
532}