diff --git a/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php b/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php index 8e0e53cb720019b39303efadf09707c73c4ed26f..f1982b0a7769adacf331031e69dc2aa87d930953 100644 --- a/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php +++ b/module/VuFind/src/VuFind/DoiLinker/Unpaywall.php @@ -101,6 +101,11 @@ class Unpaywall implements DoiLinkerInterface, TranslatorAwareInterface, 'link' => $data['best_oa_location']['url_for_pdf'], 'label' => $this->translate('PDF Full Text'), ]; + } elseif (!empty($data['best_oa_location']['url'])) { + $response[$doi][] = [ + 'link' => $data['best_oa_location']['url'], + 'label' => $this->translate('online_resources'), + ]; } } return $response; diff --git a/module/VuFind/tests/fixtures/unpaywall/badresponse b/module/VuFind/tests/fixtures/unpaywall/badresponse new file mode 100644 index 0000000000000000000000000000000000000000..73a862369387291bdd8763c3e736e3ee86c27d9a --- /dev/null +++ b/module/VuFind/tests/fixtures/unpaywall/badresponse @@ -0,0 +1,16 @@ +HTTP/1.1 404 NOT FOUND +Connection: keep-alive +Server: gunicorn/19.9.0 +Date: Tue, 11 Feb 2020 11:38:17 GMT +Content-Type: application/json +Content-Length: 157 +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH +Access-Control-Allow-Headers: origin, content-type, accept, x-requested-with +Via: 1.1 vegur + +{ + "HTTP_status_code": 404, + "error": true, + "message": "'10.1032228/nature12373' is an invalid doi. See https://doi.org/10.1032228/nature12373" +} diff --git a/module/VuFind/tests/fixtures/unpaywall/goodresponseonline b/module/VuFind/tests/fixtures/unpaywall/goodresponseonline new file mode 100644 index 0000000000000000000000000000000000000000..fa1ec4b771e0599c2c9c65c6a895b1286361f931 --- /dev/null +++ b/module/VuFind/tests/fixtures/unpaywall/goodresponseonline @@ -0,0 +1,80 @@ +HTTP/1.1 200 OK +Connection: keep-alive +Server: gunicorn/19.9.0 +Date: Wed, 06 Nov 2019 20:38:59 GMT +Content-Type: application/json +Content-Length: 2336 +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH +Access-Control-Allow-Headers: origin, content-type, accept, x-requested-with +Via: 1.1 vegur + +{ + "best_oa_location": { + "endpoint_id": null, + "evidence": "open (via page says license)", + "host_type": "publisher", + "is_best": true, + "license": "cc-by-sa", + "pmh_id": null, + "repository_institution": null, + "updated": "2018-07-24T23:01:04.482481", + "url": "https://doi.org/10.7553/66-4-1434", + "url_for_landing_page": "https://doi.org/10.7553/66-4-1434", + "url_for_pdf": null, + "version": "publishedVersion" + }, + "data_standard": 2, + "doi": "10.7553/66-4-1434", + "doi_url": "https://doi.org/10.7553/66-4-1434", + "genre": "journal-article", + "has_repository_copy": false, + "is_oa": true, + "journal_is_in_doaj": true, + "journal_is_oa": true, + "journal_issn_l": "0256-8861", + "journal_issns": "2304-8263", + "journal_name": "South African Journal of Libraries and Information Science", + "oa_locations": [ + { + "endpoint_id": null, + "evidence": "open (via page says license)", + "host_type": "publisher", + "is_best": true, + "license": "cc-by-sa", + "pmh_id": null, + "repository_institution": null, + "updated": "2018-07-24T23:01:04.482481", + "url": "http://sajlis.journals.ac.za/pub/article/download/1434/1332", + "url_for_landing_page": "https://doi.org/10.7553/66-4-1434", + "url_for_pdf": "http://sajlis.journals.ac.za/pub/article/download/1434/1332", + "version": "publishedVersion" + }, + { + "endpoint_id": null, + "evidence": "oa journal (via doaj)", + "host_type": "publisher", + "is_best": false, + "license": "cc-by-sa", + "pmh_id": null, + "repository_institution": null, + "updated": "2019-11-06T20:38:59.834062", + "url": "https://doi.org/10.7553/66-4-1434", + "url_for_landing_page": "https://doi.org/10.7553/66-4-1434", + "url_for_pdf": null, + "version": "publishedVersion" + } + ], + "oa_status": "gold", + "published_date": "2014-01-26", + "publisher": "Stellenbosch University", + "title": "Pioneers, passionate ladies, and private eyes : dime novels, series books, and paperbacks Sullivan, Larry E. & Cushman Schurman, Lydia eds.", + "updated": "2018-07-24T23:02:00.263680", + "year": 2014, + "z_authors": [ + { + "family": "Sandham", + "given": "Tim" + } + ] +} diff --git a/module/VuFind/tests/fixtures/unpaywall/goodresponse b/module/VuFind/tests/fixtures/unpaywall/goodresponsepdf similarity index 100% rename from module/VuFind/tests/fixtures/unpaywall/goodresponse rename to module/VuFind/tests/fixtures/unpaywall/goodresponsepdf diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php index f76d4f161ee3d65b86f1a8f0d0f34f4102e7131e..f04a453e305340522b0dee5badb29775aabf12f1 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/DoiLinker/UnpaywallTest.php @@ -63,28 +63,57 @@ class UnpaywallTest extends \VuFindTest\Unit\TestCase public function testApiSuccess() { $adapter = new TestAdapter(); - $file = realpath( - __DIR__ . '/../../../../../tests/fixtures/unpaywall/goodresponse' - ); - $response = file_get_contents($file); - $responseObj = HttpResponse::fromString($response); - $adapter->setResponse($responseObj); - $service = new \VuFindHttp\HttpService(); - $service->setDefaultAdapter($adapter); + $testData = [ + [ + 'filename' => realpath(__DIR__ + . '/../../../../../tests/fixtures/unpaywall/goodresponsepdf' + ), + 'response' => [ + '10.7553/66-4-1434' => [ + [ + 'link' => 'http://sajlis.journals.ac.za/pub/article/download/1434/1332', + 'label' => 'PDF Full Text', + ] + ] + ] + ], + [ + 'filename' => realpath(__DIR__ + . '/../../../../../tests/fixtures/unpaywall/goodresponseonline' + ), + 'response' => [ + '10.7553/66-4-1434' => [ + [ + 'link' => 'https://doi.org/10.7553/66-4-1434', + 'label' => 'online_resources', + ] + ] + ] + ], + [ + 'filename' => realpath(__DIR__ + . '/../../../../../tests/fixtures/unpaywall/badresponse' + ), + 'response' => [] + ], + ]; + $config = [ 'unpaywall_email' => 'foo@myuniversity.edu', ]; $unpaywall = new Unpaywall(new \Zend\Config\Config($config)); - $unpaywall->setHttpService($service); - $this->assertEquals( - ['10.7553/66-4-1434' => [ - [ - 'link' => 'http://sajlis.journals.ac.za/pub/article/download/1434/1332', - 'label' => 'PDF Full Text', - ] - ] - ], - $unpaywall->getLinks(['10.7553/66-4-1434']) - ); + + foreach ($testData as $data) { + $response = file_get_contents($data['filename']); + $responseObj = HttpResponse::fromString($response); + $adapter->setResponse($responseObj); + $service = new \VuFindHttp\HttpService(); + $service->setDefaultAdapter($adapter); + $unpaywall->setHttpService($service); + $this->assertEquals( + $data['response'], + $unpaywall->getLinks(['10.7553/66-4-1434']) + ); + } } }