From b2bfd7ae8e6dee3385d40e1e7be552fcd86ca8fb Mon Sep 17 00:00:00 2001
From: Robert Lange <robert.lange@uni-leipzig.de>
Date: Tue, 5 Oct 2021 00:45:22 +0200
Subject: [PATCH] refs #20620 [finc] add tests for getUrls

* handle warning in SolrMarcFincTrait for empty indicator
* add tests and fixtures for #20600 and #18915
* run with: docker exec -it [your php container] sh -c "vendor/bin/phpunit --configuration module/finc/tests/phpunit.xml module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php"
---
 .../getUrls/IIIF_0-1763648745_fullrecord.txt  |  1 +
 .../getUrls/IIIF_0-1763648745_result.json     | 12 ++++
 ...sil_with_DE-15_0-1497294835_fullrecord.txt |  1 +
 .../isil_with_DE-15_0-1497294835_result.json  |  7 ++
 ...sil_for_22-15-qucosa-161943_fullrecord.txt |  1 +
 ...o_isil_for_22-15-qucosa-161943_result.json |  7 ++
 .../RecordDriver/SolrMarcFincTestCase.php     | 65 +++++++++++++++++--
 7 files changed, 88 insertions(+), 6 deletions(-)
 create mode 100644 module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt
 create mode 100644 module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json
 create mode 100644 module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt
 create mode 100644 module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json
 create mode 100644 module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt
 create mode 100644 module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json

diff --git a/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt
new file mode 100644
index 00000000000..9f026ebd72b
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_fullrecord.txt
@@ -0,0 +1 @@
+03910nam a22009732  45000010013000000030007000130050017000200070015000370080041000520240039000930350023001320350026001550350022001810400031002030410008002340840043002421000030002852450247003152460014005622640009005763000037005853360026006223370032006483380037006805000057007175020058007745060106008325330104009385350015010425400083010575400104011405830068012446550091013127510074014037760214014778500007016918560114016988560119018129120016019319360192019479510007021398520032021468560065021788520031022439700007022749710010022819720010022919730007023019350009023088520016023178520018023338520017023518520017023688520018023858520016024038520018024198520018024378520018024558520017024738520017024908520018025078520017025258560065025428520031026079700007026389710010026459720010026559730007026659350009026728520016026818520018026978520017027158520017027328520018027498520016027678520018027838520018028018520018028198520017028378520017028548520018028718520017028899800030029060-1763648745DE-62720210719201444.0cr uuu---uuuuu210719s1965    xx |||||om    00| ||ger c7 aurn:nbn:de:bsz:15-0020-3325332urn  a(DE-627)1763648745  a(DE-599)KXP1763648745  a(OCoLC)1260628169  aDE-627bgercDE-627erakwb  ager  aZX 70002rvk0(DE-625)rvk/158439:142571 aGöldner, Karl-Heinz4aut10aZum gegenseitigen Führen, Ein- und Unterordnen der Schüler im Sportunterrichtbein Beitrag zur Erziehung der Schüler zur Kollektivität im Sportunterricht; dargestellt auf der Grundlage eines pädagogischen ExperimentscKarl-Heinz Göldner30aEinordnen 1c1965  aIX, 200, XXVI Bl.bgraph. Darst.  aTextbtxt2rdacontent  aComputermedienbc2rdamedia  aOnline-Ressourcebcr2rdacarrier  aWahrnehmung der Rechte durch die VG Wort (§ 51 VGG)  aLeipzig, Dt. Hochsch. für Körperkultur, Diss., 19650 qDE-15aOpen AccesseControlled Vocabulary for Access Rightsuhttp://purl.org/coar/access_right/c_abf2  aOnline-AusgabebLeipzigcUniversitätsbibliothek Leipzigd2020e1 Online-Ressource7|2020||||||||||1 aUB Leipzig  qDE-15aUrheberrechtsschutz 1.02rsuhttp://rightsstatements.org/vocab/InC/1.0/  qDE-15aFreier Zugang - Rechte vorbehalten 1.0fUBL FZ-RV 1.0uhttps://www.ub.uni-leipzig.de/fz-rv-11 aArchivierung/Langzeitarchivierung gewährleistet2pdager5DE-15 7aHochschulschrift0(DE-588)4113937-90(DE-627)1058257780(DE-576)2094805802gnd-content  aLeipzig0(DE-588)4035206-70(DE-627)1047989980(DE-576)2090112464uvp08iElektronische Reproduktion vonaGöldner, Karl-HeinztZum gegenseitigen Führen, Ein- und Unterordnen der Schüler im Sportunterrichtd1965hIX, 200, XXVI Bl.w(DE-627)142511671Xw(DE-576)355116715nUB Leipzig  aaa40uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-332533xDigitalisierungyOnline-Zugriffzkostenfrei3Volltext42uhttps://iiif.ub.uni-leipzig.de/0000030933/manifest.jsonmB:DE-15qapplication/jsonxDigitalisierungyIIIF-Manifest  aZDB-175-LHSrvaZX 7000bAllgemeines; EinführungenkSportkSportwissenschaftkTheorie des SportskAllgemeineskAllgemeines; Einführungen0(DE-627)139653542X0(DE-625)rvk/158439:142570(DE-576)32653542X  aBO  aDE-15z2021-07-19T00:00:00Z40uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-3325339LFER  aLFERz2021-08-10T19:50:52Z  cOD  cEBOOK  cEBOOK  cEB  alfer  2lferaDE-15  2lferaDE-Brt1  2lferaDE-Rs1  2lferaDE-Ch1  2lferaDE-L229  2lferaDE-14  2lferaDE-Pl11  2lferaDE-Gla1  2lferaDE-Zwi2  2lferaDE-Zi4  2lferaDE-Bn3  2lferaDE-D161  2lferaDE-10540uhttp://nbn-resolving.org/urn:nbn:de:bsz:15-0020-3325339LFER  aLFERz2021-09-14T20:01:17Z  cOD  cEBOOK  cEBOOK  cEB  alfer  2lferaDE-15  2lferaDE-Brt1  2lferaDE-Rs1  2lferaDE-Ch1  2lferaDE-L229  2lferaDE-14  2lferaDE-Pl11  2lferaDE-Gla1  2lferaDE-Zwi2  2lferaDE-Zi4  2lferaDE-Bn3  2lferaDE-D161  2lferaDE-105  a1763648745b0k1763648745
\ No newline at end of file
diff --git a/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json
new file mode 100644
index 00000000000..9d36b72bea9
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/IIIF_0-1763648745_result.json
@@ -0,0 +1,12 @@
+[
+  {
+    "url": "http://nbn-resolving.org/urn:nbn:de:bsz:15-0020-332533",
+    "desc": "Full Text",
+    "indicators": "40"
+  },
+  {
+    "url": "https://iiif.ub.uni-leipzig.de/0000030933/manifest.json",
+    "desc": "IIIF-Manifest, Digitalisierung",
+    "indicators": "42"
+  }
+]
\ No newline at end of file
diff --git a/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt
new file mode 100644
index 00000000000..5275de52855
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_fullrecord.txt
@@ -0,0 +1 @@
+03104naa a2200997   45000010013000000030007000130050017000200070015000370080041000520240041000930350023001340350022001570350025001790400031002040410008002350820008002431000091002512450062003422640051004043000021004553360026004763370032005023380037005345910065005716500071006366500076007076500074007836510070008579510007009278560083009348520032010179500009010499500014010589500017010729500010010899500015010999500028011149500018011429500011011609500011011719500015011829500009011979500010012069500015012169500014012319500014012459500025012599500029012849500035013139500016013489500012013649500018013769500015013949500015014099500023014249500030014479500009014779500039014869500031015259500009015569500042015659500048016079500041016559500010016969500040017069500009017469500011017559500027017669500007017939500015018009500025018159500026018409500022018669500020018889500019019089500014019279500013019419500015019549500017019699500017019869500015020039510010020189510010020288520027020389800041020650-1497294835DE-62720150306122414.0cr uuu---uuuuu150306s2015    xx |||||o     00| ||eng c7 aurn:nbn:de:bsz:15-qucosa-1619432urn  a(DE-627)1497294835  a(DE-576)427294835  a(DE-599)BSZ427294835  aDE-627bgercDE-627erakwb  aeng0 a7911 aStoppe, Sebastiand1978-0(DE-588)13178076X0(DE-627)6633567330(DE-576)34640150X4aut10aHow predictable are the Academy Awards?cSebastian Stoppe 1aLeipzigbUniversitätsbibliothek Leipzigc2015  aOnline-Ressource  aTextbtxt2rdacontent  aComputermedienbc2rdamedia  aOnline-Ressourcebcr2rdacarrier  aworkingPaper ; IMD-Felder und 1131 maschinell ergänzt (SWB)070(DE-588)4017102-40(DE-627)1045596830(DE-576)208918531aFilm2gnd070(DE-588)4204337-20(DE-627)10514410X0(DE-576)210161345aFilmpreis2gnd070(DE-588)4005227-80(DE-627)1047680290(DE-576)208859845aUmfrage2gnd 70(DE-588)4078704-70(DE-627)1060766120(DE-576)209209682aUSA2gnd  aAR4 uhttp://nbn-resolving.de/urn:nbn:de:bsz:15-qucosa-161943yOnline-Zugriff9DE-15  aDE-15z2015-03-06T12:24:14Z  aKino  aSpielfilm  aFilmaufnahme  aFilme  aSpielfilme  aAudiovisuelles Material  aVideokassette  a电影  a電影  aФильм  aFilm  aPreis  aFilmpreise  a电影奬  a電影奬  aКинопремия  aUnited States of America  aVereinigte Staaten von Amerika  aNordamerika  aAmerika  aUnited States  aEtats Unis  aEtats-Unis  aVereinigte Staaten  aEstados Unidos de America  aEEUU  aVereinigte Staaten von Nordamerika  aSoedinennye Štaty Ameriki  aSŠA  aStany Zjednoczone Ameryki Północnej  aHēnōmenai Politeiai tēs Boreiu Amerikēs  aHēnōmenes Politeies tēs Amerikēs  aHēPA  aĒnōmenes Politeies tēs Amerikēs  aĒPA  aMeiguo  aEtats-Unis d'Amérique  aUS  aAmerikaner  aBevölkerungsumfrage  aRepräsentativumfrage  aMeinungsbefragung  aMeinungsumfrage  aVolksbefragung  aBefragung  aUmfragen  aDemoskopie  a民意调查  a民意調查  aОпрос  aXD-US  bXA-DE  2fincaFID-MEDIEN-DE-15  a1497294835b0k1497294835o427294835
\ No newline at end of file
diff --git a/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json
new file mode 100644
index 00000000000..199d5009e41
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/isil_with_DE-15_0-1497294835_result.json
@@ -0,0 +1,7 @@
+[
+  {
+    "url": "http://nbn-resolving.de/urn:nbn:de:bsz:15-qucosa-161943",
+    "desc": "Online-Zugriff",
+    "indicators": "4 "
+  }
+]
\ No newline at end of file
diff --git a/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt
new file mode 100644
index 00000000000..79c2b4b3541
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_fullrecord.txt
@@ -0,0 +1 @@
+01725cam a2200397157450000100200000000700150002000800390003504100080007403700360008210000220011824500440014026000790018452005410026350000170080485600780082165000340089965000150093365000220094865000210097065000090099165000350100065000110103565000140104665000190106065000260107965000110110565000220111665000190113865000090115765000200116665000290118665000100121565000110122508200080123698000830124422-15-qucosa-161943cr |||||||||||150101s2015    xx                  eng  aeng  nurn:nbn:de:bsz:15-qucosa-161943  aStoppe, Sebastian  aHow predictable are the Academy Awards?  bUniversitätsbibliothek Leipzigc2015g(issued 2015-03-06)9(created 2015)3 aBy conducting an explorative study it is tried to determine whether a sample of film enthusiasts can produce a similar result in judging for the 87th Academy Awards for movies in 2014 like the actual Academy members or not. An online survey has been created and the votes cast by the participants have been tabulated. It can be shown that the results of the simulated awards voting in the survey are quite similar to the actual Academy decision. However, additional adjustments and further studies are recommended to ensure the results.  aworkingPaper41uhttps://nbn-resolving.org/urn:nbn:de:bsz:15-qucosa-161943zOnline-Zugriff 4aAcademy Awards. Rangfolgewahl 4aWahlzettel 4aeinfache Mehrheit 4aVorhersagbarkeit 4aFilm 4aVereinigte Staaten von Amerika 4aStudie 4aBefragung 4aAcademy Awards 4ainstant runoff voting 4aballot 4arelative majority 4apredictability 4afilm 4amotion pictures 4aUnited States of America 4astudy 4asurvey0 a791  aurn:nbn:de:bsz:15-qucosa-161943b22csid-22-col-qucosa-adlrcsid-22-col-qucosa
\ No newline at end of file
diff --git a/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json
new file mode 100644
index 00000000000..6f031148fd5
--- /dev/null
+++ b/module/finc/tests/fixtures/getUrls/no_isil_for_22-15-qucosa-161943_result.json
@@ -0,0 +1,7 @@
+[
+  {
+    "url": "https://nbn-resolving.org/urn:nbn:de:bsz:15-qucosa-161943",
+    "desc": "Online-Zugriff",
+    "indicators": "41"
+  }
+]
\ No newline at end of file
diff --git a/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php b/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php
index 886eb7aecb2..1b5e7ec45dd 100644
--- a/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php
+++ b/module/finc/tests/unit-tests/src/fincTest/RecordDriver/SolrMarcFincTestCase.php
@@ -28,8 +28,9 @@
  */
 namespace fincTest\RecordDriver;
 
-use VuFindTest\Unit\TestCase as VuFindTestCase;
 use finc\RecordDriver\SolrMarcFinc as SolrMarcFincDriver;
+use finc\RecordDriver\SolrMarcFincTrait;
+use VuFindTest\Unit\TestCase as VuFindTestCase;
 
 /**
  * SolrMarcTestCase
@@ -38,6 +39,7 @@ use finc\RecordDriver\SolrMarcFinc as SolrMarcFincDriver;
  * @package  finc
  * @author   Guenter Hipler  <guenter.hipler@unibas.ch>
  * @author   Frank Morgner  <morgnerf@ub.uni-leipzig.de>
+ * @author   Robert Lange  <lange@ub.uni-leipzig.de>
  * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
  * @link     http://vufind.org
  */
@@ -73,11 +75,62 @@ class SolrMarcFincTestCase extends VuFindTestCase
      *
      * @return array
      */
-    protected function getFixtureData($file)
+    protected function getFixtureData($file, $decode = true)
+    {
+        $content = file_get_contents(realpath(FINC_TEST_FIXTURES . '/' . $file));
+        return $decode ? json_decode($content, true) : $content;
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetURLs()
+    {
+        // although not current isil, link for IIIF should be shown based on indicator 2 #20600
+        $this->runGetURLsTestCase('IIIF_0-1763648745');
+        $this->runGetURLsTestCase('IIIF_0-1763648745', ['DE-15']);
+
+        // Record 0-1497294835 with isil of DE-15 in fullrecord (subfield 9) results in empty array for adlr #18915
+        $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['DE-15-FID'], []);
+        $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['FID-MEDIEN-DE-15'], []);
+        // .. but is shown in DE-15
+        $this->runGetURLsTestCase('isil_with_DE-15_0-1497294835', ['DE-15']);
+
+        // Record 0-1497294835 has no given isil in fullrecord (subfield 9) => shown as default / fallback #18915
+        $this->runGetURLsTestCase('no_isil_for_22-15-qucosa-161943', ['DE-15-FID']);
+        $this->runGetURLsTestCase('no_isil_for_22-15-qucosa-161943', ['DE-15']);
+    }
+
+    protected function getDriverMock()
+    {
+        return new SolrMarcFincDriverMock();
+    }
+
+    /**
+     * @return void
+     */
+    public function runGetURLsTestCase(string $testCase, array $isils = [], $expectedResult = null)
+    {
+        $driver = $this->getDriverMock();
+        $driver->setFullRecord($this->getFixtureData("getUrls/{$testCase}_fullrecord.txt", false));
+        $driver->setIsils($isils);
+        $actualResult = $driver->getURLs();
+        $expectedResult = $expectedResult ?? $this->getFixtureData("/getUrls/{$testCase}_result.json");
+        $this->assertEquals($expectedResult, $actualResult);
+    }
+}
+
+class SolrMarcFincDriverMock extends SolrMarcFincDriver
+{
+    use SolrMarcFincTrait;
+
+    public function setFullRecord(string $fullrecord)
+    {
+        $this->fields['fullrecord'] = $fullrecord;
+    }
+
+    public function setIsils(array $isils)
     {
-        return json_decode(
-            file_get_contents(realpath(FINC_TEST_FIXTURES . '/' . $file)),
-            true
-        );
+        $this->isil = $isils;
     }
 }
-- 
GitLab