From 8c362440b5fa555a5c150272d6180b0bf08a0f02 Mon Sep 17 00:00:00 2001 From: Arthur Suzuki <arthur.suzuki@biblibre.com> Date: Thu, 6 Apr 2023 09:26:56 +0000 Subject: [PATCH] hotline#169167 : update nanook error codes for renewals --- VERSIONS_HOTLINE/169167 | 1 + .../Class/WebService/SIGB/Nanook/Service.php | 7 ++- tests/fixtures/NanookFixtures.php | 28 +++++++++- .../Class/WebService/SIGB/NanookTest.php | 56 ++++++++++++++++++- 4 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 VERSIONS_HOTLINE/169167 diff --git a/VERSIONS_HOTLINE/169167 b/VERSIONS_HOTLINE/169167 new file mode 100644 index 00000000000..5d6065c35ff --- /dev/null +++ b/VERSIONS_HOTLINE/169167 @@ -0,0 +1 @@ + - correctif #169167 : SIGB Nanook : Mise à jour des messages d'erreurs sur les prolongations de prêts. \ No newline at end of file diff --git a/library/Class/WebService/SIGB/Nanook/Service.php b/library/Class/WebService/SIGB/Nanook/Service.php index 9acfeae1f21..942a0bf3fc3 100644 --- a/library/Class/WebService/SIGB/Nanook/Service.php +++ b/library/Class/WebService/SIGB/Nanook/Service.php @@ -36,21 +36,26 @@ class Class_Webservice_SIGB_Nanook_Service 'PatronNoSubscription' => $this->_('Réservation impossible, abonnement échu.'), 'PatronHoldRecordForbidden' => $this->_('Pas de droit de réservation pour ce document.'), 'PatronMaxHoldsReached' => $this->_('Quota atteint pour ce type de document.'), + 'PatronAlreadyLoanOnHoldTitle' => $this->_('Réservation impossible, document déjà en prêt sur la carte de l\'abonné'), 'PatronHoldNoveltyRecordForbidden' => $this->_('Pas de droit de réservation pour cette nouveauté.'), 'PatronMaxHoldsNoveltyReached' => $this->_('(quotas max pour les nouveautés)'), 'PatronPasswordNotSecure' => $this->_('Le mot de passe choisi est trop simple.'), 'OpacAvailableItemNotHoldable' => $this->_('Document disponible : Pas de droit de réservation d\'un document disponible depuis l\'Opac.'), 'PatronForbiddenHold' => $this->_('Réservation interdite pour l\'abonné.'), + 'PatronReadLevelForbidden' => $this->_('Réservation impossible : Niveau de lecture interdit pour cet abonné'), + 'NotHoldable' => $this->_('Document non réservable'), 'RecordNotHoldableForPickupLocation' => $this->_('Exemplaire non réservable pour ce site de transfert (interdiction des transferts).'), 'RenewMaxDateReached' => $this->_('Prolongation impossible, le délai est dépassé.'), 'RenewNoSubscription' => $this->_('Prolongation impossible, votre abonnement est échu.'), 'RenewRecordForbidden' => $this->_('Prolongation interdite pour ce type de document.'), 'RenewRecordHold' => $this->_('Prolongation impossible, le document est réservé.'), 'RenewLoanNotFound' => $this->_('Prolongation impossible, pas de prêt trouvé sur cet exemplaire.'), - 'RenewNoNewDate' => $this->_('Prolongation sans effet, pas de nouvelle date de retour.'), + 'RenewNoNewDueDate' => $this->_('Prolongation sans effet, pas de nouvelle date de retour.'), 'MaxRenewReached' => $this->_('Prolongation impossible, le nombre maximum de prolongations est atteint.'), + 'MaxRenewNoveltyReached' => $this->_('Prolongation impossible, nombre de prolongations maximal atteint pour ce prêt d\'une nouveauté.'), 'RecordNotFound' => $this->_('Notice non trouvée'), 'PatronNotFound' => $this->_('Abonné non trouvé'), + 'PickupLocationNotFound' => $this->_('Réservation impossible : Site de retrait non trouvé'), 'HoldLocationOrderNotFound' => $this->_('Erreur paramétrage priorité site de retrait'), 'PatronAlreadyRegistered' => $this->_('Préinscription impossible, cet abonné existe déjà '), 'PatronAlreadyHoldTitle' => $this->_('Ce document est déjà réservé sur votre carte') diff --git a/tests/fixtures/NanookFixtures.php b/tests/fixtures/NanookFixtures.php index 46f7bb98049..5ef8263c909 100644 --- a/tests/fixtures/NanookFixtures.php +++ b/tests/fixtures/NanookFixtures.php @@ -54,6 +54,22 @@ class NanookFixtures { } + public static function xmlReadLevelHoldTitleError() : string { + return '<?xml version="1.0" encoding="UTF-8"?> + <HoldTitle> + <error>PatronReadLevelForbidden</error> + </HoldTitle>'; + } + + + public static function xmlPickupLocationNotFoundHoldTitleError() : string { + return '<?xml version="1.0" encoding="UTF-8"?> + <HoldTitle> + <error>PickupLocationNotFound</error> + </HoldTitle>'; + } + + /** @return string */ public static function xmlHoldTitleSuccess() { return '<?xml version="1.0" encoding="UTF-8"?> @@ -89,10 +105,10 @@ class NanookFixtures { /** @return string */ - public static function xmlRenewNoNewDateError() { + public static function xmlRenewNoNewDueDateError() { return '<?xml version="1.0" encoding="UTF-8"?> <RenewLoan> - <error>RenewNoNewDate</error> + <error>RenewNoNewDueDate</error> </RenewLoan>'; } @@ -106,6 +122,14 @@ class NanookFixtures { } + public static function xmlRenewLoanMaxRenewNoveltyReachedError() : string { + return '<?xml version="1.0" encoding="UTF-8"?> + <RenewLoan> + <error>MaxRenewNoveltyReached</error> + </RenewLoan>'; + } + + /** @return string */ public static function xmlRenewLoanSucces() { return '<?xml version="1.0" encoding="UTF-8"?> diff --git a/tests/library/Class/WebService/SIGB/NanookTest.php b/tests/library/Class/WebService/SIGB/NanookTest.php index 749d4c38320..562e479ef76 100644 --- a/tests/library/Class/WebService/SIGB/NanookTest.php +++ b/tests/library/Class/WebService/SIGB/NanookTest.php @@ -1210,10 +1210,28 @@ class NanookOperationsTest extends NanookTestCase { $this->_mock_web_client ->whenCalled('open_url') ->with('http://localhost:8080/afi_Nanook/ilsdi/service/RenewLoan/patronId/1/itemId/196895') - ->answers(NanookFixtures::xmlRenewNoNewDateError()); + ->answers(NanookFixtures::xmlRenewNoNewDueDateError()); $this->assertEquals( - array('statut' => false, 'erreur' => 'Prolongation sans effet, pas de nouvelle date de retour.'), + ['statut' => false, 'erreur' => 'Prolongation sans effet, pas de nouvelle date de retour.'], + $this->_service->prolongerPret( + Class_Users::getLoader()->newInstance() ->setIdSigb('1'), + '196895' + ) + ); + } + + + /** @test */ + public function prolongerPretShouldReturnMaxRenewNoveltyFailure() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://localhost:8080/afi_Nanook/ilsdi/service/RenewLoan/patronId/1/itemId/196895') + ->answers(NanookFixtures::xmlRenewLoanMaxRenewNoveltyReachedError()); + + $this->assertEquals( + ['statut' => false, + 'erreur' => 'Prolongation impossible, nombre de prolongations maximal atteint pour ce prêt d\'une nouveauté.'], $this->_service->prolongerPret( Class_Users::getLoader()->newInstance() ->setIdSigb('1'), '196895' @@ -1266,7 +1284,7 @@ class NanookOperationsTest extends NanookTestCase { ->with('http://localhost:8080/afi_Nanook/ilsdi/service/HoldTitle/bibId/196895/patronId/1/pickupLocation/Site%20Principal') ->answers(NanookFixtures::xmlHoldTitleError()); - $this->assertEquals(array('statut' => false, 'erreur' => 'Réservation impossible'), + $this->assertEquals(['statut' => false, 'erreur' => 'Document non réservable'], $this->_service->reserverExemplaire( Class_Users::getLoader()->newInstance() ->setIdSigb('1'), Class_Exemplaire::getLoader()->newInstance()->setIdOrigine('196895'), @@ -1293,6 +1311,38 @@ class NanookOperationsTest extends NanookTestCase { } + /** @test */ + public function reserverExemplaireShouldReturnFailureIfReadLevelErrors() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://localhost:8080/afi_Nanook/ilsdi/service/HoldTitle/bibId/196895/patronId/1/pickupLocation/Site%20Principal') + ->answers(NanookFixtures::xmlReadLevelHoldTitleError()); + + $this->assertEquals(['statut' => false, 'erreur' => 'Réservation impossible : Niveau de lecture interdit pour cet abonné'], + $this->_service->reserverExemplaire( + Class_Users::getLoader()->newInstance() ->setIdSigb('1'), + Class_Exemplaire::getLoader()->newInstance()->setIdOrigine('196895'), + 'Site Principal' + )); + } + + + /** @test */ + public function reserverExemplaireShouldReturnFailureIfPickupLocationErrors() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://localhost:8080/afi_Nanook/ilsdi/service/HoldTitle/bibId/196895/patronId/1/pickupLocation/Site%20Principal') + ->answers(NanookFixtures::xmlPickupLocationNotFoundHoldTitleError()); + + $this->assertEquals(['statut' => false, 'erreur' => 'Réservation impossible : Site de retrait non trouvé'], + $this->_service->reserverExemplaire( + Class_Users::getLoader()->newInstance() ->setIdSigb('1'), + Class_Exemplaire::getLoader()->newInstance()->setIdOrigine('196895'), + 'Site Principal' + )); + } + + /** @test */ public function supprimerReservationShouldReturnSuccessIfNoErrors() { $this->_mock_web_client -- GitLab