19declare(strict_types=1);
23use PHPUnit\Framework\TestCase;
28 int $current_datestamp,
29 array $returns_on_query
32 public array $exposed_queries = [];
35 protected int $current_datestamp,
36 protected array $returns_on_query
40 protected function query(
string $query): \Generator
42 $this->exposed_queries[] = $query;
43 yield
from $this->returns_on_query;
46 protected function manipulate(
string $query): void
48 $this->exposed_queries[] = $query;
51 protected function quoteInteger(
int $integer): string
53 return '~int:' . $integer .
'~';
56 protected function quoteString(
string $string): string
58 return '~string:' . $string .
'~';
61 protected function quoteClob(
string $string): string
63 return '~clob:' . $string .
'~';
66 protected function getCurrentDatestamp():
int
68 return $this->current_datestamp;
75 $this->assertRecordInfosMatchesArray($record->
infos(),
$data);
76 $this->assertXmlStringEqualsXmlString(
84 $this->assertSame((
int)
$data[
'obj_id'], $infos->
objID());
86 $this->assertSame((
int)
$data[
'datestamp'], $infos->
datestamp()->getTimestamp());
93 'identifier' =>
'id32',
94 'datestamp' =>
'123456',
95 'metadata' =>
'<content>something</content>'
99 'identifier' =>
'id456',
100 'datestamp' =>
'9345653',
101 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
105 'identifier' =>
'id1',
106 'datestamp' =>
'65656565',
107 'metadata' =>
'<content>something else</content>'
109 $repo = $this->getRepository(0, [$record_1, $record_2, $record_3]);
111 $records = iterator_to_array($repo->getRecords());
114 [
'SELECT * FROM il_meta_oer_exposed ORDER BY obj_id'],
115 $repo->exposed_queries
117 $this->assertCount(3, $records);
118 $this->assertRecordMatchesArray($records[0], $record_1);
119 $this->assertRecordMatchesArray($records[1], $record_2);
120 $this->assertRecordMatchesArray($records[2], $record_3);
127 'identifier' =>
'id32',
128 'datestamp' =>
'123456',
129 'metadata' =>
'<content>something</content>'
133 'identifier' =>
'id456',
134 'datestamp' =>
'9345653',
135 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
137 $repo = $this->getRepository(0, [$record_1, $record_2]);
139 $records = iterator_to_array($repo->getRecords(
140 new \DateTimeImmutable(
'@1723994')
144 [
'SELECT *' .
' FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~ ORDER BY obj_id'],
145 $repo->exposed_queries
147 $this->assertCount(2, $records);
148 $this->assertRecordMatchesArray($records[0], $record_1);
149 $this->assertRecordMatchesArray($records[1], $record_2);
156 'identifier' =>
'id456',
157 'datestamp' =>
'9345653',
158 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
162 'identifier' =>
'id1',
163 'datestamp' =>
'65656565',
164 'metadata' =>
'<content>something else</content>'
166 $repo = $this->getRepository(0, [$record_2, $record_3]);
168 $records = iterator_to_array($repo->getRecords(
170 new \DateTimeImmutable(
'@1763994')
174 [
'SELECT *' .
' FROM il_meta_oer_exposed WHERE datestamp <= ~int:1763994~ ORDER BY obj_id'],
175 $repo->exposed_queries
177 $this->assertCount(2, $records);
178 $this->assertRecordMatchesArray($records[0], $record_2);
179 $this->assertRecordMatchesArray($records[1], $record_3);
186 'identifier' =>
'id456',
187 'datestamp' =>
'9345653',
188 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
190 $repo = $this->getRepository(0, [$record_2]);
192 $records = iterator_to_array($repo->getRecords(
193 new \DateTimeImmutable(
'@1723994'),
194 new \DateTimeImmutable(
'@1763994')
198 [
'SELECT *' .
' FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~ AND datestamp <= ~int:1763994~ ORDER BY obj_id'],
199 $repo->exposed_queries
201 $this->assertCount(1, $records);
202 $this->assertRecordMatchesArray($records[0], $record_2);
209 'identifier' =>
'id456',
210 'datestamp' =>
'9345653',
211 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
213 $repo = $this->getRepository(0, [$record]);
215 $records = iterator_to_array($repo->getRecords(
222 [
'SELECT *' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:5~'],
223 $repo->exposed_queries
225 $this->assertCount(1, $records);
226 $this->assertRecordMatchesArray($records[0], $record);
233 'identifier' =>
'id456',
234 'datestamp' =>
'9345653',
235 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
237 $repo = $this->getRepository(0, [$record]);
239 $records = iterator_to_array($repo->getRecords(
247 [
'SELECT *' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:' . PHP_INT_MAX .
'~ OFFSET ~int:5~'],
248 $repo->exposed_queries
250 $this->assertCount(1, $records);
251 $this->assertRecordMatchesArray($records[0], $record);
258 'identifier' =>
'id456',
259 'datestamp' =>
'9345653',
260 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
262 $repo = $this->getRepository(0, [$record]);
264 $records = iterator_to_array($repo->getRecords(
272 [
'SELECT *' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:5~ OFFSET ~int:10~'],
273 $repo->exposed_queries
275 $this->assertCount(1, $records);
276 $this->assertRecordMatchesArray($records[0], $record);
283 'identifier' =>
'id32',
284 'datestamp' =>
'123456'
288 'identifier' =>
'id456',
289 'datestamp' =>
'9345653'
293 'identifier' =>
'id1',
294 'datestamp' =>
'65656565'
296 $repo = $this->getRepository(0, [$record_1, $record_2, $record_3]);
298 $records = iterator_to_array($repo->getRecordInfos());
301 [
'SELECT obj_id, identifier, datestamp FROM il_meta_oer_exposed ORDER BY obj_id'],
302 $repo->exposed_queries
304 $this->assertCount(3, $records);
305 $this->assertRecordInfosMatchesArray($records[0], $record_1);
306 $this->assertRecordInfosMatchesArray($records[1], $record_2);
307 $this->assertRecordInfosMatchesArray($records[2], $record_3);
314 'identifier' =>
'id32',
315 'datestamp' =>
'123456'
319 'identifier' =>
'id456',
320 'datestamp' =>
'9345653'
322 $repo = $this->getRepository(0, [$record_1, $record_2]);
324 $records = iterator_to_array($repo->getRecordInfos(
325 new \DateTimeImmutable(
'@1723994')
329 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~ ORDER BY obj_id'],
330 $repo->exposed_queries
332 $this->assertCount(2, $records);
333 $this->assertRecordInfosMatchesArray($records[0], $record_1);
334 $this->assertRecordInfosMatchesArray($records[1], $record_2);
341 'identifier' =>
'id456',
342 'datestamp' =>
'9345653'
346 'identifier' =>
'id1',
347 'datestamp' =>
'65656565'
349 $repo = $this->getRepository(0, [$record_2, $record_3]);
351 $records = iterator_to_array($repo->getRecordInfos(
353 new \DateTimeImmutable(
'@1763994')
357 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed WHERE datestamp <= ~int:1763994~ ORDER BY obj_id'],
358 $repo->exposed_queries
360 $this->assertCount(2, $records);
361 $this->assertRecordInfosMatchesArray($records[0], $record_2);
362 $this->assertRecordInfosMatchesArray($records[1], $record_3);
369 'identifier' =>
'id456',
370 'datestamp' =>
'9345653'
372 $repo = $this->getRepository(0, [$record_2]);
374 $records = iterator_to_array($repo->getRecordInfos(
375 new \DateTimeImmutable(
'@1723994'),
376 new \DateTimeImmutable(
'@1763994')
380 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~ AND datestamp <= ~int:1763994~ ORDER BY obj_id'],
381 $repo->exposed_queries
383 $this->assertCount(1, $records);
384 $this->assertRecordInfosMatchesArray($records[0], $record_2);
391 'identifier' =>
'id456',
392 'datestamp' =>
'9345653'
394 $repo = $this->getRepository(0, [$record]);
396 $records = iterator_to_array($repo->getRecordInfos(
403 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:5~'],
404 $repo->exposed_queries
406 $this->assertCount(1, $records);
407 $this->assertRecordInfosMatchesArray($records[0], $record);
414 'identifier' =>
'id456',
415 'datestamp' =>
'9345653'
417 $repo = $this->getRepository(0, [$record]);
419 $records = iterator_to_array($repo->getRecordInfos(
427 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:' . PHP_INT_MAX .
'~ OFFSET ~int:5~'],
428 $repo->exposed_queries
430 $this->assertCount(1, $records);
431 $this->assertRecordInfosMatchesArray($records[0], $record);
438 'identifier' =>
'id456',
439 'datestamp' =>
'9345653'
441 $repo = $this->getRepository(0, [$record]);
443 $records = iterator_to_array($repo->getRecordInfos(
451 [
'SELECT obj_id, identifier, datestamp' .
' FROM il_meta_oer_exposed ORDER BY obj_id LIMIT ~int:5~ OFFSET ~int:10~'],
452 $repo->exposed_queries
454 $this->assertCount(1, $records);
455 $this->assertRecordInfosMatchesArray($records[0], $record);
460 $repo = $this->getRepository(0, [[
'num' => 4]]);
462 $count = $repo->getRecordCount();
465 [
'SELECT COUNT(*) AS num FROM il_meta_oer_exposed'],
466 $repo->exposed_queries
468 $this->assertSame(4, $count);
473 $repo = $this->getRepository(0, [[
'num' => 3]]);
475 $count = $repo->getRecordCount(
476 new \DateTimeImmutable(
'@1723994')
480 [
'SELECT' .
' COUNT(*) AS num FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~'],
481 $repo->exposed_queries
483 $this->assertSame(3, $count);
488 $repo = $this->getRepository(0, [[
'num' => 3]]);
490 $count = $repo->getRecordCount(
492 new \DateTimeImmutable(
'@1763994')
496 [
'SELECT' .
' COUNT(*) AS num FROM il_meta_oer_exposed WHERE datestamp <= ~int:1763994~'],
497 $repo->exposed_queries
499 $this->assertSame(3, $count);
504 $repo = $this->getRepository(0, [[
'num' => 2]]);
506 $count = $repo->getRecordCount(
507 new \DateTimeImmutable(
'@1723994'),
508 new \DateTimeImmutable(
'@1763994')
512 [
'SELECT' .
' COUNT(*) AS num FROM il_meta_oer_exposed WHERE datestamp >= ~int:1723994~ AND datestamp <= ~int:1763994~'],
513 $repo->exposed_queries
515 $this->assertSame(2, $count);
520 $repo = $this->getRepository(0, [[
'earliest' =>
'1795857']]);
522 $earliest = $repo->getEarliestDatestamp();
525 [
'SELECT MIN(datestamp) AS earliest FROM il_meta_oer_exposed'],
526 $repo->exposed_queries
528 $this->assertSame(1795857, $earliest->getTimestamp());
535 'identifier' =>
'id456',
536 'datestamp' =>
'9345653',
537 'metadata' =>
'<content><sub1>hello</sub1><sub2>world</sub2></content>'
539 $repo = $this->getRepository(0, [$record]);
541 $res = $repo->getRecordByIdentifier(
'id456');
544 [
'SELECT * FROM il_meta_oer_exposed WHERE identifier = ~string:id456~'],
545 $repo->exposed_queries
547 $this->assertNotNull(
$res);
548 $this->assertRecordMatchesArray(
$res, $record);
553 $repo = $this->getRepository(0, []);
555 $res = $repo->getRecordByIdentifier(
'id456');
558 [
'SELECT * FROM il_meta_oer_exposed WHERE identifier = ~string:id456~'],
559 $repo->exposed_queries
561 $this->assertNull(
$res);
566 $repo = $this->getRepository(0, [[
'num' => 1]]);
568 $exists = $repo->doesRecordWithIdentifierExist(
'some id');
571 [
'SELECT COUNT(*) AS num FROM il_meta_oer_exposed WHERE identifier = ~string:some id~'],
572 $repo->exposed_queries
574 $this->assertTrue($exists);
579 $repo = $this->getRepository(0, [[
'num' => 0]]);
581 $exists = $repo->doesRecordWithIdentifierExist(
'some id');
584 [
'SELECT COUNT(*) AS num FROM il_meta_oer_exposed WHERE identifier = ~string:some id~'],
585 $repo->exposed_queries
587 $this->assertFalse($exists);
592 $repo = $this->getRepository(0, [[
'num' => 1]]);
594 $exists = $repo->doesRecordExistForObjID(43);
597 [
'SELECT ' .
'COUNT(*) AS num FROM il_meta_oer_exposed WHERE obj_id = ~int:43~'],
598 $repo->exposed_queries
600 $this->assertTrue($exists);
605 $repo = $this->getRepository(0, [[
'num' => 0]]);
607 $exists = $repo->doesRecordExistForObjID(43);
610 [
'SELECT ' .
'COUNT(*) AS num FROM il_meta_oer_exposed WHERE obj_id = ~int:43~'],
611 $repo->exposed_queries
613 $this->assertFalse($exists);
618 $xml = new \DOMDocument();
619 $xml->loadXML(
'<content><sub1>hello</sub1><sub2>world</sub2></content>');
621 $repo = $this->getRepository(17646362, []);
631 'INSERT INTO il_meta_oer_exposed (obj_id, identifier, datestamp, metadata) VALUES (' .
632 '~int:32~, ~string:id32~, ~int:17646362~, ~clob:' . $xml->saveXML() .
'~)'
634 $repo->exposed_queries
640 $xml = new \DOMDocument();
641 $xml->loadXML(
'<content><sub1>hello</sub1><sub2>world</sub2></content>');
643 $repo = $this->getRepository(17646362, []);
652 'UPDATE il_meta_oer_exposed SET metadata = ~clob:' . $xml->saveXML() .
'~, ' .
653 'datestamp = ~int:17646362~ WHERE obj_id = ~int:32~'
655 $repo->exposed_queries
661 $repo = $this->getRepository(0, []);
663 $repo->deleteRecord(32);
666 [
'DELETE ' .
'FROM il_meta_oer_exposed WHERE obj_id = ~int:32~'],
667 $repo->exposed_queries
__construct()
Constructor setup ILIAS global object @access public.
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...