From 7deb15e383b2698e8211d915883746bcafefc837 Mon Sep 17 00:00:00 2001
From: Ghislain Loas <ghislo@sandbox.pergame.net>
Date: Wed, 25 Nov 2015 10:47:10 +0100
Subject: [PATCH] dev #30973 Dilicom update status only called on loan book

---
 .../WebService/BibNumerique/Dilicom/Hub.php   |  7 ++--
 .../modules/AbstractControllerTestCase.php    |  7 ++--
 .../BibNumeriqueControllerDilicomTest.php     | 28 +++++++++++++--
 tests/fixtures/DilicomFixtures.php            | 36 +++++++++++++++++++
 .../ZendAfi/View/Helper/RenderAlbumTest.php   |  6 ----
 5 files changed, 70 insertions(+), 14 deletions(-)

diff --git a/library/Class/WebService/BibNumerique/Dilicom/Hub.php b/library/Class/WebService/BibNumerique/Dilicom/Hub.php
index ee4e8d88ffc..00f3692e715 100644
--- a/library/Class/WebService/BibNumerique/Dilicom/Hub.php
+++ b/library/Class/WebService/BibNumerique/Dilicom/Hub.php
@@ -41,9 +41,10 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac
   public function updateStatus($album) {
     $content = $this->getLoanStatus($album);
 
-    if (isset($content->loanResponseLine[0])
-        && ($simultaneous_users_remaining = $content->loanResponseLine[0]->nus1)) {
+    if (isset($content->loanResponseLine[0])) {
+      $simultaneous_users_remaining = $content->loanResponseLine[0]->nus1;
       $item = $album->getItems()[0];
+
       $item->setLoanCount($album->getUsageConstraints()->getLoanMaxNumberOfUsers() - $simultaneous_users_remaining);
       $item->setQuantity($album->getUsageConstraints()->getLoanQuantity() - $content->loanResponseLine[0]->nta);
       $item->save();
@@ -125,6 +126,8 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac
       return (object) ['link' => (object) ['url' => $loan->getLoanLink()],
                        'returnMessage' => []];
 
+    $this->updateStatus($album);
+
     if (!$album->getUsageConstraints()->hasSimultaneousLoanRemaining())
       return (object) ['returnMessage' => [$this->_('Emprunt impossible. Le nombre d\'emprunts simultanés est atteint.')]];
 
diff --git a/tests/application/modules/AbstractControllerTestCase.php b/tests/application/modules/AbstractControllerTestCase.php
index a9d088908c8..29948e1cf7b 100644
--- a/tests/application/modules/AbstractControllerTestCase.php
+++ b/tests/application/modules/AbstractControllerTestCase.php
@@ -276,13 +276,14 @@ abstract class AbstractControllerTestCase extends Zend_Test_PHPUnit_ControllerTe
                                return is_array($data)
                                  && isset($data[ZendAfi_Controller_Action_Helper_FlashMessenger::NOTIFICATION]);
                              });
-    foreach($messages as $message){
-      if (false!==strpos($message[ZendAfi_Controller_Action_Helper_FlashMessenger::NOTIFICATION]['message'],
+    foreach($messages as $flash_message){
+      if (false!==strpos($flash_message[ZendAfi_Controller_Action_Helper_FlashMessenger::NOTIFICATION]['message'],
                          $value))
         return;
     }
 
-    $this->fail("Flash messenger does not contains: \n".$value."\nbut:\n".implode('. ', $messages)."\n".$message);
+    $content = print_r($messages, true);
+    $this->fail("Flash messenger does not contains: \n".$value."\nbut:\n".$content."\n".$message);
   }
 
 
diff --git a/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php b/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php
index a0aa0de6477..1d2f0172f7f 100644
--- a/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php
+++ b/tests/application/modules/opac/controllers/BibNumeriqueControllerDilicomTest.php
@@ -85,7 +85,12 @@ abstract class BibNumeriqueContollerDilicomTestCase extends AbstractControllerTe
     $this->_http
       ->whenCalled('setAuth')
       ->with('afi-bib', 'secretPassword')
-      ->answers(null);
+      ->answers(null)
+
+      ->whenCalled('open_url')
+      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/getLoanStatus?glnContractor=123456789&orderLineId[0]=x321')
+      ->answers(DilicomFixtures::getLoanStatusResponse());
+
 
     $this->_time_source = new TimeSourceForTest('2014-05-02 14:14:14');
     Class_WebService_BibNumerique_Dilicom_Hub::setTimeSource($this->_time_source);
@@ -456,7 +461,12 @@ abstract class BibNumeriqueContollerDilicomSecondUserTestCase extends BibNumeriq
 class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndLoanCountExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
   public function setUp() {
     parent::setUp();
-    Class_Album_Item::find(1)->setLoanCount(40)->save();
+
+    $this->_http
+      ->whenCalled('open_url')
+      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/getLoanStatus?glnContractor=123456789&orderLineId[0]=x321')
+      ->answers(DilicomFixtures::getLoanStatusNoSimultaneousLoanLeftResponse());
+
     $this->dispatch('/bib-numerique/loan-book/id/3', true);
   }
 
@@ -541,11 +551,23 @@ class BibNumeriqueControllerDilicomLoanBookActionUserLoanCountExceededTest exten
 class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndQuantityExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
   public function setUp() {
     parent::setUp();
-    Class_Album_Item::find(1)->setQuantity(50)->save();
+    $this->_http
+      ->whenCalled('open_url')
+      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/getLoanStatus?glnContractor=123456789&orderLineId[0]=x321')
+      ->answers(DilicomFixtures::getLoanStatusNoQuantityLeftResponse());
+
     $this->dispatch('/bib-numerique/loan-book/id/3', true);
   }
 
 
+
+
+  /** @test */
+  public function albumShouldHaveBeenUpdateThroughHubGetLoanStatus() {
+    $this->assertContains('getLoanStatus', $this->_http->getFirstAttributeForLastCallOn('open_url'));
+  }
+
+
   /** @test */
   public function responseShouldRedirectToReferer() {
     $this->assertRedirectTo('/recherche/viewnotice/id/3');
diff --git a/tests/fixtures/DilicomFixtures.php b/tests/fixtures/DilicomFixtures.php
index d71f9ffc70d..e81c848660d 100644
--- a/tests/fixtures/DilicomFixtures.php
+++ b/tests/fixtures/DilicomFixtures.php
@@ -97,6 +97,42 @@ class DilicomFixtures {
   }
 
 
+  public static function getLoanStatusNoQuantityLeftResponse() {
+    return '{
+  "date" : "2014-08-14T11:32:12.786+02:00",
+  "returnStatus" : "OK",
+  "returnMessage" : [ ],
+  "loanResponseLine" : [ {
+    "returnStatus" : "OK",
+    "orderLineId" : "537119f5975a1d3260801864",
+    "nta" : 0,
+    "nus1" : 5,
+    "nus2" : 30,
+    "beginDate" : "2014-05-12T20:59:03+02:00",
+    "endDate" : "2015-05-12T20:59:03+02:00"
+  } ]
+}';
+  }
+
+
+  public static function getLoanStatusNoSimultaneousLoanLeftResponse() {
+    return '{
+  "date" : "2014-08-14T11:32:12.786+02:00",
+  "returnStatus" : "OK",
+  "returnMessage" : [ ],
+  "loanResponseLine" : [ {
+    "returnStatus" : "OK",
+    "orderLineId" : "537119f5975a1d3260801864",
+    "nta" : 24,
+    "nus1" : 0,
+    "nus2" : 30,
+    "beginDate" : "2014-05-12T20:59:03+02:00",
+    "endDate" : "2015-05-12T20:59:03+02:00"
+  } ]
+}';
+  }
+
+
   public static function getLoanStatusErrorResponse() {
     return '{
   "date" : "2014-08-14T11:32:12.786+02:00",
diff --git a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
index d3321c76297..73e177480e4 100644
--- a/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
+++ b/tests/library/ZendAfi/View/Helper/RenderAlbumTest.php
@@ -379,10 +379,4 @@ class ZendAfi_View_Helper_RenderAlbumDilicomPNBTest extends ZendAfi_View_Helper_
                                       '//a[contains(@href, "/bib-numerique/loan-book-ajax/id/3")]',
                                       'Emprunter le livre au format EPUB');
   }
-
-
-  /** @test */
-  public function albumShouldHaveBeenUpdateThroughHubGetLoanStatus() {
-    $this->assertContains('getLoanStatus', $this->_http->getFirstAttributeForLastCallOn('open_url'));
-  }
 }
-- 
GitLab