19declare(strict_types=1);
25 $database = $this->createMock(ilDBInterface::class);
27 $logger = $this->getMockBuilder(ilLogger::class)
28 ->disableOriginalConstructor()
31 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
32 ->disableOriginalConstructor()
35 $objectDataCache->method(
'lookUpType')->willReturn(
'crs');
37 $database->method(
'nextId')
41 ->expects($this->once())
46 'id' => [
'integer', 10],
47 'obj_id' => [
'integer', 100],
48 'obj_type' => [
'text',
'crs'],
49 'certificate_content' => [
'clob',
'<xml>Some Content</xml>'],
50 'certificate_hash' => [
'text', md5(
'<xml>Some Content</xml>')],
51 'template_values' => [
'clob',
'[]'],
52 'version' => [
'integer', 1],
53 'ilias_version' => [
'text',
'v5.4.0'],
54 'created_timestamp' => [
'integer', 123_456_789],
55 'currently_active' => [
'integer',
true],
56 'deleted' => [
'integer', 0],
57 'background_image_ident' => [
'text',
'-'],
58 'tile_image_ident' => [
'text',
'-']
62 $logger->expects($this->atLeastOnce())
68 '<xml>Some Content</xml>',
69 md5(
'<xml>Some Content</xml>'),
81 $repository->save($template);
86 $logger = $this->getMockBuilder(ilLogger::class)
87 ->disableOriginalConstructor()
90 $database = $this->createMock(ilDBInterface::class);
96 'certificate_content' =>
'<xml>Some Content</xml>',
97 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
98 'template_values' =>
'[]',
100 'ilias_version' =>
'v5.4.0',
101 'created_timestamp' => 123_456_789,
102 'currently_active' =>
true,
103 'background_image_ident' =>
'-',
104 'tile_image_ident' =>
'-'
110 'certificate_content' =>
'<xml>Some Other Content</xml>',
111 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
112 'template_values' =>
'[]',
114 'ilias_version' =>
'v5.3.0',
115 'created_timestamp' => 123_456_789,
116 'currently_active' =>
false,
117 'background_image_ident' =>
'-',
118 'tile_image_ident' =>
'-'
121 $database->method(
'fetchAssoc')->willReturnCallback(
122 function () use (&$consecutive) {
123 return array_shift($consecutive);
127 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
128 ->disableOriginalConstructor()
131 $objectDataCache->method(
'lookUpType')->willReturn(
'crs');
135 $templates = $repository->fetchCertificateTemplatesByObjId(10);
137 $this->assertSame(1, $templates[0]->
getId());
138 $this->assertSame(30, $templates[1]->
getId());
143 $logger = $this->getMockBuilder(ilLogger::class)
144 ->disableOriginalConstructor()
147 $database = $this->createMock(ilDBInterface::class);
153 'certificate_content' =>
'<xml>Some Content</xml>',
154 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
155 'template_values' =>
'[]',
157 'ilias_version' =>
'v5.4.0',
158 'created_timestamp' => 123_456_789,
159 'currently_active' =>
true,
160 'background_image_ident' =>
'-',
161 'tile_image_ident' =>
'-'
167 'certificate_content' =>
'<xml>Some Other Content</xml>',
168 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
169 'template_values' =>
'[]',
171 'ilias_version' =>
'v5.3.0',
172 'created_timestamp' => 123_456_789,
173 'currently_active' =>
false,
174 'background_image_ident' =>
'-',
175 'tile_image_ident' =>
'-'
178 $database->method(
'fetchAssoc')->willReturnCallback(
179 function () use (&$consecutive) {
180 return array_shift($consecutive);
184 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
185 ->disableOriginalConstructor()
188 $objectDataCache->method(
'lookUpType')->willReturn(
'crs');
192 $template = $repository->fetchCurrentlyActiveCertificate(10);
194 $this->assertSame(1, $template->getId());
199 $logger = $this->getMockBuilder(ilLogger::class)
200 ->disableOriginalConstructor()
203 $database = $this->createMock(ilDBInterface::class);
209 'certificate_content' =>
'<xml>Some Content</xml>',
210 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
211 'template_values' =>
'[]',
213 'ilias_version' =>
'v5.4.0',
214 'created_timestamp' => 123_456_789,
215 'currently_active' =>
true,
216 'background_image_ident' =>
'-',
217 'tile_image_ident' =>
'-'
223 'certificate_content' =>
'<xml>Some Other Content</xml>',
224 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
225 'template_values' =>
'[]',
227 'ilias_version' =>
'v5.3.0',
228 'created_timestamp' => 123_456_789,
229 'currently_active' =>
false,
230 'background_image_ident' =>
'-',
231 'tile_image_ident' =>
'-'
234 $database->method(
'fetchAssoc')->willReturnCallback(
235 function () use (&$consecutive) {
236 return array_shift($consecutive);
240 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
241 ->disableOriginalConstructor()
244 $objectDataCache->method(
'lookUpType')->willReturn(
'crs');
248 $template = $repository->fetchPreviousCertificate(10);
250 $this->assertSame(30, $template->getId());
255 $database = $this->createMock(ilDBInterface::class);
256 $logger = $this->createStub(ilLogger::class);
257 $object_data_cache = $this->createStub(ilObjectDataCache::class);
259 $database->method(
'quote')->willReturnCallback(
260 static fn(
int $value,
string $type):
string => (
string) $value
263 $captured_sql_string =
null;
265 ->expects($this->once())
266 ->method(
'manipulate')
267 ->willReturnCallback(
static function (
string $sql) use (&$captured_sql_string):
int {
268 $captured_sql_string = $sql;
274 $repository->deleteTemplate(10, 200);
277 'UPDATE il_cert_template SET deleted = 1, currently_active = 0 WHERE id = 10 AND obj_id = 200',
278 trim(preg_replace(
'/\s+/',
' ', $captured_sql_string))
284 $logger = $this->getMockBuilder(ilLogger::class)
285 ->disableOriginalConstructor()
288 $database = $this->createMock(ilDBInterface::class);
290 $quote_consecutive = [
294 $database->method(
'quote')->willReturnCallback(
295 function (
int $v,
string $type) use (&$quote_consecutive) {
296 [$expected, $type] = array_shift($quote_consecutive);
297 $this->assertEquals(
'integer', $type);
298 $this->assertEquals($expected, $v);
299 return (
string) ($v);
308 'certificate_content' =>
'<xml>Some Content</xml>',
309 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
310 'template_values' =>
'[]',
312 'ilias_version' =>
'v5.4.0',
313 'created_timestamp' => 123_456_789,
314 'currently_active' =>
true,
315 'background_image_ident' =>
'-',
316 'tile_image_ident' =>
'-'
322 'certificate_content' =>
'<xml>Some Other Content</xml>',
323 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
324 'template_values' =>
'[]',
326 'ilias_version' =>
'v5.3.0',
327 'created_timestamp' => 123_456_789,
328 'currently_active' =>
false,
329 'background_image_ident' =>
'-',
330 'tile_image_ident' =>
'-'
333 $database->method(
'fetchAssoc')->willReturnCallback(
334 function () use (&$consecutive) {
335 return array_shift($consecutive);
339 $query_consecutive = [
340 "SELECT * FROM il_cert_template WHERE obj_id = 10 AND deleted = 0 ORDER BY version ASC",
341 'UPDATE il_cert_template SET currently_active = 1 WHERE id = 30'
343 $database->method(
'query')->willReturnCallback(
344 function (
string $v) use (&$query_consecutive) {
345 $expected = array_shift($query_consecutive);
346 $v = trim(str_replace(array(
"\n",
"\r"),
' ', $v)) ;
347 $this->assertEquals($expected, $v);
348 return $this->createMock(ilDBStatement::class);
352 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
353 ->disableOriginalConstructor()
356 $objectDataCache->method(
'lookUpType')->willReturn(
'crs');
360 $template = $repository->activatePreviousCertificate(10);
362 $this->assertSame(30, $template->getId());
367 $logger = $this->getMockBuilder(ilLogger::class)
368 ->disableOriginalConstructor()
371 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
372 ->disableOriginalConstructor()
376 $database = $this->createMock(ilDBInterface::class);
382 'certificate_content' =>
'<xml>Some Content</xml>',
383 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
384 'template_values' =>
'[]',
386 'ilias_version' =>
'v5.4.0',
387 'created_timestamp' => 123_456_789,
388 'currently_active' =>
true,
389 'background_image_ident' =>
'-',
390 'tile_image_ident' =>
'-'
396 'certificate_content' =>
'<xml>Some Other Content</xml>',
397 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
398 'template_values' =>
'[]',
400 'ilias_version' =>
'v5.3.0',
401 'created_timestamp' => 123_456_789,
402 'currently_active' =>
false,
403 'background_image_ident' =>
'-',
404 'tile_image_ident' =>
'-'
407 $database->method(
'fetchAssoc')->willReturnCallback(
408 function () use (&$consecutive) {
409 return array_shift($consecutive);
415 $templates = $repository->fetchActiveCertificateTemplatesForCoursesWithDisabledLearningProgress(
true);
417 $this->assertSame(10, $templates[0]->getObjId());
418 $this->assertSame(30, $templates[1]->getObjId());
423 $this->expectException(ilException::class);
425 $database = $this->createMock(ilDBInterface::class);
427 $logger = $this->getMockBuilder(ilLogger::class)
428 ->disableOriginalConstructor()
432 ->expects($this->once())
434 ->with(10,
'integer')
437 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
438 ->disableOriginalConstructor()
441 $database->method(
'fetchAssoc')
444 $database->method(
'fetchAssoc')
449 $repository->fetchFirstCreatedTemplate(10);
456 $database = $this->createMock(ilDBInterface::class);
458 $logger = $this->getMockBuilder(ilLogger::class)
459 ->disableOriginalConstructor()
463 ->expects($this->once())
465 ->with(10,
'integer')
468 $objectDataCache = $this->getMockBuilder(ilObjectDataCache::class)
469 ->disableOriginalConstructor()
472 $database->method(
'fetchAssoc')
475 $database->method(
'fetchAssoc')->willReturn(
480 'certificate_content' =>
'<xml>Some Content</xml>',
481 'certificate_hash' => md5(
'<xml>Some Content</xml>'),
482 'template_values' =>
'[]',
484 'ilias_version' =>
'v5.4.0',
485 'created_timestamp' => 123_456_789,
486 'currently_active' =>
true,
487 'background_image_ident' =>
'/some/where/background.jpg'
493 $firstTemplate = $repository->fetchFirstCreatedTemplate(10);
495 $this->assertSame(1, $firstTemplate->getId());
testFetchPreviousCertificate()
testFetchCertificateTemplatesByObjId()
testFetchFirstCreatedTemplateFailsBecauseNothingWasSaved()
testFetchAllObjectIdsByType()
fetchFirstCreateTemplate()
testCertificateWillBeSavedToTheDatabase()
testActivatePreviousCertificate()
testDeleteTemplateFromDatabase()
testFetchCurrentlyActiveCertificate()