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