19 declare(strict_types=1);
31 class 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)
92 return new \DateTimeImmutable($this->current_time,
new \
DateTimeZone(
'UTC'));
97 public function testWriteError(): void
99 $expected_xml = <<<XML
100 <error code=
"badVerb">some message</error>
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>no</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'),
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>no</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'),
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(
236 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
239 public function testWriteRecord(): void
244 <creator importance=
"very" >me!</creator>
250 <identifier>id_en:ti/fier</identifier>
251 <datestamp>2013-05-30</datestamp>
255 $expected_xml =
'<record>' . $header_xml .
'<metadata>' . $md_xml .
'</metadata></record>';
256 $md_doc = new \DomDocument();
257 $md_doc->loadXML($md_xml);
259 $writer = $this->getWriter();
260 $xml = $writer->writeRecord(
266 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
269 public function testWriteSet(): void
271 $expected_xml = <<<XML
273 <setSpec>some spec</setSpec>
274 <setName>some name</setName>
278 $writer = $this->getWriter();
279 $xml = $writer->writeSet(
284 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
287 public function testWriteResumptionToken(): void
289 $expected_xml = <<<XML
290 <resumptionToken completeListSize=
"1234" cursor=
"56">some token</resumptionToken>
293 $writer = $this->getWriter();
294 $xml = $writer->writeResumptionToken(
'some token', 1234, 56);
296 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
300 public function testWriteResponse(): void
302 $content1_xml = <<<XML
308 $content2_xml = <<<XML
311 <bobs variety=
"much"/>
315 $expected_xml_start = <<<XML
316 <?xml version=
"1.0" encoding=
"UTF-8" ?>
317 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/" 318 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" 319 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
320 <responseDate>2018-08-21T02:30:35Z</responseDate>
321 <request verb=
"GetRecord" identifier=
"identifier_val" 322 metadataPrefix=
"metadataPrefix_val">
http:
326 $expected_xml_end = <<<XML
331 $expected_xml = $expected_xml_start . $content1_xml . $content2_xml . $expected_xml_end;
332 $content1_doc = new \DomDocument();
333 $content1_doc->loadXML($content1_xml);
334 $content2_doc = new \DomDocument();
335 $content2_doc->loadXML($content2_xml);
336 $request = $this->getRequest(
337 'http://www.my.org/test/repository',
339 Argument::IDENTIFIER,
342 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
343 $xml = $writer->writeResponse($request, $content1_doc, $content2_doc);
345 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
348 public function testWriteErrorResponse(): void
350 $content1_xml = <<<XML
356 $content2_xml = <<<XML
359 <bobs variety=
"much"/>
363 $expected_xml_start = <<<XML
364 <?xml version=
"1.0" encoding=
"UTF-8" ?>
365 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/" 366 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" 367 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
368 <responseDate>2018-08-21T02:30:35Z</responseDate>
369 <request verb=
"ListIdentifiers" identifier=
"identifier_val" 370 metadataPrefix=
"metadataPrefix_val">
http:
373 $expected_xml_end = <<<XML
377 $expected_xml = $expected_xml_start . $content1_xml . $content2_xml . $expected_xml_end;
378 $content1_doc = new \DomDocument();
379 $content1_doc->loadXML($content1_xml);
380 $content2_doc = new \DomDocument();
381 $content2_doc->loadXML($content2_xml);
382 $request = $this->getRequest(
383 'http://www.my.org/test/repository',
384 Verb::LIST_IDENTIFIERS,
385 Argument::IDENTIFIER,
388 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
389 $xml = $writer->writeErrorResponse($request, $content1_doc, $content2_doc);
391 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
396 public function testWriteErrorResponseNoVerb(): void
398 $content_xml = <<<XML
404 $expected_xml_start = <<<XML
405 <?xml version=
"1.0" encoding=
"UTF-8" ?>
406 <OAI-PMH xmlns=
"http://www.openarchives.org/OAI/2.0/" 407 xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" 408 xsi:schemaLocation=
"http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
409 <responseDate>2018-08-21T02:30:35Z</responseDate>
410 <request identifier=
"identifier_val" metadataPrefix=
"metadataPrefix_val">
http:
413 $expected_xml_end = <<<XML
417 $expected_xml = $expected_xml_start . $content_xml . $expected_xml_end;
418 $content_doc = new \DomDocument();
419 $content_doc->loadXML($content_xml);
420 $request = $this->getRequest(
421 'http://www.my.org/test/repository',
423 Argument::IDENTIFIER,
426 $writer = $this->getWriter(
'2018-08-21T02:30:35Z');
427 $xml = $writer->writeErrorResponse($request, $content_doc);
429 $this->assertXmlStringEqualsXmlString($expected_xml, $xml->saveXML());
repository()
description: > Example for rendering a repository card
if($request_wrapper->has('ui_mainbar')) getURI()
static http()
Fetches the global http state from ILIAS.
__construct()
Constructor setup ILIAS global object public.