diff --git a/library/Class/WebService/SIGB/VSmart/SearchResponseReader.php b/library/Class/WebService/SIGB/VSmart/SearchResponseReader.php index c530877e013ffedcc948fd2683bbcc36656687b1..e2c48f7968cb895ea7b981b330b91a95345bd27c 100644 --- a/library/Class/WebService/SIGB/VSmart/SearchResponseReader.php +++ b/library/Class/WebService/SIGB/VSmart/SearchResponseReader.php @@ -21,23 +21,23 @@ class Class_WebService_SIGB_VSmart_SearchResponseReader extends Class_WebService_SIGB_AbstractMarcXMLNoticeReader { protected $_current_exemplaire; - protected $_STATUT_SYSTEME = array('0' => 'Disponible', - '4' => 'En prêt', - '8' => 'En attende de retrait', - '10' => 'En déplacement', - '23' => 'Non empruntable', - '11' => 'Prétendu rendu', - '12' => 'Perdu', - '13' => 'Manquant', - '21' => 'Autre', - '22' => 'Nouveauté', - '25' => 'En rachat', - '26' => 'En réparation', - '27' => 'En magasin', - '28' => 'Pilon', - '29' => 'Exclu du prêt', - '30' => 'En commande', - '31' => 'A l\'équipement'); + protected $_STATUT_SYSTEME = ['0' => 'Disponible', + '4' => 'En prêt', + '8' => 'En attende de retrait', + '10' => 'En déplacement', + '23' => 'Non empruntable', + '11' => 'Prétendu rendu', + '12' => 'Perdu', + '13' => 'Manquant', + '21' => 'Autre', + '22' => 'Nouveauté', + '25' => 'En rachat', + '26' => 'En réparation', + '27' => 'En magasin', + '28' => 'Pilon', + '29' => 'Exclu du prêt', + '30' => 'En commande', + '31' => 'A l\'équipement']; public static function newInstance() { return new self(); @@ -70,16 +70,21 @@ class Class_WebService_SIGB_VSmart_SearchResponseReader extends Class_WebService public function endSubfield_852_y($data) { - $this->_current_exemplaire->setReservable($data == '4'); + $this->_current_exemplaire + ->setReservable($this->isReservable($data)); + + $dispo = (array_key_exists($data, $this->_STATUT_SYSTEME)) + ? $this->_STATUT_SYSTEME[$data] : 'Inconnu'; - if (array_key_exists($data, $this->_STATUT_SYSTEME)) - $dispo = $this->_STATUT_SYSTEME[$data]; - else - $dispo = 'Inconnu'; $this->_current_exemplaire->setDisponibilite($dispo); } + protected function isReservable($data) { + return in_array((int)$data, [4, 8]); + } + + public function endSubfield_852_u($data) { $this->_current_exemplaire->setVisibleOpac($data != '0'); } @@ -89,18 +94,14 @@ class Class_WebService_SIGB_VSmart_SearchResponseReader extends Class_WebService $date = $data; // date reçue au format AAAAMMJJ, transformée en jj/mm/aaaa if (8 == strlen($date)) { - $parts = array( - substr($data, 6, 2), - substr($date, 4, 2), - substr($date, 0, 4), - ); + $parts = [substr($data, 6, 2), + substr($date, 4, 2), + substr($date, 0, 4)]; $date = implode('/', $parts); - } $this->_current_exemplaire->setDateRetour($date); - } } diff --git a/tests/library/Class/WebService/SIGB/VSmartFixtures.php b/tests/library/Class/WebService/SIGB/VSmartFixtures.php index 77398e9e3fe0e853ab7d2af5ca2f73c72233151b..7afd273e10b4de498798729e12b5472f210f0135 100644 --- a/tests/library/Class/WebService/SIGB/VSmartFixtures.php +++ b/tests/library/Class/WebService/SIGB/VSmartFixtures.php @@ -220,7 +220,7 @@ class VSmartFixtures { <subfield code="t">NEM</subfield> <subfield code="y">4</subfield> <subfield code="x">20110205</subfield> - <subfield code="y">8</subfield> + <subfield code="y">10</subfield> </datafield> </zs:recordData> <zs:recordPosition>1</zs:recordPosition> @@ -309,6 +309,17 @@ class VSmartFixtures { <subfield code="t">LFA</subfield> <subfield code="y">0</subfield> </datafield> + <datafield tag="852"> + <subfield code="a">RES</subfield> + <subfield code="b">MCFC</subfield> + <subfield code="c">MCRPT</subfield> + <subfield code="e">20110301</subfield> + <subfield code="h">R</subfield> + <subfield code="p">9988O4DV</subfield> + <subfield code="q">9988O4DV</subfield> + <subfield code="t">LFA</subfield> + <subfield code="y">8</subfield> + </datafield> </zs:recordData> <zs:recordPosition>-1</zs:recordPosition> </zs:record> diff --git a/tests/library/Class/WebService/SIGB/VSmartTest.php b/tests/library/Class/WebService/SIGB/VSmartTest.php index 7a7393fd518973066ce645cfd3564bdf80f78d42..d58efb954d242e9e4ad504fd706877098372dc77 100644 --- a/tests/library/Class/WebService/SIGB/VSmartTest.php +++ b/tests/library/Class/WebService/SIGB/VSmartTest.php @@ -22,20 +22,15 @@ include_once('VSmartFixtures.php'); abstract class VSmartServiceTestCase extends Storm_Test_ModelTestCase { public function setUp() { - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CodifAnnexe') - ->whenCalled('findFirstBy') - ->with(array('code' => 'MCFC')) - ->answers(Class_CodifAnnexe::getLoader()->newInstanceWithId(2) - ->setCode('MCFC') - ->setLibelle('Médiathèque communautaire')) - ->getWrapper() - - ->whenCalled('findFirstBy') - ->with(array('code' => 'AVER')) - ->answers(Class_CodifAnnexe::getLoader()->newInstanceWithId(4) - ->setCode('AVER') - ->setLibelle('Avermes')) - ->getWrapper(); + $this->fixture('Class_CodifAnnexe', + ['id'=> 1, + 'code' => 'MCFC', + 'libelle' => 'Médiathèque communautaire']); + + $this->fixture('Class_CodifAnnexe', + ['id' => 2, + 'code' => 'AVER', + 'libelle' => 'Avermes']); } } @@ -66,7 +61,7 @@ class VSmartServiceDummyFunctionsTest extends Storm_Test_ModelTestCase { class VSmartGetServiceTest extends Storm_Test_ModelTestCase { public function setUp() { Class_WebService_SIGB_VSmart::reset(); - $this->service = Class_WebService_SIGB_VSmart::getService(array('url_serveur' => 'vpn.moulins.fr')); + $this->service = Class_WebService_SIGB_VSmart::getService(['url_serveur' => 'vpn.moulins.fr']); } @@ -90,12 +85,10 @@ class VSmartGetServiceTest extends Storm_Test_ModelTestCase { class VSmartServiceWithEmprunteurEvelyneTest extends VSmartServiceTestCase { public function setUp() { parent::setUp(); - $mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - $mock_web_client - ->expects($this->once()) - ->method('open_url') + $mock_web_client = $this->mock() + ->whenCalled('open_url') ->with('http://86.64.58.38/formation/VubisSmartHttpApi.csp?fu=GetBorrower&MetaInstitution=RES&BorrowerId=04051972') - ->will($this->returnValue(VSmartFixtures::xmlBorrowerEvelyne())); + ->answers(VSmartFixtures::xmlBorrowerEvelyne()); $this->evelyne = Class_WebService_SIGB_VSmart_Service::newInstance() ->setServerRoot('86.64.58.38/formation/') @@ -270,12 +263,10 @@ class VSmartServiceWithEmprunteurEvelyneTest extends VSmartServiceTestCase { class VSmartServiceWithEmprunteurEvelyneResponseErrorTest extends VSmartServiceTestCase { public function setUp() { parent::setUp(); - $mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - $mock_web_client - ->expects($this->once()) - ->method('open_url') + $mock_web_client = $this->mock() + ->whenCalled('open_url') ->with('http://86.64.58.38/formation/VubisSmartHttpApi.csp?fu=GetBorrower&MetaInstitution=RES&BorrowerId=04051972') - ->will($this->returnValue('')); + ->answers(''); $this->evelyne = Class_WebService_SIGB_VSmart_Service::newInstance() ->setServerRoot('86.64.58.38/formation/') @@ -298,12 +289,10 @@ class VSmartServiceWithEmprunteurEvelyneResponseErrorTest extends VSmartServiceT class VSmartServiceWithEmprunteurFranckTest extends VSmartServiceTestCase { public function setUp() { parent::setUp(); - $mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - $mock_web_client - ->expects($this->once()) - ->method('open_url') + $mock_web_client = $this->mock() + ->whenCalled('open_url') ->with('http://46.20.169.8/production/VubisSmartHttpApi.csp?fu=GetBorrower&MetaInstitution=RES&BorrowerId=30101964') - ->will($this->returnValue(VSmartFixtures::xmlBorrowerFranck())); + ->answers(VSmartFixtures::xmlBorrowerFranck()); $this->franck = Class_WebService_SIGB_VSmart_Service::newInstance() ->setServerRoot('http://46.20.169.8/production') @@ -430,12 +419,10 @@ class VSmartServiceWithEmprunteurFranckTest extends VSmartServiceTestCase { class VSmartServiceBibGetAnthologieLitteratureTest extends Storm_Test_ModelTestCase { public function setUp() { - $mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - $mock_web_client - ->expects($this->once()) - ->method('open_url') + $mock_web_client = $this->mock() + ->whenCalled('open_url') ->with('http://86.64.58.38/formation/VubisSmartHttpApi.csp?fu=BibSearch&Application=Bib&Database=1&RequestType=RecordNumber&Request=47918') - ->will($this->returnValue(VSmartFixtures::xmlNoticeAnthologie())); + ->answers(VSmartFixtures::xmlNoticeAnthologie()); $this->anthologie = Class_WebService_SIGB_VSmart_Service::newInstance() ->setServerRoot('http://86.64.58.38/formation') @@ -473,12 +460,10 @@ class VSmartServiceBibGetAnthologieLitteratureTest extends Storm_Test_ModelTestC class VSmartServiceBibGetHarryPotterTest extends Storm_Test_ModelTestCase { public function setUp() { - $mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - $mock_web_client - ->expects($this->once()) - ->method('open_url') + $mock_web_client = $this->mock() + ->whenCalled('open_url') ->with('http://vpn.agglo-moulins.fr/formation/VubisSmartHttpApi.csp?fu=BibSearch&Application=Bib&Database=2&RequestType=RecordNumber&Request=3066') - ->will($this->returnValue(VSmartFixtures::xmlNoticeHarryPotter())); + ->answers(VSmartFixtures::xmlNoticeHarryPotter()); $this->service = Class_WebService_SIGB_VSmart_Service::newInstance() ->setServerRoot('vpn.agglo-moulins.fr/formation/') @@ -508,8 +493,8 @@ class VSmartServiceBibGetHarryPotterTest extends Storm_Test_ModelTestCase { /** @test */ - public function nbExemplairesShouldReturnFour() { - $this->assertEquals(4, $this->potter->nbExemplaires()); + public function nbExemplairesShouldReturnFive() { + $this->assertEquals(5, $this->potter->nbExemplaires()); } @@ -615,14 +600,18 @@ class VSmartServiceBibGetHarryPotterTest extends Storm_Test_ModelTestCase { $this->assertEquals('Inconnu', $this->potter->exemplaireAt(2)->getDisponibilite()); } + + /** @test */ + public function fiftItemShouldBeHoldable() { + $this->assertTrue($this->potter->exemplaireAt(4)->isReservable()); + } } class VSmartServiceFunctionsTest extends Storm_Test_ModelTestCase { public function setUp() { - $this->mock_web_client = $this->getMock('Class_WebService_SimpleWebClient'); - + $this->mock_web_client = $this->mock(); $this->service = Class_WebService_SIGB_VSmart_Service::getService('86.64.58.38/formation/'); $this->service->setWebClient($this->mock_web_client); } @@ -636,92 +625,23 @@ class VSmartServiceFunctionsTest extends Storm_Test_ModelTestCase { <ErrorCode>0</ErrorCode> </Header> </VubisSmart>'; + $this->mock_web_client - ->expects($this->once()) - ->method('open_url') + ->whenCalled('open_url') ->with('http://86.64.58.38/formation/VubisSmartHttpApi.csp?'.http_build_query($expected_params)) - ->will($this->returnValue($returnValue)); - } - - - /** testDisabled */ - public function evelyneReserveHarryPotterShouldAnswerOK() { - $this->_setupExpectationsFor(array('fu' => 'ReservationTitle', - 'BorrowerId' => '04051972', - 'Database' => 2, - 'ReserveArea' => 'RES', - 'BibRecord' => '3066', - 'PickupLocation' => 'INST/LOC', - 'MetaInstitution' => 'RES', - 'Language' => 'fre')); - - $this->assertEquals(array('statut' => true, - 'erreur' => ''), - $this->service->reserverExemplaire('04051972', - - '', - - Class_Exemplaire::getLoader() - ->newInstanceWithId(234) - ->setIdOrigine('2/3066'), - - 'RES')); - } - - - - /** testDisabled */ - public function franckReserveAnthologieShouldAnswerOK() { - $this->_setupExpectationsFor(array('fu' => 'ReservationTitle', - 'BorrowerId' => '30101964', - 'Database' => 1, - 'ReserveArea' => 'MCFC', - 'BibRecord' => '47918', - 'PickupLocation' => 'INST/LOC', - 'MetaInstitution' => 'RES', - 'Language' => 'fre')); - - $this->assertEquals(array('statut' => true, - 'erreur' => ''), - $this->service->reserverExemplaire('30101964', '', '1/47918', 'MCFC')); - } - - - /** testDisabled */ - public function franckReserveHarryPotterShouldAnswerError() { - $this->_setupExpectationsFor(array('fu' => 'ReservationTitle', - 'BorrowerId' => '30101964', - 'Database' => 2, - 'ReserveArea' => 'RES', - 'BibRecord' => '3066', - 'PickupLocation' => 'INST/LOC', - 'MetaInstitution' => 'RES', - 'Language' => 'fre'), - - '<VubisSmart> - <Header> - <Function>ReservationTitle</Function> - <ErrorCode>2</ErrorCode> - <ErrorText>Document non-réservable</ErrorText> - </Header> - </VubisSmart>'); - - $this->assertEquals(array('statut' => false, - 'erreur' => 'Document non-réservable'), - $this->service->reserverExemplaire('30101964', '', '2/3066', 'RES')); + ->answers($returnValue); } /** @test */ public function evelyneSupprimerReservationHarryPotterShouldAnswerOK() { - $this->_setupExpectationsFor(array('fu' => 'ReservationCancel', - 'BorrowerId' => '04051972', - 'ItemId' => '1032650148', - 'MetaInstitution' => 'RES', - 'Language' => 'fre')); - - $this->assertEquals(array('statut' => true, - 'erreur' => ''), + $this->_setupExpectationsFor(['fu' => 'ReservationCancel', + 'BorrowerId' => '04051972', + 'ItemId' => '1032650148', + 'MetaInstitution' => 'RES', + 'Language' => 'fre']); + + $this->assertEquals(['statut' => true, 'erreur' => ''], $this->service->supprimerReservation( Class_Users::getLoader()->newInstance() ->setLogin('04051972') @@ -732,14 +652,13 @@ class VSmartServiceFunctionsTest extends Storm_Test_ModelTestCase { /** @test */ public function evelyneProlongerPretHarryPotterShouldAnswerOK() { - $this->_setupExpectationsFor(array('fu' => 'Renewal', - 'BorrowerId' => '04051972', - 'ItemId' => '1032650148', - 'MetaInstitution' => 'RES', - 'Language' => 'fre')); - - $this->assertEquals(array('statut' => true, - 'erreur' => ''), + $this->_setupExpectationsFor(['fu' => 'Renewal', + 'BorrowerId' => '04051972', + 'ItemId' => '1032650148', + 'MetaInstitution' => 'RES', + 'Language' => 'fre']); + + $this->assertEquals(['statut' => true, 'erreur' => ''], $this->service->prolongerPret( Class_Users::getLoader()->newInstance() ->setLogin('04051972') @@ -750,11 +669,11 @@ class VSmartServiceFunctionsTest extends Storm_Test_ModelTestCase { /** @test */ public function getExemplaireFromNoticeShouldReturnInvalidExemplaire() { - $this->_setupExpectationsFor(array('fu' => 'BibSearch', - 'Application' => 'Bib', - 'Database' => '2', - 'RequestType' => 'RecordNumber', - 'Request' => '234')); + $this->_setupExpectationsFor(['fu' => 'BibSearch', + 'Application' => 'Bib', + 'Database' => '2', + 'RequestType' => 'RecordNumber', + 'Request' => '234']); $this->assertFalse($this->service->getExemplaire('2/234', '987')->isValid()); }