From 44a3c9734fe62fbdd7da2ed8f4a45973d6d99b23 Mon Sep 17 00:00:00 2001 From: llaffont <llaffont@git-test.afi-sa.fr> Date: Thu, 20 Sep 2012 08:24:26 +0000 Subject: [PATCH] =?UTF-8?q?Dynix:=20r=C3=A9cup=C3=A9ration=20de=20la=20r?= =?UTF-8?q?=C3=A9servabilit=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Class/WebService/SIGB/Dynix/Service.php | 2 +- .../SIGB/Dynix/TitleInfoResponseReader.php | 20 ++++- .../Class/WebService/SIGB/DynixFixtures.php | 76 +++++++++++++++++++ .../Class/WebService/SIGB/DynixTest.php | 55 ++++++++++++-- 4 files changed, 146 insertions(+), 7 deletions(-) diff --git a/library/Class/WebService/SIGB/Dynix/Service.php b/library/Class/WebService/SIGB/Dynix/Service.php index 3c560d28a47..27c8cdcf5d5 100644 --- a/library/Class/WebService/SIGB/Dynix/Service.php +++ b/library/Class/WebService/SIGB/Dynix/Service.php @@ -34,7 +34,7 @@ class Class_Webservice_SIGB_Dynix_Service extends Class_WebService_SIGB_Abstract public function getNotice($id){ return $this->httpGetNotice(['service' => 'lookupTitleInfo', 'clientID' => 'myid', - 'titleID' => '233823', + 'titleID' => $id, 'includeItemInfo' => 'true', 'includeAvailabilityInfo' => 'true'], diff --git a/library/Class/WebService/SIGB/Dynix/TitleInfoResponseReader.php b/library/Class/WebService/SIGB/Dynix/TitleInfoResponseReader.php index ba84f375255..a391ec4e137 100644 --- a/library/Class/WebService/SIGB/Dynix/TitleInfoResponseReader.php +++ b/library/Class/WebService/SIGB/Dynix/TitleInfoResponseReader.php @@ -21,7 +21,9 @@ class Class_WebService_SIGB_Dynix_TitleInfoResponseReader extends Class_WebService_SIGB_AbstractXMLNoticeReader { protected $_current_code_annexe; + protected $_current_location_id; protected $_current_exemplaire; + protected $_is_reservable = false; public function endTitleId($content) { @@ -35,7 +37,10 @@ class Class_WebService_SIGB_Dynix_TitleInfoResponseReader extends Class_WebServi public function endItemId($content) { - $this->_current_exemplaire = (new Class_WebService_SIGB_Exemplaire($content))->setCodeBarre($content); + $this->_current_exemplaire = (new Class_WebService_SIGB_Exemplaire($content)) + ->setCodeBarre($content) + ->setReservable($this->_is_reservable); + $this->_notice->addExemplaire($this->_current_exemplaire); } @@ -51,6 +56,19 @@ class Class_WebService_SIGB_Dynix_TitleInfoResponseReader extends Class_WebServi if ($data == 'INTRANSIT') $this->_current_exemplaire->setDisponibiliteEnTransit(); + + $this->_current_location_id = $data; + } + + + public function endHomeLocationId($data) { + if ($this->_current_location_id == $data) + $this->_current_exemplaire->setDisponibiliteLibre(); + } + + + public function endHoldable($data) { + $this->_is_reservable = ($data == 'true'); } } diff --git a/tests/library/Class/WebService/SIGB/DynixFixtures.php b/tests/library/Class/WebService/SIGB/DynixFixtures.php index c69799a2694..9a59929a840 100644 --- a/tests/library/Class/WebService/SIGB/DynixFixtures.php +++ b/tests/library/Class/WebService/SIGB/DynixFixtures.php @@ -64,9 +64,85 @@ class DynixFixtures { <fixedTimeBooking>false</fixedTimeBooking> </ItemInfo> </CallInfo> + <CallInfo> + <libraryID>CRETMAC</libraryID> + <classificationID>ASIS</classificationID> + <callNumber>BD LAR</callNumber> + <numberOfCopies>1</numberOfCopies> + <ItemInfo> + <itemID>00580317</itemID> + <itemTypeID>1IMP</itemTypeID> + <currentLocationID>11ABD</currentLocationID> + <homeLocationID>11ABD</homeLocationID> + <chargeable>true</chargeable> + <fixedTimeBooking>false</fixedTimeBooking> + </ItemInfo> + </CallInfo> </TitleInfo> </LookupTitleInfoResponse>'; } + + + public static function xmlLookupTitleInfoHarryPotter() { + return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<LookupTitleInfoResponse xmlns="http://schemas.sirsidynix.com/symws/standard"> + <TitleInfo> + <titleID>353917</titleID> + <TitleAvailabilityInfo> + <totalCopiesAvailable>3</totalCopiesAvailable> + <libraryWithAvailableCopies>Créteil : Maison des Arts</libraryWithAvailableCopies> + <libraryWithAvailableCopies>Créteil : Bibliobus</libraryWithAvailableCopies> + <libraryWithAvailableCopies>Limeil-Brévannes</libraryWithAvailableCopies> + <totalResvCopiesAvailable>0</totalResvCopiesAvailable> + <locationOfFirstAvailableItem>02MFILM</locationOfFirstAvailableItem> + <holdable>false</holdable> + <bookable>false</bookable> + </TitleAvailabilityInfo> + <CallInfo> + <libraryID>CRETMAC</libraryID> + <classificationID>ASIS</classificationID> + <callNumber>520 HAR</callNumber> + <numberOfCopies>1</numberOfCopies> + <ItemInfo> + <itemID>00580322</itemID> + <itemTypeID>1MUS</itemTypeID> + <currentLocationID>02MFILM</currentLocationID> + <homeLocationID>02MFILM</homeLocationID> + <chargeable>true</chargeable> + <fixedTimeBooking>false</fixedTimeBooking> + </ItemInfo> + </CallInfo> + <CallInfo> + <libraryID>CRETBUS</libraryID> + <classificationID>ASIS</classificationID> + <callNumber>520 HAR</callNumber> + <numberOfCopies>1</numberOfCopies> + <ItemInfo> + <itemID>00580317</itemID> + <itemTypeID>1MUS</itemTypeID> + <currentLocationID>07MFILM</currentLocationID> + <homeLocationID>07MFILM</homeLocationID> + <chargeable>true</chargeable> + <fixedTimeBooking>false</fixedTimeBooking> + </ItemInfo> + </CallInfo> + <CallInfo> + <libraryID>LB</libraryID> + <classificationID>ASIS</classificationID> + <callNumber>8.1 HAR</callNumber> + <numberOfCopies>1</numberOfCopies> + <ItemInfo> + <itemID>00594173</itemID> + <itemTypeID>1MUS</itemTypeID> + <currentLocationID>09JENR</currentLocationID> + <homeLocationID>09JENR</homeLocationID> + <chargeable>true</chargeable> + <fixedTimeBooking>false</fixedTimeBooking> + </ItemInfo> + </CallInfo> + </TitleInfo> + </LookupTitleInfoResponse>'; + } } diff --git a/tests/library/Class/WebService/SIGB/DynixTest.php b/tests/library/Class/WebService/SIGB/DynixTest.php index 68df83546b7..014ef253276 100644 --- a/tests/library/Class/WebService/SIGB/DynixTest.php +++ b/tests/library/Class/WebService/SIGB/DynixTest.php @@ -51,6 +51,8 @@ abstract class DynixTestCase extends Storm_Test_ModelTestCase { public function setUp() { parent::setUp(); + Class_Profil::getCurrentProfil()->setCfgNotice(['exemplaires' => []]); + $this->_mock_web_client = Storm_Test_ObjectWrapper::mock(); $this->_service = Class_WebService_SIGB_Dynix_Service::newInstance() @@ -68,7 +70,6 @@ class DynixGetNoticeLeCombatOrdinaire extends DynixTestCase { public function setUp() { parent::setUp(); - Class_Profil::getCurrentProfil()->setCfgNotice(['exemplaires' => []]); $this->_mock_web_client ->whenCalled('open_url') ->with('http://www.infocom94.fr:8080/capcvm/rest/standard/lookupTitleInfo?clientID=myid&titleID=233823&includeItemInfo=true&includeAvailabilityInfo=true') @@ -92,8 +93,8 @@ class DynixGetNoticeLeCombatOrdinaire extends DynixTestCase { /** @test */ - public function getExemplairesShouldReturnAnArrayWithSizeTwo() { - $this->assertEquals(2, count($this->_notice->getExemplaires())); + public function getExemplairesShouldReturnAnArrayWithSizeThree() { + $this->assertEquals(3, count($this->_notice->getExemplaires())); } @@ -116,8 +117,8 @@ class DynixGetNoticeLeCombatOrdinaire extends DynixTestCase { /** @test */ - public function secondExemplaireCodeAnnexeShouldBeALFAX1() { - $this->assertEquals('ALFAX1', $this->_notice->exemplaireAt(1)->getCodeAnnexe()); + public function firstExemplaireShouldBeReservable() { + $this->assertTrue($this->_notice->exemplaireAt(0)->isReservable()); } @@ -128,11 +129,55 @@ class DynixGetNoticeLeCombatOrdinaire extends DynixTestCase { } + /** @test */ + public function secondExemplaireCodeAnnexeShouldBeALFAX1() { + $this->assertEquals('ALFAX1', $this->_notice->exemplaireAt(1)->getCodeAnnexe()); + } + + /** @test */ public function secondExemplairDisponibiliteShouldBeEnTransit() { $this->assertEquals(Class_WebService_SIGB_Exemplaire::DISPO_TRANSIT, $this->_notice->exemplaireAt(1)->getDisponibilite()); } + + + /** @test */ + public function secondExemplaireShouldBeReservable() { + $this->assertTrue($this->_notice->exemplaireAt(1)->isReservable()); + } + + + /** @test */ + public function thirdExemplaireDisponibiliteShouldBeDisponible() { + $this->assertEquals(Class_WebService_SIGB_Exemplaire::DISPO_LIBRE, + $this->_notice->exemplaireAt(2)->getDisponibilite()); + } +} + + + + +class DynixGetNoticeHarryPotter extends DynixTestCase { + protected $_notice; + + public function setUp() { + parent::setUp(); + + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://www.infocom94.fr:8080/capcvm/rest/standard/lookupTitleInfo?clientID=myid&titleID=353917&includeItemInfo=true&includeAvailabilityInfo=true') + ->answers(DynixFixtures::xmlLookupTitleInfoHarryPotter()) + ->beStrict(); + + $this->_notice = $this->_service->getNotice('353917'); + } + + + /** @test */ + public function firstExemplaireShouldNotBeReservable() { + $this->assertFalse($this->_notice->exemplaireAt(0)->isReservable()); + } } -- GitLab