From 15b1c381418c61b2d5288732312ad9d841a8505c Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@git-test.afi-sa.fr>
Date: Tue, 10 Jul 2012 10:06:17 +0000
Subject: [PATCH] =?UTF-8?q?WS=20BiblixNet:=20ajout=20suppression=20r=C3=A9?=
 =?UTF-8?q?servation=20+=20mise=20en=20commun=20Nanook=20/=20Koha=20/=20Bi?=
 =?UTF-8?q?blixNet?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../WebService/SIGB/AbstractRESTService.php   | 39 ++++++++++++++++++-
 .../WebService/SIGB/BiblixNet/Service.php     |  6 ++-
 .../Class/WebService/SIGB/Koha/Service.php    | 10 +++++
 .../Class/WebService/SIGB/Nanook/Service.php  | 18 ++-------
 .../WebService/SIGB/BiblixNetFixtures.php     |  7 ++++
 .../Class/WebService/SIGB/BiblixNetTest.php   | 18 ++++++++-
 6 files changed, 79 insertions(+), 19 deletions(-)

diff --git a/library/Class/WebService/SIGB/AbstractRESTService.php b/library/Class/WebService/SIGB/AbstractRESTService.php
index 6578c7e7a8d..20b8edf2eb0 100644
--- a/library/Class/WebService/SIGB/AbstractRESTService.php
+++ b/library/Class/WebService/SIGB/AbstractRESTService.php
@@ -107,6 +107,15 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic
 	}
 
 
+	/**
+	 * Retourne le nom du tag utilisé pour les messages d'erreurs dans les réponses XML / ILSDI
+	 * @return string
+	 */
+	public function ilsdiGetErrorTag() {
+		return 'error';
+	}
+
+
 	/**
 	 * @param array $params
 	 * @param Class_WebService_SIGB_AbstractILSDIPatronInfoReader $reader
@@ -121,7 +130,7 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic
 		if (0 === strpos($xml, '<html>'))
 			return $emprunteur;
 
-		if ($this->_getTagData($xml, 'error'))
+		if ($this->_getTagData($xml, $this->ilsdiGetErrorTag()))
 			return $emprunteur;
 
 		return $reader
@@ -147,12 +156,38 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic
 		if (0 === strpos($xml, '<html>'))
 			return $this->_getNetworkError();
 
-		if ('' != $this->_getTagData($xml, $error_tag))
+		if ('' != $this->_getTagData($xml, $this->ilsdiGetErrorTag()))
 			return $this->_error('Réservation impossible');
 
 		return $this->_success();
 	}
 
+
+
+
+
+	/**
+	 * @param array $params
+	 */
+	public function ilsdiCancelHold($params) {
+		$params = array_merge(array('service' => 'CancelHold'), $params);
+
+		try {
+			$xml = $this->httpGet($params);
+		} catch (Exception $e) {
+			return $this->_getNetworkError();
+		}
+
+		if (0 === strpos($xml, '<html>'))
+			return $this->_getNetworkError();
+
+		if ('' != $this->_getTagData($xml, 'error'))
+			return $this->_error('Annulation impossible');
+
+		return $this->_success();
+	}
+
+
 	
 
 	/**
diff --git a/library/Class/WebService/SIGB/BiblixNet/Service.php b/library/Class/WebService/SIGB/BiblixNet/Service.php
index b2a309e51cd..beed5dc18b2 100644
--- a/library/Class/WebService/SIGB/BiblixNet/Service.php
+++ b/library/Class/WebService/SIGB/BiblixNet/Service.php
@@ -68,7 +68,11 @@ class Class_Webservice_SIGB_BiblixNet_Service extends Class_WebService_SIGB_Abst
 	 * @param int $reservation_id
 	 * @return array
 	 */
-	public function supprimerReservation($user, $reservation_id) {}
+	public function supprimerReservation($user, $reservation_id) {
+		return $this->ilsdiCancelHold(array(
+																				'patronId'	=> $user->getIdSigb(),
+																				'itemId'		=> $reservation_id));
+	}
 
 
 	/**
diff --git a/library/Class/WebService/SIGB/Koha/Service.php b/library/Class/WebService/SIGB/Koha/Service.php
index 59cdf4588ca..ab3974c8a4b 100644
--- a/library/Class/WebService/SIGB/Koha/Service.php
+++ b/library/Class/WebService/SIGB/Koha/Service.php
@@ -56,6 +56,15 @@ class Class_WebService_SIGB_Koha_Service extends Class_WebService_SIGB_AbstractR
 	}
 
 
+	/**
+	 * Retourne le nom du tag utilisé pour les messages d'erreurs dans les réponses XML / ILSDI
+	 * @return string
+	 */
+	public function ilsdiGetErrorTag() {
+		return 'code';
+	}
+
+
 	/**
 	 * @param Class_Users $user
 	 * @param Class_Exemplaire $exemplaire
@@ -77,6 +86,7 @@ class Class_WebService_SIGB_Koha_Service extends Class_WebService_SIGB_AbstractR
 	 * @return array
 	 */
 	public function supprimerReservation($user, $reservation_id) {
+
 		$emprunteur_id = $this->_authenticate($user);
 
 		$xml_cancel = $this->httpGet(array('service' => 'CancelHold',
diff --git a/library/Class/WebService/SIGB/Nanook/Service.php b/library/Class/WebService/SIGB/Nanook/Service.php
index 3ce261f6494..b967872e9a4 100644
--- a/library/Class/WebService/SIGB/Nanook/Service.php
+++ b/library/Class/WebService/SIGB/Nanook/Service.php
@@ -81,21 +81,9 @@ class Class_Webservice_SIGB_Nanook_Service extends Class_WebService_SIGB_Abstrac
 	 * @return array
 	 */
 	public function supprimerReservation($user, $reservation_id) {
-		try {
-			$xml = $this->httpGet(array('service'		=> 'CancelHold',
-																	'patronId'	=> $user->getIdSigb(),
-																	'itemId'		=> $reservation_id));
-		} catch (Exception $e) {
-			return $this->_getNetworkError();
-		}
-
-		if (0 === strpos($xml, '<html>'))
-			return $this->_getNetworkError();
-
-		if ('' != $this->_getTagData($xml, 'error'))
-			return $this->_error('Annulation impossible');
-
-		Return $this->_success();
+		return $this->ilsdiCancelHold(array(
+																				'patronId'	=> $user->getIdSigb(),
+																				'itemId'		=> $reservation_id));
 	}
 
 
diff --git a/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php b/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php
index 29fcd8891ac..365725c6d9e 100644
--- a/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php
+++ b/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php
@@ -132,4 +132,11 @@ class BiblixNetFixtures {
 		return '<?xml version="1.0" encoding="UTF-8"?>
 						<HoldTitle></HoldTitle>';
 	}
+
+
+	/** @return string */
+	public static function xmlCancelHoldSuccess() {
+		return '<?xml version="1.0" encoding="UTF-8"?>
+						<CancelHold></CancelHold>';
+	}
 }
diff --git a/tests/library/Class/WebService/SIGB/BiblixNetTest.php b/tests/library/Class/WebService/SIGB/BiblixNetTest.php
index 3fc104f1fc1..0007b2ac125 100644
--- a/tests/library/Class/WebService/SIGB/BiblixNetTest.php
+++ b/tests/library/Class/WebService/SIGB/BiblixNetTest.php
@@ -240,7 +240,7 @@ class BiblixNetOperationsTest extends BiblixNetTestCase {
 		$this->_mock_web_client
 			->whenCalled('open_url')
 			->with('http://mediathequewormhout.biblixnet.com/exporte_afi/?service=HoldTitle&patronId=34&bibId=1432&pickupLocation=Mediatheque')
-			->answers(BiblixNetFixtures::xmlGetPatronJustinTicou())
+			->answers(BiblixNetFixtures::xmlHoldTitleSuccess())
 			->beStrict();
 
 
@@ -251,6 +251,22 @@ class BiblixNetOperationsTest extends BiblixNetTestCase {
 													'Mediatheque'
 												));
 	}
+
+
+	/** @test */
+	public function supprimerReservationWithoutErrorShouldReturnSuccess() {
+		$this->_mock_web_client
+			->whenCalled('open_url')
+			->with('http://mediathequewormhout.biblixnet.com/exporte_afi/?service=CancelHold&patronId=1&itemId=987')
+			->answers(BiblixNetFixtures::xmlCancelHoldSuccess())
+			->beStrict();
+
+		$this->assertEquals(array('statut' => true, 'erreur' => ''),
+												$this->_service->supprimerReservation(
+													Class_Users::getLoader()->newInstance()->setIdSigb('1'),
+													'987'
+												));
+	}
 	
 }
 
-- 
GitLab