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