ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
ilCertificateTemplateRepositoryTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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 
93  public function testFetchCertificateTemplatesByObjId(): void
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 
154  public function testFetchCurrentlyActiveCertificate(): void
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('
298 DELETE FROM il_cert_template
299 WHERE id = 10
300 AND 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 }