From 3663d0a0781adb71c6c9fd24fb9ed6c266b43037 Mon Sep 17 00:00:00 2001 From: llaffont <llaffont@git-test.afi-sa.fr> Date: Tue, 21 Aug 2012 15:16:25 +0000 Subject: [PATCH] CommSigb: refacto ficheAbonne --- library/Class/CommSigb.php | 92 +++++++++++----------------- tests/library/Class/CommSigbTest.php | 27 +++++--- 2 files changed, 54 insertions(+), 65 deletions(-) diff --git a/library/Class/CommSigb.php b/library/Class/CommSigb.php index 45e4e2f6aaa..34b12516455 100644 --- a/library/Class/CommSigb.php +++ b/library/Class/CommSigb.php @@ -123,73 +123,53 @@ class Class_CommSigb { /** - * @param int $id_bib - * @param int $id_origine - * @param string $code_annexe + * @param Class_Users $user * @return array */ - public function reserverExemplaire($id_bib, $exemplaire_id, $code_annexe) { - $mode_comm = $this->getModeComm($id_bib); - if (!$user = Class_Users::getLoader()->getIdentity()) - return array('erreur' => $this->_translate->_('Vous devez vous connecter pour réserver un document.')); - Class_WebService_SIGB_EmprunteurCache::newInstance()->remove($user); + public function ficheAbonne($std_user) { + $user = Class_Users::getLoader()->find($std_user->ID_USER); + $cache = Class_WebService_SIGB_EmprunteurCache::newInstance(); + if ($cache->isCached($user)) + return ['fiche' => $cache->load($user)]; - $exemplaire = Class_Exemplaire::getLoader()->find($exemplaire_id); - $ret = array('statut' => 2, - 'erreur' => ''); - - switch ($mode_comm['type']) { - // Pergame - case self::COM_PERGAME: - $pergame = new Class_Systeme_PergameService($user); - $ret = $pergame->ReserverExemplaire($id_bib, $exemplaire->getIdOrigine(), $code_annexe); - break; - - // Autres - case self::COM_OPSYS: - case self::COM_VSMART: - case self::COM_KOHA: - case self::COM_CARTHAME: - case self::COM_NANOOK: - case self::COM_ORPHEE: - case self::COM_MICROBIB: - case self::COM_BIBLIXNET: - if (false == $sigb = $this->getSIGBComm($mode_comm)) - return array("erreur" => $this->msg_erreur_comm); - - if (!$user->IDABON) - return array("erreur" => $this->_translate->_('Vous devez vous connecter sous votre numéro de carte pour effectuer une réservation.')); - - $ret = $sigb->reserverExemplaire($user, $exemplaire, $code_annexe); - break; - } + $ficheAbonneClosure = function ($user, $sigb) use ($cache) { + try { + return ['fiche' => $cache->loadFromCacheOrSIGB($user, $sigb)]; + } catch (Exception $e) { + return ['erreur' => $e->getMessage()]; + } + }; - return $ret; + + return $this->withUserAndSIGBDo($std_user, $ficheAbonneClosure); } /** - * @param Class_Users $user + * @param int $id_bib + * @param int $id_origine + * @param string $code_annexe * @return array */ - public function ficheAbonne($user) { - $mode_comm = $this->getModeComm($user->ID_SITE); - if (!$mode_comm['type']) - return array(); + public function reserverExemplaire($id_bib, $exemplaire_id, $code_annexe) { + if (!$user = Class_Users::getIdentity()) + return ['statut' => 2, + 'erreur' => $this->_translate->_('Vous devez vous connecter pour réserver un document.')]; + + if (!$user->getIdabon()) + return ['statut' => 2, + "erreur" => $this->_translate->_('Vous devez vous connecter sous votre numéro de carte pour effectuer une réservation.')]; - $user = Class_Users::getLoader()->find($user->ID_USER); - $cache = Class_WebService_SIGB_EmprunteurCache::newInstance(); - if ($cache->isCached($user)) - return array('fiche' => $cache->load($user)); + $exemplaire = Class_Exemplaire::find($exemplaire_id); - if (false == $sigb = $this->getSIGBComm($mode_comm)) - return array('erreur' => $this->msg_erreur_comm); + $reserver = function ($user, $sigb) use ($exemplaire, $code_annexe) { + if ($sigb->isPergame()) + return (new Class_Systeme_PergameService($user))->reserverExemplaire($id_bib, $exemplaire->getIdOrigine(), $code_annexe); + + return $sigb->reserverExemplaire($user, $exemplaire, $code_annexe); + }; - try { - return array('fiche' => $cache->loadFromCacheOrSIGB($user, $sigb)); - } catch (Exception $e) { - return array('erreur' => $e->getMessage()); - } + return $this->withUserAndSIGBDo($user, $reserver); } @@ -228,11 +208,11 @@ class Class_CommSigb { public function withUserAndSIGBDo($std_user, $closure) { - $user = Class_Users::getLoader()->find($std_user->ID_USER); + $user = is_a($std_user, 'Class_Users') ? $std_user : Class_Users::find($std_user->ID_USER); Class_WebService_SIGB_EmprunteurCache::newInstance()->remove($user); if (null == $sigb = $user->getSIGBComm()) - return []; + return ['erreur' => $this->_translate->_('Communication SIGB indisponible')]; if (!$sigb->isConnected()) return array('erreur' => $this->msg_erreur_comm); diff --git a/tests/library/Class/CommSigbTest.php b/tests/library/Class/CommSigbTest.php index 67a955e3b1f..ba63ccb4870 100644 --- a/tests/library/Class/CommSigbTest.php +++ b/tests/library/Class/CommSigbTest.php @@ -539,15 +539,20 @@ class CommSigbBiblixNetTest extends CommSigbTestCase { -class CommSigbWithNotAbonneTest extends PHPUnit_Framework_TestCase { +class CommSigbWithNotAbonneTest extends Storm_Test_ModelTestCase { public function setUp() { + parent::setUp(); + $this->user = new stdClass(); $this->user->ID_SITE = 0; $this->user->ID_USER = 66; + $this->user->IDABON = 6; + Zend_Auth::getInstance()->getStorage()->write($this->user); $this->comm_sigb = new Class_CommSigb(); Class_Users::getLoader() ->newInstanceWithId(66) - ->setIdSite(0); + ->setIdSite(0) + ->setIdabon(3); } @@ -560,25 +565,29 @@ class CommSigbWithNotAbonneTest extends PHPUnit_Framework_TestCase { } /** @test */ - public function prolongerPretShouldReturnEmptyArray() { - $this->assertEquals(array(), $this->comm_sigb->prolongerPret($this->user, 0)); + public function prolongerPretShouldReturnError() { + $this->assertEquals(['erreur' => 'Communication SIGB indisponible'], + $this->comm_sigb->prolongerPret($this->user, 0)); } /** @test */ - public function supprimerReservationShouldReturnEmptyArray() { - $this->assertEquals(array(), $this->comm_sigb->supprimerReservation($this->user, 0)); + public function supprimerReservationShouldReturnError() { + $this->assertEquals(['erreur' => 'Communication SIGB indisponible'], + $this->comm_sigb->supprimerReservation($this->user, 0)); } /** @test */ - public function ficheAbonneShouldReturnEmptyArray() { - $this->assertEquals(array(), $this->comm_sigb->ficheAbonne($this->user)); + public function ficheAbonneShouldReturnError() { + $this->assertEquals(['erreur' => 'Communication SIGB indisponible'], + $this->comm_sigb->ficheAbonne($this->user)); } /** @test */ public function reserverExemplaireShouldReturnError() { - $this->assertEquals(array('statut' => 2, 'erreur' => ''), $this->comm_sigb->reserverExemplaire(0, 0, 0)); + $this->assertEquals(['erreur' => 'Communication SIGB indisponible'], + $this->comm_sigb->reserverExemplaire(0, 0, 0)); } -- GitLab