19declare(strict_types=1);
26class RequestProcessorListRecordsTest
extends RequestProcessorTestCase
28 public function testGetResponseToRequestListRecords(): void
30 $processor =
new RequestProcessor(
32 $this->getSettings(
'prefix_'),
33 $repo = $this->getRepository(
40 $this->getTokenHandler()
43 $expected_response = <<<XML
45 <response_info>
base url:ListRecords:metadataPrefix=oai_dc</response_info>
46 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
47 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
48 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
52 $response = $processor->getResponseToRequest($this->getRequest(
55 [Argument::MD_PREFIX->value =>
'oai_dc'],
59 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
60 $repo->exposed_parameters
62 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
65 public function testGetResponseToRequestListRecordsWithDeletedRecord(): void
67 $processor =
new RequestProcessor(
69 $this->getSettings(
'prefix_'),
70 $repo = $this->getRepository(
77 $this->getTokenHandler()
80 $expected_response = <<<XML
82 <response_info>
base url:ListRecords:metadataPrefix=oai_dc</response_info>
83 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
84 <deleted_record><record_info>prefix_delid2+2022-11-27:2022-11-27</record_info></deleted_record>
85 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
89 $response = $processor->getResponseToRequest($this->getRequest(
92 [Argument::MD_PREFIX->value =>
'oai_dc'],
96 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
97 $repo->exposed_parameters
99 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
102 public function testGetResponseToRequestListRecordsWithDefaultSet(): void
104 $processor =
new RequestProcessor(
106 $this->getSettings(
'prefix_'),
107 $repo = $this->getRepository(
114 $this->getTokenHandler()
117 $expected_response = <<<XML
119 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,
set=
default</response_info>
120 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
121 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
122 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
126 $response = $processor->getResponseToRequest($this->getRequest(
129 [Argument::MD_PREFIX->value =>
'oai_dc',
Argument::SET->value =>
'default'],
133 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
134 $repo->exposed_parameters
136 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
139 public function testGetResponseToRequestListRecordsWithFromDate(): void
141 $processor =
new RequestProcessor(
143 $this->getSettings(
'prefix_'),
144 $repo = $this->getRepository(
151 $this->getTokenHandler()
154 $expected_response = <<<XML
156 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,
from=2019-01-02</response_info>
157 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
158 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
159 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
163 $response = $processor->getResponseToRequest($this->getRequest(
166 [Argument::MD_PREFIX->value =>
'oai_dc', Argument::FROM_DATE->value =>
'2019-01-02'],
170 [[
'from' =>
'2019-01-02',
'until' =>
null,
'limit' => 100,
'offset' => 0]],
171 $repo->exposed_parameters
173 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
176 public function testGetResponseToRequestListRecordsWithUntilDate(): void
178 $processor =
new RequestProcessor(
180 $this->getSettings(
'prefix_'),
181 $repo = $this->getRepository(
188 $this->getTokenHandler()
191 $expected_response = <<<XML
193 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,until=2033-11-02</response_info>
194 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
195 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
196 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
200 $response = $processor->getResponseToRequest($this->getRequest(
203 [Argument::MD_PREFIX->value =>
'oai_dc', Argument::UNTIL_DATE->value =>
'2033-11-02'],
207 [[
'from' =>
null,
'until' =>
'2033-11-02',
'limit' => 100,
'offset' => 0]],
208 $repo->exposed_parameters
210 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
213 public function testGetResponseToRequestListRecordsWithBothDates(): void
215 $processor =
new RequestProcessor(
217 $this->getSettings(
'prefix_'),
218 $repo = $this->getRepository(
225 $this->getTokenHandler()
228 $expected_response = <<<XML
230 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,until=2033-11-02,
from=2019-01-02</response_info>
231 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
232 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
233 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
237 $response = $processor->getResponseToRequest($this->getRequest(
241 Argument::MD_PREFIX->value =>
'oai_dc',
242 Argument::UNTIL_DATE->value =>
'2033-11-02',
243 Argument::FROM_DATE->value =>
'2019-01-02'
248 [[
'from' =>
'2019-01-02',
'until' =>
'2033-11-02',
'limit' => 100,
'offset' => 0]],
249 $repo->exposed_parameters
251 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
254 public function testGetResponseToRequestListRecordsIncompleteList(): void
256 $processor =
new RequestProcessor(
258 $this->getSettings(
'prefix_'),
259 $repo = $this->getRepository(
266 $this->getTokenHandler()
269 $expected_response = <<<XML
271 <response_info>
base url:ListRecords:metadataPrefix=oai_dc</response_info>
272 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
273 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
274 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
275 <token>next_offset=100:
from=:until=,fullsize=203,cursor=0</token>
279 $response = $processor->getResponseToRequest($this->getRequest(
282 [Argument::MD_PREFIX->value =>
'oai_dc'],
286 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
287 $repo->exposed_parameters
289 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
292 public function testGetResponseToRequestListRecordsWithResumptionToken(): void
294 $original_request = $this->getRequest(
297 [Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=:until=2024-07-28'],
300 $appended_request = $this->getRequest(
304 Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=:until=2024-07-28',
305 Argument::UNTIL_DATE->value =>
'2024-07-28'
309 $processor =
new RequestProcessor(
311 $this->getSettings(
'prefix_'),
312 $repo = $this->getRepository(
319 $this->getTokenHandler(
true, $appended_request)
322 $expected_response = <<<XML
324 <response_info>
base url:ListRecords:resumptionToken=next_offset=100:
from=:until=2024-07-28</response_info>
325 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
326 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
327 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
328 <token>next_offset=200:
from=:until=2024-07-28,fullsize=203,cursor=100</token>
332 $response = $processor->getResponseToRequest($original_request);
335 [[
'from' =>
null,
'until' =>
'2024-07-28',
'limit' => 100,
'offset' => 100]],
336 $repo->exposed_parameters
338 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
341 public function testGetResponseToRequestListRecordsWithResumptionTokenContainingFromDate(): void
343 $original_request = $this->getRequest(
346 [Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=1999-01-12:until=2024-07-28'],
349 $appended_request = $this->getRequest(
353 Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=1999-01-12:until=2024-07-28',
354 Argument::UNTIL_DATE->value =>
'2024-07-28',
355 Argument::FROM_DATE->value =>
'1999-01-12'
359 $processor =
new RequestProcessor(
361 $this->getSettings(
'prefix_'),
362 $repo = $this->getRepository(
369 $this->getTokenHandler(
true, $appended_request)
372 $expected_response = <<<XML
374 <response_info>
base url:ListRecords:resumptionToken=next_offset=100:
from=1999-01-12:until=2024-07-28</response_info>
375 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
376 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
377 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
378 <token>next_offset=200:
from=1999-01-12:until=2024-07-28,fullsize=203,cursor=100</token>
382 $response = $processor->getResponseToRequest($original_request);
385 [[
'from' =>
'1999-01-12',
'until' =>
'2024-07-28',
'limit' => 100,
'offset' => 100]],
386 $repo->exposed_parameters
388 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
391 public function testGetResponseToRequestListRecordsWithResumptionTokenLastIncompleteList(): void
393 $original_request = $this->getRequest(
396 [Argument::RESUMPTION_TOKEN->value =>
'next_offset=200:from=:until=2024-07-28'],
399 $appended_request = $this->getRequest(
403 Argument::RESUMPTION_TOKEN->value =>
'next_offset=200:from=:until=2024-07-28',
404 Argument::UNTIL_DATE->value =>
'2024-07-28'
408 $processor =
new RequestProcessor(
410 $this->getSettings(
'prefix_'),
411 $repo = $this->getRepository(
418 $this->getTokenHandler(
true, $appended_request)
421 $expected_response = <<<XML
423 <response_info>
base url:ListRecords:resumptionToken=next_offset=200:
from=:until=2024-07-28</response_info>
424 <record><record_info>prefix_id1+2022-11-27:2022-11-27</record_info><md>md
for id1+2022-11-27</md></record>
425 <record><record_info>prefix_id2+2022-11-27:2022-11-27</record_info><md>md
for id2+2022-11-27</md></record>
426 <record><record_info>prefix_id3+2021-11-13:2021-11-13</record_info><md>md
for id3+2021-11-13</md></record>
427 <token>,fullsize=203,cursor=200</token>
431 $response = $processor->getResponseToRequest($original_request);
434 [[
'from' =>
null,
'until' =>
'2024-07-28',
'limit' => 100,
'offset' => 200]],
435 $repo->exposed_parameters
437 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
440 public function testGetResponseToRequestListRecordsNoMDFormatError(): void
442 $processor =
new RequestProcessor(
444 $this->getSettings(
'prefix_'),
445 $repo = $this->getRepository(
452 $this->getTokenHandler()
455 $expected_response = <<<XML
457 <response_info>
base url:ListRecords:</response_info>
462 $response = $processor->getResponseToRequest($this->getRequest(
469 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
472 public function testGetResponseToRequestListRecordsAdditionalArgumentError(): void
474 $processor =
new RequestProcessor(
476 $this->getSettings(
'prefix_'),
477 $repo = $this->getRepository(
484 $this->getTokenHandler()
487 $expected_response = <<<XML
489 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,identifier=
id</response_info>
494 $response = $processor->getResponseToRequest($this->getRequest(
497 [Argument::MD_PREFIX->value =>
'oai_dc', Argument::IDENTIFIER->value =>
'id'],
501 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
504 public function testGetResponseToRequestListRecordsBadResumptionTokenError(): void
506 $original_request = $this->getRequest(
509 [Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=:until=2024-07-28'],
512 $appended_request = $this->getRequest(
516 Argument::RESUMPTION_TOKEN->value =>
'next_offset=100:from=:until=2024-07-28',
517 Argument::UNTIL_DATE->value =>
'2024-07-28'
521 $processor =
new RequestProcessor(
523 $this->getSettings(
'prefix_'),
524 $repo = $this->getRepository(
531 $this->getTokenHandler(
false, $appended_request)
534 $expected_response = <<<XML
536 <response_info>
base url:ListRecords:resumptionToken=next_offset=100:
from=:until=2024-07-28</response_info>
541 $response = $processor->getResponseToRequest($original_request);
543 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
546 public function testGetResponseToRequestListRecordsInvalidFromDateError(): void
548 $processor =
new RequestProcessor(
550 $this->getSettings(
'prefix_'),
551 $repo = $this->getRepository(
558 $this->getTokenHandler()
561 $expected_response = <<<XML
563 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,
from=invalid</response_info>
568 $response = $processor->getResponseToRequest($this->getRequest(
571 [Argument::MD_PREFIX->value =>
'oai_dc', Argument::FROM_DATE->value =>
'invalid'],
574 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
577 public function testGetResponseToRequestListRecordsInvalidUntilDateError(): void
579 $processor =
new RequestProcessor(
581 $this->getSettings(
'prefix_'),
582 $repo = $this->getRepository(
589 $this->getTokenHandler()
592 $expected_response = <<<XML
594 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,until=invalid</response_info>
599 $response = $processor->getResponseToRequest($this->getRequest(
602 [Argument::MD_PREFIX->value =>
'oai_dc', Argument::UNTIL_DATE->value =>
'invalid'],
605 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
608 public function testGetResponseToRequestListRecordsWrongMDFormatError(): void
610 $processor =
new RequestProcessor(
612 $this->getSettings(
'prefix_'),
613 $repo = $this->getRepository(
620 $this->getTokenHandler()
623 $expected_response = <<<XML
625 <response_info>
base url:ListRecords:metadataPrefix=invalid</response_info>
630 $response = $processor->getResponseToRequest($this->getRequest(
633 [Argument::MD_PREFIX->value =>
'invalid'],
636 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
639 public function testGetResponseToRequestListRecordsNoRecordsFoundError(): void
641 $processor =
new RequestProcessor(
643 $this->getSettings(
'prefix_'),
644 $repo = $this->getRepository(),
645 $this->getTokenHandler()
648 $expected_response = <<<XML
650 <response_info>
base url:ListRecords:metadataPrefix=oai_dc</response_info>
655 $response = $processor->getResponseToRequest($this->getRequest(
658 [Argument::MD_PREFIX->value =>
'oai_dc'],
662 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
663 $repo->exposed_parameters
665 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
668 public function testGetResponseToRequestListRecordsNonDefaultSetError(): void
670 $processor =
new RequestProcessor(
672 $this->getSettings(
'prefix_'),
673 $repo = $this->getRepository(
680 $this->getTokenHandler()
683 $expected_response = <<<XML
685 <response_info>
base url:ListRecords:metadataPrefix=oai_dc,
set=
set</response_info>
690 $response = $processor->getResponseToRequest($this->getRequest(
693 [Argument::MD_PREFIX->value =>
'oai_dc',
Argument::SET->value =>
'set'],
696 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());
699 public function testGetResponseToRequestListRecordsMultipleErrors(): void
701 $processor =
new RequestProcessor(
703 $this->getSettings(
'prefix_'),
704 $repo = $this->getRepository(),
705 $this->getTokenHandler()
708 $expected_response = <<<XML
710 <response_info>
base url:ListRecords:metadataPrefix=invalid,until=also invalid,
from=
more invalid,
set=
set,identifier=
id</response_info>
720 $response = $processor->getResponseToRequest($this->getRequest(
724 Argument::MD_PREFIX->value =>
'invalid',
725 Argument::UNTIL_DATE->value =>
'also invalid',
726 Argument::FROM_DATE->value =>
'more invalid',
728 Argument::IDENTIFIER->value =>
'id'
734 [[
'from' =>
null,
'until' =>
null,
'limit' => 100,
'offset' => 0]],
735 $repo->exposed_parameters
737 $this->assertXmlStringEqualsXmlString($expected_response,
$response->saveXML());