19declare(strict_types=1);
23use PHPUnit\Framework\TestCase;
31class WriterTest
extends TestCase
33 protected function getURI(
string $string): URI
35 $url = $this->createMock(URI::class);
36 $url->method(
'__toString')->willReturn($string);
43 protected function getRequest(
48 $base_url = $this->
getURI($base_url);
50 return new class ($base_url, $verb, $arguments) extends NullRequest {
52 protected URI $base_url,
54 protected array $arguments
58 public function baseURL(): URI
60 return $this->base_url;
63 public function verb():
Verb
68 public function argumentKeys(): \Generator
70 yield
from $this->arguments;
73 public function argumentValue(
Argument $argument): string
75 if (in_array($argument, $this->arguments)) {
76 return $argument->value .
'_val';
83 protected function getWriter(
string $current_time =
'@0'): Writer
85 return new class ($current_time) extends Writer {
86 public function __construct(
protected string $current_time)
90 protected function getCurrentDateTime(): \DateTimeImmutable
92 return new \DateTimeImmutable($this->current_time,
new \DateTimeZone(
'UTC'));
97 public function testWriteError(): void
99 $expected_xml = <<<XML
103 $writer = $this->getWriter();
104 $xml = $writer->writeError(Error::BAD_VERB,
'some message');
106 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
109 public function testWriteIdentifyElementsOneAdmin(): void
113 <repositoryName>my
repository</repositoryName>
119 <protocolVersion>2.0</protocolVersion>
122 <earliestDatestamp>2017-11-04</earliestDatestamp>
125 <deletedRecord>
transient</deletedRecord>
128 <granularity>YYYY-MM-DD</granularity>
131 <adminEmail>somemail@my.org</adminEmail>
135 $writer = $this->getWriter();
136 $xmls = $writer->writeIdentifyElements(
138 $this->
getURI(
'http://www.my.org/test/repository'),
139 new \DateTimeImmutable(
'2017-11-04',
new \DateTimeZone(
'UTC')),
144 foreach ($xmls as $xml) {
145 if ($index < count($expected_xmls)) {
146 $this->assertXmlStringEqualsXmlString($expected_xmls[$index], $xml->saveXML());
150 $this->assertSame(count($expected_xmls), $index);
152 public function testWriteIdentifyElementsMultipleAdmins(): void
156 <repositoryName>my
repository</repositoryName>
162 <protocolVersion>2.0</protocolVersion>
165 <earliestDatestamp>2017-11-04</earliestDatestamp>
168 <deletedRecord>
transient</deletedRecord>
171 <granularity>YYYY-MM-DD</granularity>
174 <adminEmail>somemail@my.org</adminEmail>
177 <adminEmail>othermail@my.org</adminEmail>
180 <adminEmail>thirdmail@my.org</adminEmail>
184 $writer = $this->getWriter();
185 $xmls = $writer->writeIdentifyElements(
187 $this->
getURI(
'http://www.my.org/test/repository'),
188 new \DateTimeImmutable(
'2017-11-04',
new \DateTimeZone(
'UTC')),
195 foreach ($xmls as $xml) {
196 if ($index < count($expected_xmls)) {
197 $this->assertXmlStringEqualsXmlString($expected_xmls[$index], $xml->saveXML());
201 $this->assertSame(count($expected_xmls), $index);
205 public function testWriteMetadataFormat(): void
207 $expected_xml = <<<XML
209 <metadataPrefix>oai_dc</metadataPrefix>
211 <metadataNamespace>
http:
215 $writer = $this->getWriter();
216 $xml = $writer->writeMetadataFormat();
218 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
221 public function testWriteRecordHeader(): void
223 $expected_xml = <<<XML
225 <identifier>id_en:ti/fier</identifier>
226 <datestamp>2013-05-30</datestamp>
230 $writer = $this->getWriter();
231 $xml = $writer->writeRecordHeader(
233 new \DateTimeImmutable(
'2013-05-30',
new \DateTimeZone(
'UTC'))
236 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
239 public function testWriteRecordHeaderWithDeletedStatus(): void
241 $expected_xml = <<<XML
243 <identifier>id_en:ti/fier</identifier>
244 <datestamp>2013-05-30</datestamp>
248 $writer = $this->getWriter();
249 $xml = $writer->writeRecordHeader(
251 new \DateTimeImmutable(
'2013-05-30',
new \DateTimeZone(
'UTC')),
255 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
258 public function testWriteRecord(): void
263 <creator importance=
"very" >me!</creator>
269 <identifier>id_en:ti/fier</identifier>
270 <datestamp>2013-05-30</datestamp>
274 $expected_xml =
'<record>' . $header_xml .
'<metadata>' . $md_xml .
'</metadata></record>';
275 $md_doc = new \DomDocument();
276 $md_doc->loadXML($md_xml);
278 $writer = $this->getWriter();
279 $xml = $writer->writeRecord(
281 new \DateTimeImmutable(
'2013-05-30',
new \DateTimeZone(
'UTC')),
285 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
288 public function testWriteDeletedRecord(): void
292 <identifier>id_en:ti/fier</identifier>
293 <datestamp>2013-05-30</datestamp>
297 $expected_xml =
'<record>' . $header_xml .
'</record>';
299 $writer = $this->getWriter();
300 $xml = $writer->writeDeletedRecord(
302 new \DateTimeImmutable(
'2013-05-30',
new \DateTimeZone(
'UTC'))
305 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
308 public function testWriteSet(): void
310 $expected_xml = <<<XML
312 <setSpec>some spec</setSpec>
313 <setName>some name</setName>
317 $writer = $this->getWriter();
318 $xml = $writer->writeSet(
323 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
326 public function testWriteResumptionToken(): void
328 $expected_xml = <<<XML
329 <resumptionToken completeListSize=
"1234" cursor=
"56">some token</resumptionToken>
332 $writer = $this->getWriter();
333 $xml = $writer->writeResumptionToken(
'some token', 1234, 56);
335 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
339 public function testWriteResponse(): void
341 $content1_xml = <<<XML
347 $content2_xml = <<<XML
350 <bobs variety=
"much"/>
354 $expected_xml_start = <<<XML
355 <?xml version=
"1.0" encoding=
"UTF-8" ?>
356 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/"
357 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
358 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
359 <responseDate>2018-08-21T02:30:35Z</responseDate>
360 <request verb=
"GetRecord" identifier=
"identifier_val"
361 metadataPrefix=
"metadataPrefix_val">
http:
365 $expected_xml_end = <<<XML
370 $expected_xml = $expected_xml_start . $content1_xml . $content2_xml . $expected_xml_end;
371 $content1_doc = new \DomDocument();
372 $content1_doc->loadXML($content1_xml);
373 $content2_doc = new \DomDocument();
374 $content2_doc->loadXML($content2_xml);
375 $request = $this->getRequest(
376 'http://www.my.org/test/repository',
378 Argument::IDENTIFIER,
381 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
382 $xml = $writer->writeResponse($request, $content1_doc, $content2_doc);
384 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
387 public function testWriteErrorResponse(): void
389 $content1_xml = <<<XML
395 $content2_xml = <<<XML
398 <bobs variety=
"much"/>
402 $expected_xml_start = <<<XML
403 <?xml version=
"1.0" encoding=
"UTF-8" ?>
404 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/"
405 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
406 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
407 <responseDate>2018-08-21T02:30:35Z</responseDate>
408 <request verb=
"ListIdentifiers" identifier=
"identifier_val"
409 metadataPrefix=
"metadataPrefix_val">
http:
412 $expected_xml_end = <<<XML
416 $expected_xml = $expected_xml_start . $content1_xml . $content2_xml . $expected_xml_end;
417 $content1_doc = new \DomDocument();
418 $content1_doc->loadXML($content1_xml);
419 $content2_doc = new \DomDocument();
420 $content2_doc->loadXML($content2_xml);
421 $request = $this->getRequest(
422 'http://www.my.org/test/repository',
423 Verb::LIST_IDENTIFIERS,
424 Argument::IDENTIFIER,
427 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
428 $xml = $writer->writeErrorResponse($request, $content1_doc, $content2_doc);
430 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
435 public function testWriteErrorResponseNoVerb(): void
437 $content_xml = <<<XML
443 $expected_xml_start = <<<XML
444 <?xml version=
"1.0" encoding=
"UTF-8" ?>
445 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/"
446 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
447 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
448 <responseDate>2018-08-21T02:30:35Z</responseDate>
449 <request identifier=
"identifier_val" metadataPrefix=
"metadataPrefix_val">
http:
452 $expected_xml_end = <<<XML
456 $expected_xml = $expected_xml_start . $content_xml . $expected_xml_end;
457 $content_doc = new \DomDocument();
458 $content_doc->loadXML($content_xml);
459 $request = $this->getRequest(
460 'http://www.my.org/test/repository',
462 Argument::IDENTIFIER,
465 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
466 $xml = $writer->writeErrorResponse($request, $content_doc);
468 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
The scope of this class is split ilias-conform URI's into components.
__construct()
Constructor setup ILIAS global object @access public.
static http()
Fetches the global http state from ILIAS.
if( $request_wrapper->has( 'ui_mainbar')) getURI()