From 986f911c6bbac983177f73af33c763399608606b Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Sat, 12 Dec 2015 17:12:52 +0100
Subject: [PATCH] dev #34308 refactoring to have multible PNB commands in one
 album

fix db migration + multiple item import on update
---
 cosmogramme/php/_init.php                     |   2 +-
 .../patch/{patch_283.php => patch_284.php}    |   6 +-
 .../WebService/BibNumerique/Dilicom/Book.php  |  28 +
 .../BibNumerique/Dilicom/PNBOffersFile.php    |  10 +
 tests/db/UpgradeDBTest.php                    |   2 +-
 .../Dilicom/PNBOffersParserTest.php           |  47 ++
 .../partial_pnb_666_20150220T150017Z.xml      | 498 ++++++++++++++++++
 .../ZendAfi/View/Helper/Abonne/ResumeTest.php |   1 -
 8 files changed, 588 insertions(+), 6 deletions(-)
 rename cosmogramme/sql/patch/{patch_283.php => patch_284.php} (82%)
 create mode 100644 tests/library/Class/WebService/Dilicom/fixtures/partial_pnb_666_20150220T150017Z.xml

diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php
index 98fa41bf192..72f0f5543d5 100644
--- a/cosmogramme/php/_init.php
+++ b/cosmogramme/php/_init.php
@@ -1,7 +1,7 @@
 <?php
 error_reporting(E_ERROR | E_PARSE);
 
-define("PATCH_LEVEL","282");
+define("PATCH_LEVEL","284");
 
 define("APPLI","cosmogramme");
 define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs");
diff --git a/cosmogramme/sql/patch/patch_283.php b/cosmogramme/sql/patch/patch_284.php
similarity index 82%
rename from cosmogramme/sql/patch/patch_283.php
rename to cosmogramme/sql/patch/patch_284.php
index 961cf2625ed..80871396b44 100644
--- a/cosmogramme/sql/patch/patch_283.php
+++ b/cosmogramme/sql/patch/patch_284.php
@@ -4,15 +4,15 @@ $adapter = Zend_Db_Table::getDefaultAdapter();
 try {
   $adapter->query('select item_id from album_usage_constraints');
 } catch (Exception $e) {
-  $constraints = $adapter->query('select * from album_usage_constraints where album_id > 0')->fetch();
+  $constraints = $adapter->query('select * from album_usage_constraints where album_id > 0')->fetchAll();
 
   $adapter->query('alter table album_usage_constraints add column item_id int');
 
   foreach($constraints as $constraint) {
-    if (!$item = $adapter->query('select * from album_item where album_id=' . $constraints['album_id'])->fetch())
+    if (!$item = $adapter->query('select * from album_item where album_id=' . $constraint['album_id'])->fetch())
       continue;
 
-    $adapter->query('update album_usage_constraints set item_id=' . $item['id'] . ' where album_id=' . $constraints['album_id']);
+    $adapter->query('update album_usage_constraints set item_id=' . $item['id'] . ' where album_id=' . $constraint['album_id']);
   }
 
   $adapter->query('alter table album_usage_constraints drop column album_id');
diff --git a/library/Class/WebService/BibNumerique/Dilicom/Book.php b/library/Class/WebService/BibNumerique/Dilicom/Book.php
index d0fa65dd29a..0f819e5456d 100644
--- a/library/Class/WebService/BibNumerique/Dilicom/Book.php
+++ b/library/Class/WebService/BibNumerique/Dilicom/Book.php
@@ -34,6 +34,34 @@ class Class_WebService_BibNumerique_Dilicom_Book extends Class_WebService_BibNum
     return $this->_items;
   }
 
+
+  public function import() {
+    if (null == $album = $this->findAlbumInDB())
+      return $this->updateAlbum(Class_Album::newInstance());
+
+    $this->updateAlbumOrders($album);
+    return $album;
+  }
+
+
+  public function updateAlbumOrders($album) {
+    $order_ids = array_map(
+                           function($item) {
+                             return $item->getOrderLineId();
+                           },
+                           $album->getItems());
+
+    $items_to_add = array_filter(
+                                 $this->_items,
+                                 function($item) use($order_ids) {
+                                   return !in_array($item->getOrderLineId(),
+                                                    $order_ids);
+                                 });
+
+    array_map([$album, 'addItem'], $items_to_add);
+  }
+
+
   public function fillAlbum($album) {
     $album
       ->setTypeDoc(Class_TypeDoc::find(Class_TypeDoc::DILICOM))
diff --git a/library/Class/WebService/BibNumerique/Dilicom/PNBOffersFile.php b/library/Class/WebService/BibNumerique/Dilicom/PNBOffersFile.php
index 03be0baac57..fa84cd4d64a 100644
--- a/library/Class/WebService/BibNumerique/Dilicom/PNBOffersFile.php
+++ b/library/Class/WebService/BibNumerique/Dilicom/PNBOffersFile.php
@@ -76,6 +76,16 @@ class Class_WebService_BibNumerique_Dilicom_PNBOffersFile {
   public function endean13($data) {
     end($this->_books)->setISBN($data);
   }
+
+
+  public function endValue($data) {
+    if (!$this->_parser->inParents('offerValidity'))
+      return;
+
+    $this->_current_item->getUsageConstraints()
+                        ->getAvailabilityConstraint()
+                        ->setDuration($data);
+  }
 }
 
 ?>
\ No newline at end of file
diff --git a/tests/db/UpgradeDBTest.php b/tests/db/UpgradeDBTest.php
index e842aa3b604..3b6df1c9f43 100644
--- a/tests/db/UpgradeDBTest.php
+++ b/tests/db/UpgradeDBTest.php
@@ -299,7 +299,7 @@ class UpgradeDB_281_Test extends UpgradeDBTestCase {
 
 
 
-class UpgradeDB_283_Test extends UpgradeDBTestCase {
+class UpgradeDB_284_Test extends UpgradeDBTestCase {
   protected static
     $album_id,
     $item_id;
diff --git a/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php b/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php
index 74d6b965975..d96dd769050 100644
--- a/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php
+++ b/tests/library/Class/WebService/Dilicom/PNBOffersParserTest.php
@@ -302,6 +302,53 @@ class DilicomPNBOfferParserWithLoanDurationVariableTest extends DilicomPNBOfferP
     $this->assertEquals('2020-02-19T15:40:01+0100',
                         $this->_item->getUsageConstraints()->getAvailabilityEndDate());
   }
+}
+
+
+
+
+class DilicomPNBOfferParserUpdateWithNewOrderTest extends DilicomPNBOfferParserTestCase {
+  public function setUp() {
+    parent::setUp();
+    Class_Album_UsageConstraints::setTimeSource(new TimeSourceForTest('2015-03-31 09:00:00'));
+    $books = Class_WebService_BibNumerique_Dilicom_PNBOffersFile::booksFromXML($this->_xml);
+    foreach($books as $book)
+      $book->import();
+
+    $xmlpath = realpath(dirname(__FILE__)) . '/fixtures/partial_pnb_666_20150220T150017Z.xml';
+
+    $this->_books = Class_WebService_BibNumerique_Dilicom_PNBOffersFile::booksFromXML(file_get_contents($xmlpath));
+
+    foreach($this->_books as $book)
+      $book->import();
+
+    $this->_items = Class_Album::findFirstBy(['id_origine' => 'Dilicom-9791023504148'])->getItems();
+  }
+
 
+  /** @test */
+  public function albumHomerShouldHaveTwoItems() {
+    $this->assertCount(2,
+                       $this->_items);
+  }
+
+
+  /** @test */
+  public function firstItemOrderLineIdShouldBe54e74() {
+    $this->assertEquals('54e748d8975a2fa6aa4d3e25', $this->_items[0]->getOrderLineId());
+  }
+
+
+  /** @test */
+  public function secondItemOrderLineIdShouldBe1234() {
+    $this->assertEquals('123456789abcde',
+                        $this->_items[1]->getOrderLineId());
+  }
+
+  /** @test */
+  public function secondItemAvailabilityDurationShouldBe1000() {
+    $this->assertEquals(1000,
+                        $this->_items[1]->getUsageConstraints()->getAvailabilityDuration());
+  }
 }
 ?>
\ No newline at end of file
diff --git a/tests/library/Class/WebService/Dilicom/fixtures/partial_pnb_666_20150220T150017Z.xml b/tests/library/Class/WebService/Dilicom/fixtures/partial_pnb_666_20150220T150017Z.xml
new file mode 100644
index 00000000000..377054f69d2
--- /dev/null
+++ b/tests/library/Class/WebService/Dilicom/fixtures/partial_pnb_666_20150220T150017Z.xml
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pnbOffers
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="
+http://www.editeur.org/onix/3.0/reference 
+http://pnb-recette.dilicom.net/notices_onix/schema_onix/ONIX_BookProduct_3.0_reference.xsd
+http://pnb.dilicom.net/definitions
+http://pnb-recette.dilicom.net/notices_onix/schema/pnb_diffusion_offre_collectivite.xsd">
+<offer>
+    <notice>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;ONIXMessage release="3.0" xmlns="http://www.editeur.org/onix/3.0/reference"&gt;
+&lt;Header&gt;
+&lt;Sender&gt;
+&lt;SenderIdentifier&gt;&lt;SenderIDType&gt;06&lt;/SenderIDType&gt;&lt;IDValue&gt;3025599000108&lt;/IDValue&gt;&lt;/SenderIdentifier&gt;
+&lt;SenderName&gt;SERVEUR DILICOM - PNB NUMERIQUE&lt;/SenderName&gt;&lt;/Sender&gt;
+&lt;Addressee&gt;&lt;AddresseeIdentifier&gt;&lt;AddresseeIDType&gt;06&lt;/AddresseeIDType&gt;&lt;IDValue&gt;3056000302801&lt;/IDValue&gt;&lt;/AddresseeIdentifier&gt;&lt;/Addressee&gt;
+&lt;SentDateTime&gt;20150220T0400Z&lt;/SentDateTime&gt;
+&lt;/Header&gt;
+&lt;Product&gt;
+&lt;RecordReference&gt;EDEN-30152-51441-LIBRARIES&lt;/RecordReference&gt;
+&lt;NotificationType&gt;04&lt;/NotificationType&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;15&lt;/ProductIDType&gt;
+&lt;IDValue&gt;9791023504148&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;01&lt;/ProductIDType&gt;
+&lt;IDTypeName&gt;internal_key&lt;/IDTypeName&gt;
+&lt;IDValue&gt;eden-30152-51441-libraries&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;DescriptiveDetail&gt;
+&lt;ProductComposition&gt;00&lt;/ProductComposition&gt;
+&lt;ProductForm&gt;EB&lt;/ProductForm&gt;
+&lt;ProductFormDetail&gt;E101&lt;/ProductFormDetail&gt;
+&lt;ProductFormDetail&gt;E200&lt;/ProductFormDetail&gt;
+&lt;ProductFormFeature&gt;
+&lt;ProductFormFeatureType&gt;07&lt;/ProductFormFeatureType&gt;
+&lt;ProductFormFeatureValue&gt;on-site&lt;/ProductFormFeatureValue&gt;
+&lt;ProductFormFeatureDescription&gt;PNBONLINE04&lt;/ProductFormFeatureDescription&gt;
+&lt;/ProductFormFeature&gt;
+&lt;EpubTechnicalProtection&gt;03&lt;/EpubTechnicalProtection&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;02&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;03&lt;/EpubUsageStatus&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;03&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;03&lt;/EpubUsageStatus&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;04&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;02&lt;/EpubUsageStatus&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;6&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;06&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;06&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;02&lt;/EpubUsageStatus&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;59&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;09&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;40&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;10&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;15&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;07&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;07&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;02&lt;/EpubUsageStatus&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;1825&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;09&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;EpubUsageConstraint&gt;
+&lt;EpubUsageType&gt;04&lt;/EpubUsageType&gt;
+&lt;EpubUsageStatus&gt;02&lt;/EpubUsageStatus&gt;
+&lt;EpubUsageLimit&gt;
+&lt;Quantity&gt;9999&lt;/Quantity&gt;
+&lt;EpubUsageUnit&gt;07&lt;/EpubUsageUnit&gt;
+&lt;/EpubUsageLimit&gt;
+&lt;/EpubUsageConstraint&gt;
+&lt;Collection&gt;
+&lt;CollectionType&gt;10&lt;/CollectionType&gt;
+&lt;TitleDetail&gt;
+&lt;TitleType&gt;01&lt;/TitleType&gt;
+&lt;TitleElement&gt;
+&lt;TitleElementLevel&gt;02&lt;/TitleElementLevel&gt;
+&lt;TitleText&gt;Fiction hors collection&lt;/TitleText&gt;
+&lt;/TitleElement&gt;
+&lt;/TitleDetail&gt;
+&lt;/Collection&gt;
+&lt;TitleDetail&gt;
+&lt;TitleType&gt;01&lt;/TitleType&gt;
+&lt;TitleElement&gt;
+&lt;TitleElementLevel&gt;01&lt;/TitleElementLevel&gt;
+&lt;TitleText&gt;Homer et le chien formidable&lt;/TitleText&gt;
+&lt;Subtitle&gt;Tome 1&lt;/Subtitle&gt;
+&lt;/TitleElement&gt;
+&lt;/TitleDetail&gt;
+&lt;Contributor&gt;
+&lt;SequenceNumber&gt;1&lt;/SequenceNumber&gt;
+&lt;ContributorRole&gt;A01&lt;/ContributorRole&gt;
+&lt;PersonName&gt;Suzanne Selfors&lt;/PersonName&gt;
+&lt;PersonNameInverted&gt;Selfors Suzanne&lt;/PersonNameInverted&gt;
+&lt;NamesBeforeKey&gt;Suzanne&lt;/NamesBeforeKey&gt;
+&lt;KeyNames&gt;Selfors&lt;/KeyNames&gt;
+&lt;BiographicalNote/&gt;
+&lt;/Contributor&gt;
+&lt;NoEdition/&gt;
+&lt;Language&gt;
+&lt;LanguageRole&gt;01&lt;/LanguageRole&gt;
+&lt;LanguageCode&gt;fre&lt;/LanguageCode&gt;
+&lt;/Language&gt;
+&lt;Extent&gt;
+&lt;ExtentType&gt;22&lt;/ExtentType&gt;
+&lt;ExtentValue&gt;3.19&lt;/ExtentValue&gt;
+&lt;ExtentUnit&gt;19&lt;/ExtentUnit&gt;
+&lt;/Extent&gt;
+&lt;Extent&gt;
+&lt;ExtentType&gt;00&lt;/ExtentType&gt;
+&lt;ExtentValue&gt;360&lt;/ExtentValue&gt;
+&lt;ExtentUnit&gt;03&lt;/ExtentUnit&gt;
+&lt;/Extent&gt;
+&lt;Subject&gt;
+&lt;SubjectSchemeIdentifier&gt;29&lt;/SubjectSchemeIdentifier&gt;
+&lt;SubjectSchemeVersion&gt;DILICOM20&lt;/SubjectSchemeVersion&gt;
+&lt;SubjectCode&gt;2500&lt;/SubjectCode&gt;
+&lt;SubjectHeadingText&gt;JEUNESSE&lt;/SubjectHeadingText&gt;
+&lt;/Subject&gt;
+&lt;Subject&gt;
+&lt;MainSubject/&gt;
+&lt;SubjectSchemeIdentifier&gt;10&lt;/SubjectSchemeIdentifier&gt;
+&lt;SubjectCode&gt;JNF000000&lt;/SubjectCode&gt;
+&lt;/Subject&gt;
+&lt;Subject&gt;
+&lt;MainSubject/&gt;
+&lt;SubjectSchemeIdentifier&gt;29&lt;/SubjectSchemeIdentifier&gt;
+&lt;SubjectCode&gt;3722&lt;/SubjectCode&gt;
+&lt;SubjectHeadingText&gt;JEUNESSE&lt;/SubjectHeadingText&gt;
+&lt;/Subject&gt;
+&lt;Subject&gt;
+&lt;SubjectSchemeIdentifier&gt;29&lt;/SubjectSchemeIdentifier&gt;
+&lt;SubjectSchemeVersion&gt;DILICOM10&lt;/SubjectSchemeVersion&gt;
+&lt;SubjectCode&gt;3744&lt;/SubjectCode&gt;
+&lt;SubjectHeadingText&gt;Fiction Jeunesse&lt;/SubjectHeadingText&gt;
+&lt;/Subject&gt;
+&lt;/DescriptiveDetail&gt;
+&lt;CollateralDetail&gt;
+&lt;TextContent&gt;
+&lt;TextType&gt;03&lt;/TextType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;Text&gt;Homer Pudding, 12 ans, rêve d'aventures et de trésors cachés. Mais personne ne le prend au sérieux. Surtout pas ses parents... Quand son oncle Drake -authentique chercheur de trésors- disparaît, Homer hérite de son chien, un basset sans flair doté d'une mystérieuse médaille. Et si cette médaille était la clé qui conduisait au trésor de Rumpold Le Puant, qu'oncle Drake a cherché toute sa vie ? Homer, bien décidé à percer ce mystère, se met en chasse aux côtés de son nouveau compagnon, qui pourrait bien être lui-même un sacré... trésor !Un roman d'aventures merveilleux et hors du temps, bourré d'humour, de tendresse et de surprises.&lt;/Text&gt;
+&lt;/TextContent&gt;
+&lt;TextContent&gt;
+&lt;TextType&gt;02&lt;/TextType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;Text&gt;Homer Pudding, 12 ans, rêve d'aventures et de trésors cachés. Mais personne ne le prend au sérieux. Surtout pas ses parents... Quand son oncle Drake -authentique chercheur de trésors- disparaît, Homer hérite de son chien, un basset sans flair doté d'une mystérieuse médaille. Et si cette médaille était la clé qui conduisait au trésor de Rumpold Le Puant, qu'oncle Drake a cherché toute sa vie ? Homer, bien décidé à percer ce mystère, se met en chasse aux côtés de son nouveau compagnon, qui pourrait bien être lui-même un sacré... trésor !Un roman d'aventures merveilleux et hors du temps, bourré d'humour, de tendresse et de surprises.&lt;/Text&gt;
+&lt;/TextContent&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;01&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;03&lt;/ResourceMode&gt;
+&lt;ResourceFeature&gt;
+&lt;ResourceFeatureType&gt;02&lt;/ResourceFeatureType&gt;
+&lt;FeatureValue&gt;Couverture&lt;/FeatureValue&gt;
+&lt;/ResourceFeature&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;front_cover.jpg&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;D502&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;03&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;1653&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;02&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;2421&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;https://assets.edenlivres.fr/assets/publications/30152/medias/front_cover.jpg&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20130919T013731+0200&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;15&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;04&lt;/ResourceMode&gt;
+&lt;ResourceFeature&gt;
+&lt;ResourceFeatureType&gt;02&lt;/ResourceFeatureType&gt;
+&lt;FeatureValue&gt;Extrait&lt;/FeatureValue&gt;
+&lt;/ResourceFeature&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;extrait.epub&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;E101&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;https://assets.edenlivres.fr/assets/publications/30152/medias/extrait.epub&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20130919T013732+0200&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;15&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;04&lt;/ResourceMode&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;excerpt.pdf&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;D401&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;https://assets.edenlivres.fr/assets/publications/30152/medias/excerpt.pdf&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20140617T222049+0200&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;01&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;03&lt;/ResourceMode&gt;
+&lt;ResourceFeature&gt;
+&lt;ResourceFeatureType&gt;02&lt;/ResourceFeatureType&gt;
+&lt;FeatureValue&gt;front_cover_small&lt;/FeatureValue&gt;
+&lt;/ResourceFeature&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/small.jpg&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;D502&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;03&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;65&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/small.jpg&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20150107T132639+0100&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;01&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;03&lt;/ResourceMode&gt;
+&lt;ResourceFeature&gt;
+&lt;ResourceFeatureType&gt;02&lt;/ResourceFeatureType&gt;
+&lt;FeatureValue&gt;front_cover_medium&lt;/FeatureValue&gt;
+&lt;/ResourceFeature&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/medium.jpg&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;D502&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;03&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;200&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/medium.jpg&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20150107T132639+0100&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;01&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;03&lt;/ResourceMode&gt;
+&lt;ResourceFeature&gt;
+&lt;ResourceFeatureType&gt;02&lt;/ResourceFeatureType&gt;
+&lt;FeatureValue&gt;front_cover_large&lt;/FeatureValue&gt;
+&lt;/ResourceFeature&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;02&lt;/ResourceForm&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;04&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/large.jpg&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;01&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;D502&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceVersionFeature&gt;
+&lt;ResourceVersionFeatureType&gt;03&lt;/ResourceVersionFeatureType&gt;
+&lt;FeatureValue&gt;1000&lt;/FeatureValue&gt;
+&lt;/ResourceVersionFeature&gt;
+&lt;ResourceLink&gt;http://assets.edenlivres.fr/assets/publications/30152/cover/large.jpg&lt;/ResourceLink&gt;
+&lt;ContentDate&gt;
+&lt;ContentDateRole&gt;17&lt;/ContentDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20150107T132638+0100&lt;/Date&gt;
+&lt;/ContentDate&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;SupportingResource&gt;
+&lt;ResourceContentType&gt;16&lt;/ResourceContentType&gt;
+&lt;ContentAudience&gt;00&lt;/ContentAudience&gt;
+&lt;ResourceMode&gt;06&lt;/ResourceMode&gt;
+&lt;ResourceVersion&gt;
+&lt;ResourceForm&gt;01&lt;/ResourceForm&gt;
+&lt;ResourceLink&gt;http://www.edenlivres.fr/p/30152&lt;/ResourceLink&gt;
+&lt;/ResourceVersion&gt;
+&lt;/SupportingResource&gt;
+&lt;/CollateralDetail&gt;
+&lt;PublishingDetail&gt;
+&lt;Imprint&gt;
+&lt;ImprintName&gt;Seuil&lt;/ImprintName&gt;
+&lt;/Imprint&gt;
+&lt;Publisher&gt;
+&lt;PublishingRole&gt;01&lt;/PublishingRole&gt;
+&lt;PublisherIdentifier&gt;
+&lt;PublisherIDType&gt;06&lt;/PublisherIDType&gt;
+&lt;IDValue&gt;3052020010016&lt;/IDValue&gt;
+&lt;/PublisherIdentifier&gt;
+&lt;PublisherIdentifier&gt;
+&lt;PublisherIDType&gt;01&lt;/PublisherIDType&gt;
+&lt;IDTypeName&gt;DM_GLOBAL_ID&lt;/IDTypeName&gt;
+&lt;IDValue&gt;EDEN4&lt;/IDValue&gt;
+&lt;/PublisherIdentifier&gt;
+&lt;PublisherName&gt;Seuil&lt;/PublisherName&gt;
+&lt;Website&gt;
+&lt;WebsiteRole&gt;01&lt;/WebsiteRole&gt;
+&lt;WebsiteLink&gt;http://www.editionsduseuil.fr/&lt;/WebsiteLink&gt;
+&lt;/Website&gt;
+&lt;/Publisher&gt;
+&lt;PublishingStatus&gt;04&lt;/PublishingStatus&gt;
+&lt;PublishingDate&gt;
+&lt;PublishingDateRole&gt;01&lt;/PublishingDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20130925T000000+0200&lt;/Date&gt;
+&lt;/PublishingDate&gt;
+&lt;PublishingDate&gt;
+&lt;PublishingDateRole&gt;19&lt;/PublishingDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20130905T000000+0200&lt;/Date&gt;
+&lt;/PublishingDate&gt;
+&lt;PublishingDate&gt;
+&lt;PublishingDateRole&gt;09&lt;/PublishingDateRole&gt;
+&lt;DateFormat&gt;14&lt;/DateFormat&gt;
+&lt;Date&gt;20130919T013730+0200&lt;/Date&gt;
+&lt;/PublishingDate&gt;
+&lt;SalesRights&gt;
+&lt;SalesRightsType&gt;01&lt;/SalesRightsType&gt;
+&lt;Territory&gt;
+&lt;CountriesIncluded&gt;DE AD AT BE CY ES EE FI FR GR GP GF IE IT LU MT MQ YT MC NL PT RE SK SI&lt;/CountriesIncluded&gt;
+&lt;/Territory&gt;
+&lt;/SalesRights&gt;
+&lt;SalesRestriction&gt;
+&lt;SalesRestrictionType&gt;06&lt;/SalesRestrictionType&gt;
+&lt;/SalesRestriction&gt;
+&lt;/PublishingDetail&gt;
+&lt;RelatedMaterial&gt;
+&lt;RelatedProduct&gt;
+&lt;ProductRelationCode&gt;13&lt;/ProductRelationCode&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;03&lt;/ProductIDType&gt;
+&lt;IDValue&gt;9782021096200&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;ProductForm&gt;BA&lt;/ProductForm&gt;
+&lt;/RelatedProduct&gt;
+&lt;RelatedProduct&gt;
+&lt;ProductRelationCode&gt;31&lt;/ProductRelationCode&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;15&lt;/ProductIDType&gt;
+&lt;IDValue&gt;9791023500271&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;ProductForm&gt;EA&lt;/ProductForm&gt;
+&lt;ProductFormDetail&gt;E101&lt;/ProductFormDetail&gt;
+&lt;ProductFormDetail&gt;E200&lt;/ProductFormDetail&gt;
+&lt;/RelatedProduct&gt;
+&lt;RelatedProduct&gt;
+&lt;ProductRelationCode&gt;06&lt;/ProductRelationCode&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;01&lt;/ProductIDType&gt;
+&lt;IDValue&gt;eden-30152-8122-libraries&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;ProductForm&gt;EA&lt;/ProductForm&gt;
+&lt;/RelatedProduct&gt;
+&lt;RelatedProduct&gt;
+&lt;ProductRelationCode&gt;06&lt;/ProductRelationCode&gt;
+&lt;ProductIdentifier&gt;
+&lt;ProductIDType&gt;01&lt;/ProductIDType&gt;
+&lt;IDValue&gt;eden-30152-8123-libraries&lt;/IDValue&gt;
+&lt;/ProductIdentifier&gt;
+&lt;ProductForm&gt;EA&lt;/ProductForm&gt;
+&lt;/RelatedProduct&gt;
+&lt;/RelatedMaterial&gt;
+&lt;/Product&gt;
+&lt;/ONIXMessage&gt;</notice>
+    <orderLine>
+        <orderId>TESTVBAFI002</orderId>
+        <orderIdColl>TESTBIBVBAFI002</orderIdColl>
+        <orderLineId>54e748d8975a2fa6aa4d3e25</orderLineId>
+        <orderDate>2015-02-20T15:46:49.835+01:00</orderDate>
+        <ean13>9791023504149</ean13>
+        <quantity>1</quantity>
+        <usage>
+            <loanTerms>
+                <loanMaxDuration>
+                    <value>59</value>
+                    <unit>DAY</unit>
+                </loanMaxDuration>
+                <nbLoans>40</nbLoans>
+                <loanNbSimultaneousUsers>15</loanNbSimultaneousUsers>
+                <consultNbSimultaneousUsersInSitu>9999</consultNbSimultaneousUsersInSitu>
+                <consultNbSimultaneousUsersExSitu>0</consultNbSimultaneousUsersExSitu>
+            </loanTerms>
+            <userRights>
+                <printing>PROHIBITED</printing>
+                <copyAndPaste>PROHIBITED</copyAndPaste>
+                <nbAllowedDevices>6</nbAllowedDevices>
+            </userRights>
+            <collRights>
+                <offerValidity>
+                    <value>1825</value>
+                    <unit>DAY</unit>
+                </offerValidity>
+            </collRights>
+        </usage>
+        <returnStatus>OK</returnStatus>
+    </orderLine>
+    <orderLine>
+        <orderId>TESTVBAFI099</orderId>
+        <orderIdColl>TESTBIBVBAFI099</orderIdColl>
+        <orderLineId>123456789abcde</orderLineId>
+        <orderDate>2015-03-30T15:46:49.835+01:00</orderDate>
+        <ean13>9791023504149</ean13>
+        <quantity>1</quantity>
+        <usage>
+            <loanTerms>
+                <loanMaxDuration>
+                    <value>30</value>
+                    <unit>DAY</unit>
+                </loanMaxDuration>
+                <nbLoans>40</nbLoans>
+                <loanNbSimultaneousUsers>15</loanNbSimultaneousUsers>
+                <consultNbSimultaneousUsersInSitu>9999</consultNbSimultaneousUsersInSitu>
+                <consultNbSimultaneousUsersExSitu>0</consultNbSimultaneousUsersExSitu>
+            </loanTerms>
+            <userRights>
+                <printing>PROHIBITED</printing>
+                <copyAndPaste>PROHIBITED</copyAndPaste>
+                <nbAllowedDevices>6</nbAllowedDevices>
+            </userRights>
+            <collRights>
+                <offerValidity>
+                    <value>1000</value>
+                    <unit>DAY</unit>
+                </offerValidity>
+            </collRights>
+        </usage>
+        <returnStatus>OK</returnStatus>
+    </orderLine>
+</offer>
+</pnbOffers>
diff --git a/tests/library/ZendAfi/View/Helper/Abonne/ResumeTest.php b/tests/library/ZendAfi/View/Helper/Abonne/ResumeTest.php
index 88c031591fa..d958f24c7fe 100644
--- a/tests/library/ZendAfi/View/Helper/Abonne/ResumeTest.php
+++ b/tests/library/ZendAfi/View/Helper/Abonne/ResumeTest.php
@@ -18,7 +18,6 @@
  * along with BOKEH; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
-require_once 'library/ZendAfi/View/Helper/ViewHelperTestCase.php';
 require_once 'tests/fixtures/DilicomFixtures.php';
 
 class View_Helper_Abonne_ResumeAsAbonneSIGBTest extends ViewHelperTestCase {
-- 
GitLab