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.