From a27249b61468ff4a1e8145f79ce1fdf52d67d442 Mon Sep 17 00:00:00 2001
From: Patrick Barroca <pbarroca@sandbox.pergame.net>
Date: Wed, 24 Sep 2014 12:06:05 +0200
Subject: [PATCH] rel #14885 : test coverage

---
 .../opac/controllers/AbonneController.php     |   3 +-
 .../views/scripts/abonne/prolonger-pret.phtml |   1 +
 .../controllers/AbonneControllerPretsTest.php | 125 +++++++++++++++---
 3 files changed, 107 insertions(+), 22 deletions(-)
 create mode 100644 application/modules/opac/views/scripts/abonne/prolonger-pret.phtml

diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php
index d39bc1a696c..c49c7095b26 100644
--- a/application/modules/opac/controllers/AbonneController.php
+++ b/application/modules/opac/controllers/AbonneController.php
@@ -389,9 +389,8 @@ class AbonneController extends ZendAfi_Controller_Action {
 
 	public function prolongerpretAction() {
 		$id_pret = $this->_getParam('id_pret');
-		$cls_comm = new Class_CommSigb();
 
-		$result = $cls_comm->prolongerPret($this->_user, $id_pret);
+		$result = Class_CommSigb::getInstance()->prolongerPret($this->_user, $id_pret);
 
 		$this->view->fiche = $this->_user->getFicheSigb();
 
diff --git a/application/modules/opac/views/scripts/abonne/prolonger-pret.phtml b/application/modules/opac/views/scripts/abonne/prolonger-pret.phtml
new file mode 100644
index 00000000000..13c72c32dc9
--- /dev/null
+++ b/application/modules/opac/views/scripts/abonne/prolonger-pret.phtml
@@ -0,0 +1 @@
+<?php echo $this->message;?>
diff --git a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
index f7df2434016..6536ca0c8af 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerPretsTest.php
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
  * along with AFI-OPAC 2.0; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 require_once 'AbstractControllerTestCase.php';
 
@@ -45,12 +45,12 @@ abstract class AbstractAbonneControllerPretsTestCase extends AbstractControllerT
 			->answers(true);
 	}
 
-	
+
 	public function assertUserRemovedFromEmprunteurCache($user) {
-		$user_key = md5(serialize(['local', 
+		$user_key = md5(serialize(['local',
 															 Class_WebService_SIGB_EmprunteurCache::newInstance()->keyFor($user)]));
 		$this->assertTrue($this->zend_cache
-											->methodHasBeenCalledWithParams('remove', array($user_key)));		
+											->methodHasBeenCalledWithParams('remove', array($user_key)));
 	}
 }
 
@@ -69,10 +69,10 @@ abstract class AbonneControllerPretsListTwoPretsTestCase extends AbstractAbonneC
 																	 'Type' => 'P1']);
 
 		$this->fixture('Class_Exemplaire',
-									 ['id' => 967, 
+									 ['id' => 967,
 										'id_origine' => 1234,
 										'zone995' => serialize([['clef' => 'a', 'valeur' => 'PotterItem']]),
-										'notice' => $this->fixture('Class_Notice', 
+										'notice' => $this->fixture('Class_Notice',
 																							 ['id' => 889,
 																								'titre_principal' => 'Potter',
 																								'unimarc' => '00577nam0 2200181   450 001001500000010001800015100004100033101000800074200010700082210003000189215001100219461002000230606002900250676000800279700004500287801005600332940000700388frOr1314913787  a9781408812792  a20140320                  0103        aEng1 aHarry Potter and the deathly hallowsdHarry Potter et les reliques de la mortfJoanne Kathleen Rowling  aLondrescBloomsburyd2010  a831 p. 1tHarry Potterv7  aAnglais (langue)2Rameau  a420 1aRowlingbJoanne Kathleenf1965-....4070  aFRbBibliothèque de l\'agglomération de Saint-Omer  apm'])]);
@@ -86,10 +86,10 @@ abstract class AbonneControllerPretsListTwoPretsTestCase extends AbstractAbonneC
 																	'N° de notice' => '5678']);
 
 		$this->fixture('Class_Exemplaire',
-									 ['id' => 918, 
+									 ['id' => 918,
 										'id_origine' => 5678,
 										'zone995' => serialize([['clef' => 'a', 'valeur' => 'AliceItem']]),
-										'notice' => $this->fixture('Class_Notice', 
+										'notice' => $this->fixture('Class_Notice',
 																							 ['id' => 827,
 																								'titre_principal' => 'Alice',
 																								'unimarc' => '01175cam0 22002771  450 001001500000010003700015100004100052101000800093102000700101105001800108106000600126200009300132210002400225211001300249215006400262300002400326307002900350330027300379345001800652461005600670700001800726701003000744801003300774856008300807940000700890frOr0354235228  a978-2-35592-635-8bbr.d7,65 EUR  a20140225d2014    |  |0fre|0103||||ba  afre  aFR  a        0||y|  ar1 aAlice au royaume de TrèfleeCheshire cat Waltzh5fQuinRosegdessin Mamenosuke Fujimaru  aPariscKi-oond2014 1a20140227  a1 vol. (164 p.)cillustrations en noir et blancd18 x 13 cm  aTraduit du japonais  aSens de lecture japonais  aPerdue dans la forêt aux portes, Alice tombe nez à nez avec Ace. Devenue malgré elle la confidente du chevalier, elle ne sait comment repousser ses avances. Lorsque le chat du Cheshire, qui a assisté à la scène, intervient, la rencontre tourne à l\'affrontement.  b9782355926358 1tAlice au royaume de Trèfle : Cheshire cat Waltzv5 1aQuinRose4070 1aFujimarubMamenosuke4440  aFRbElectrec20140225gAFNOR  uhttp://www.electre.com//GetBlob.ashx?Ean=9782355926358,0-1913692&Size=Original  aLR'])]);
@@ -109,7 +109,7 @@ abstract class AbonneControllerPretsListTwoPretsTestCase extends AbstractAbonneC
 
 
 class AbonneControllerPretsExportTwoPretsTest extends AbonneControllerPretsListTwoPretsTestCase {
-	protected 
+	protected
 		$_dl_file,
 		$unimarc = '01201nam0 22002891  450 001001500000010003700015100004100052101000800093102000700101105001800108106000600126200009300132210002400225211001300249215006400262300002400326307002900350330027300379345001800652461005600670700001800726701003000744801003300774856008300807940000700890995001400897frOr0354235228  a978-2-35592-635-8bbr.d7,65 EUR  a20140225d2014    |  |0fre|0103||||ba  afre  aFR  a        0||y|  ar1 aAlice au royaume de TrÁefleeCheshire cat Waltzh5fQuinRosegdessin Mamenosuke Fujimaru  aPariscKi-oond2014 1a20140227  a1 vol. (164 p.)cillustrations en noir et blancd18 x 13 cm  aTraduit du japonais  aSens de lecture japonais  aPerdue dans la forÃet aux portes, Alice tombe nez Áa nez avec Ace. Devenue malgrÂe elle la confidente du chevalier, elle ne sait comment repousser ses avances. Lorsque le chat du Cheshire, qui a assistÂe Áa la scÁene, intervient, la rencontre tourne Áa l\'affrontement.  b9782355926358 1tAlice au royaume de TrÁefle : Cheshire cat Waltzv5 1aQuinRose4070 1aFujimarubMamenosuke4440  aFRbElectrec20140225gAFNOR  uhttp://www.electre.com//GetBlob.ashx?Ean=9782355926358,0-1913692&Size=Original  aLR 1aAliceItem00604nam0 22001931  450 001001500000010001800015100004100033101000800074200010700082210003000189215001100219461002000230606002900250676000800279700004500287801005600332940000700388995001500395frOr1314913787  a9781408812792  a20140320                  0103        aEng1 aHarry Potter and the deathly hallowsdHarry Potter et les reliques de la mortfJoanne Kathleen Rowling  aLondrescBloomsburyd2010  a831 p. 1tHarry Potterv7  aAnglais (langue)2Rameau  a420 1aRowlingbJoanne Kathleenf1965-....4070  aFRbBibliothÁeque de l\'agglomÂeration de Saint-Omer  apm 1aPotterItem';
 
@@ -162,7 +162,7 @@ class AbonneControllerPretsListTwoPretsTest extends AbonneControllerPretsListTwo
 		$this->dispatch('/opac/abonne/prets', true);
 	}
 
-	
+
 	/** @test */
 	public function returnToMyHomeShouldBePresent() {
 		$this->assertXPathContentContains('//a[contains(@href, "/abonne/fiche")]',
@@ -191,7 +191,7 @@ class AbonneControllerPretsListTwoPretsTest extends AbonneControllerPretsListTwo
 
 	/** @test */
 	public function loanExportLinkShouldBePresent() {
-		$this->assertXPathContentContains('//a[contains(@href, "/abonne/loan-export")]', 
+		$this->assertXPathContentContains('//a[contains(@href, "/abonne/loan-export")]',
 																			'Export unimarc',
 																			$this->_response->getBody());
 	}
@@ -213,7 +213,7 @@ class AbonneControllerPretsListTwoPretsTest extends AbonneControllerPretsListTwo
 
 	/** @test */
 	public function aliceLoanShouldBePresent() {
-		$this->assertXPathContentContains("//tbody/tr[1][@class=\"pret_en_retard\"]//td//a[contains(@href, '/recherche/viewnotice/id/827/retour_abonne/prets')]", 
+		$this->assertXPathContentContains("//tbody/tr[1][@class=\"pret_en_retard\"]//td//a[contains(@href, '/recherche/viewnotice/id/827/retour_abonne/prets')]",
 																			'Alice');
 	}
 
@@ -238,7 +238,7 @@ class AbonneControllerPretsListTwoPretsTest extends AbonneControllerPretsListTwo
 
 	/** @test */
 	public function aliceLoanShouldHaveExtendLink() {
-		$this->assertXPathContentContains("//tbody/tr[1]//td//a[@href='/abonne/prolongerPret/id_pret/13']",
+		$this->assertXPathContentContains("//tbody/tr[1]//td//a[@href='/abonne/prolongerPret/id_pret/13'][@data-popup='true']",
 																			'Prolonger');
 	}
 
@@ -269,7 +269,7 @@ class AbonneControllerPretsListTwoPretsTest extends AbonneControllerPretsListTwo
 
 	/** @test */
 	public function potterLoanShouldHaveExtendLink() {
-		$this->assertXPathContentContains("//tbody/tr[2]//td//a[@href='/abonne/prolongerPret/id_pret/12']",
+		$this->assertXPathContentContains("//tbody/tr[2]//td//a[@href='/abonne/prolongerPret/id_pret/12'][@data-popup='true']",
 																			'Prolonger');
 	}
 
@@ -295,8 +295,8 @@ class AbonneControllerPretsListReservationTest extends AbstractAbonneControllerP
 
 		Class_Exemplaire::beVolatile();
 
-		$potter = 
-			(new Class_WebService_SIGB_Reservation('12', 
+		$potter =
+			(new Class_WebService_SIGB_Reservation('12',
 																						 (new Class_WebService_SIGB_Exemplaire(123))->setTitre('Potter')))
 			->parseExtraAttributes(array('Etat' => 'Réservation émise',
 																	 'Rang' => '2',
@@ -310,8 +310,8 @@ class AbonneControllerPretsListReservationTest extends AbstractAbonneControllerP
 																		])->assertSave();
 
 		// This item has no library: non-regression test.
-		$dobby = 
-			(new Class_WebService_SIGB_Reservation('13', 
+		$dobby =
+			(new Class_WebService_SIGB_Reservation('13',
 																						 (new Class_WebService_SIGB_Exemplaire(124))->setTitre('Dobby')))
 			->parseExtraAttributes(array('Etat' => 'Réservation émise',
 																	 'Rang' => '2',
@@ -374,7 +374,7 @@ class AbonneControllerPretsListReservationTest extends AbstractAbonneControllerP
 
 	/** @test */
 	public function titreShouldBePotterAndLinkToNotice() {
-		$this->assertXPathContentContains('//tbody/tr[1]//td//a[contains(@href, "recherche/viewnotice/id/823/retour_abonne/reservations")]', 
+		$this->assertXPathContentContains('//tbody/tr[1]//td//a[contains(@href, "recherche/viewnotice/id/823/retour_abonne/reservations")]',
 																			'Potter',
 																			$this->_response->getBody());
 	}
@@ -411,4 +411,89 @@ class AbonneControllerPretsListReservationTest extends AbstractAbonneControllerP
 																			$this->_response->getBody());
 	}
 }
-?>
\ No newline at end of file
+
+
+
+abstract class AbonneControllerPretsRenewTwoPretsTestCase extends AbonneControllerPretsListTwoPretsTestCase {
+	public function setUp() {
+		parent::setUp();
+		Class_CommSigb::setInstance($this->getSigbMock());
+		$this->dispatch('/opac/abonne/prolongerPret/render/popup', true);
+		$this->json = json_decode($this->_response->getBody());
+	}
+
+
+	protected function getSigbMock() {
+		return $this->mock();
+	}
+
+
+	public function tearDown() {
+		Class_CommSigb::setInstance(null);
+		parent::tearDown();
+	}
+
+
+	/** @test */
+	public function responseShouldBeJson() {
+		$this->assertNotNull($this->json);
+	}
+
+
+	/** @test */
+	public function popupShouldBeModal() {
+		$this->assertEquals('true', $this->json->show_modal);
+	}
+
+
+	/** @test */
+	public function popupShouldBeContered() {
+		$this->assertEquals('center center', $this->json->position->my);
+		$this->assertEquals('center center', $this->json->position->at);
+	}
+
+}
+
+
+
+class AbonneControllerPretsRenewErrorTwoPretsTest extends AbonneControllerPretsRenewTwoPretsTestCase {
+	protected function getSigbMock() {
+		return $this->mock()
+								->whenCalled('prolongerPret')
+								->answers(['statut' => 0,
+													 'erreur' => 'Patron not found']);
+	}
+
+	/** @test */
+	public function popupTitleShouldBeErreur() {
+		$this->assertEquals('Erreur', $this->json->title);
+	}
+
+
+	/** @test */
+	public function popupContentShouldContainsPatronNotFound() {
+		$this->assertEquals('Patron not found', $this->json->content);
+	}
+}
+
+
+
+class AbonneControllerPretsRenewSuccessTwoPretsTest extends AbonneControllerPretsRenewTwoPretsTestCase {
+	protected function getSigbMock() {
+		return $this->mock()
+								->whenCalled('prolongerPret')
+								->answers(['statut' => 1]);
+	}
+
+
+	/** @test */
+	public function popupTitleShouldBeErreur() {
+		$this->assertEquals(utf8_encode('Prêt prolongé'), $this->json->title);
+	}
+
+
+	/** @test */
+	public function popupContentShouldContainsPatronNotFound() {
+		$this->assertEquals(utf8_encode('Votre prêt a bien été prolongé.'), $this->json->content);
+	}
+}
\ No newline at end of file
-- 
GitLab