From 15fff0df41a77d4108bffe0b0d0218c54de61dcc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr>
Date: Thu, 28 Sep 2023 13:16:12 +0000
Subject: [PATCH] hotline : #185534 : error on display serial records

---
 VERSIONS_HOTLINE/185534                       |   1 +
 .../View/Wrapper/SerialArticleFromArray.php   |  15 ++-
 .../scenarios/Serials/SerialsDetailsTest.php  | 114 ++++++++++++++----
 3 files changed, 104 insertions(+), 26 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/185534

diff --git a/VERSIONS_HOTLINE/185534 b/VERSIONS_HOTLINE/185534
new file mode 100644
index 00000000000..fbf5840254d
--- /dev/null
+++ b/VERSIONS_HOTLINE/185534
@@ -0,0 +1 @@
+ - correctif #185534 : Articles de périodiques : Correction de l'affichage de la notice périodique
\ No newline at end of file
diff --git a/library/templates/Intonation/Library/View/Wrapper/SerialArticleFromArray.php b/library/templates/Intonation/Library/View/Wrapper/SerialArticleFromArray.php
index 50f2e29fb81..785f12784e5 100644
--- a/library/templates/Intonation/Library/View/Wrapper/SerialArticleFromArray.php
+++ b/library/templates/Intonation/Library/View/Wrapper/SerialArticleFromArray.php
@@ -20,7 +20,8 @@
  */
 
 
-class Intonation_Library_View_Wrapper_SerialArticleFromArray extends Intonation_Library_View_Wrapper_Abstract {
+class Intonation_Library_View_Wrapper_SerialArticleFromArray
+  extends Intonation_Library_View_Wrapper_Abstract {
 
   public function getMainTitle() {
     return $this->_model['titre'];
@@ -73,11 +74,15 @@ class Intonation_Library_View_Wrapper_SerialArticleFromArray extends Intonation_
 
 
   public function getDescription() {
-    if ( ! $html = array_filter([$this->_model['note'],
-                                 $this->_model['resume']]))
-      return '';
+    $html = '';
 
-    return array_map(fn($line) => $this->_view->tag('p', $line));
+    if ($note = $this->_model['note'])
+      $html .= $this->_view->tag('p', $note);
+
+    if ($resume = $this->_model['resume'])
+      $html .= $this->_view->tag('p', $resume);
+
+    return $html;
   }
 
 
diff --git a/tests/scenarios/Serials/SerialsDetailsTest.php b/tests/scenarios/Serials/SerialsDetailsTest.php
index 8508706101c..915b47a9277 100644
--- a/tests/scenarios/Serials/SerialsDetailsTest.php
+++ b/tests/scenarios/Serials/SerialsDetailsTest.php
@@ -21,8 +21,8 @@
 
 
 abstract class SerialsDetailsTestCase extends AbstractControllerTestCase {
+
   protected
-    $_storm_default_to_volatile = true,
     $_fakir_56,
     $_fakir_57,
     $_fakir_eco,
@@ -31,34 +31,45 @@ abstract class SerialsDetailsTestCase extends AbstractControllerTestCase {
   public function setUp() {
     parent::setUp();
 
-    Class_Notice::newInstanceWithId(234,
-                                    ['unimarc' => '00170nas0 2200085   450 0010008000001000018000082000030000262100009000564610019000653059603  a|||||||||2012  aFakirh58iDécembre 2012  d2012 032979322tFakir',
-                                     'titre_principal' => 'Fakir 58',
-                                     'clef_chapeau' => 'FAKIR',
-                                     'tome_alpha' => '58',
-                                     'issn' => '',
-                                     'type_doc' => Class_TypeDoc::PERIODIQUE,
-                                     'resume' => 'Fakir hebdo']);
-
-
-    $this->_fakir_57 =
-      Class_Notice::newInstanceWithId(2345,
-                                      ['titre_principal' => 'Fakir 57 septembre-novembre 2012',
+    $this->fixture(Class_Notice::class,
+                   ['id' => 234,
+                    'unimarc' => '00170nas0 2200085   450 0010008000001000018000082000030000262100009000564610019000653059603  a|||||||||2012  aFakirh58iDécembre 2012  d2012 032979322tFakir',
+                    'titre_principal' => 'Fakir 58',
+                    'clef_chapeau' => 'FAKIR',
+                    'titres' => 'FAKIR',
+                    'clef_alpha' => 'FAKIRHEBDO---1523---2',
+                    'tome_alpha' => '58',
+                    'issn' => '',
+                    'type' => 1,
+                    'facettes' => 'T1',
+                    'type_doc' => Class_TypeDoc::PERIODIQUE,
+                    'resume' => 'Fakir hebdo']);
+
+    $this->_fakir_57 = $this->fixture(Class_Notice::class,
+                                      ['id' => 2345,
+                                       'titre_principal' => 'Fakir 57 septembre-novembre 2012',
                                        'unimarc' => '00179nas0 2200085   450 0010008000001000018000082000039000262100009000654610019000743037025  a|||||||||2012  aFakirh57iSeptembre-Novembre 2012  d2012 032979322tFakir',
                                        'clef_chapeau' => 'FAKIR',
+                                       'titres' => 'FAKIR',
                                        'type_doc' => Class_TypeDoc::PERIODIQUE,
                                        'tome_alpha' => '57',
                                        'url_vignette' => '',
                                        'url_image' => '',
+                                       'type' => 1,
+                                       'facettes' => 'T1',
                                        'resume' => 'Fakir hebdo']);
-    $this->_fakir_56 =
-      Class_Notice::newInstanceWithId(23456,
-                                      ['titre_principal' => 'juillet Fakir 56',
+
+    $this->_fakir_56 = $this->fixture(Class_Notice::class,
+                                      ['id' => 23456,
+                                       'titre_principal' => 'juillet Fakir 56',
                                        'unimarc' => '00168nas0 2200085   450 0010008000001000018000082000028000262100009000544610019000633025081  a|||||||||2012  aFakirh56iJuillet 2012  d2012 032979322tFakir',
                                        'clef_chapeau' => 'FAKIR',
+                                       'titres' => 'FAKIR',
                                        'tome_alpha' => '56',
                                        'url_vignette' => '',
                                        'url_image' => '',
+                                       'type' => 1,
+                                       'facettes' => 'T1',
                                        'type_doc' => Class_TypeDoc::PERIODIQUE,
                                        'resume' => 'Fakir hebdo']);
 
@@ -84,6 +95,7 @@ abstract class SerialsDetailsTestCase extends AbstractControllerTestCase {
 
 
 class SerialsDetailsNoticeAjaxControllerPeriodiqueSerieTest extends SerialsDetailsTestCase {
+
   public function setUp() {
     parent::setUp();
 
@@ -109,6 +121,7 @@ class SerialsDetailsNoticeAjaxControllerPeriodiqueSerieTest extends SerialsDetai
 
 
 abstract class SerialsDetailsWithXsltTestCase extends SerialsDetailsTestCase {
+
   public function setUp() {
     parent::setUp();
 
@@ -163,9 +176,12 @@ abstract class SerialsDetailsWithXsltTestCase extends SerialsDetailsTestCase {
 
 
 
-class SerialsDetailsNoticeAjaxControllerPeriodiqueSerieXsltTest extends SerialsDetailsWithXsltTestCase {
+class SerialsDetailsNoticeAjaxControllerPeriodiqueSerieXsltTest
+  extends SerialsDetailsWithXsltTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $this->dispatch('/noticeajax/detail/id_notice/234');
   }
 }
@@ -178,6 +194,7 @@ class SerialsDetailsRecordDescriptionPeriodiqueSerieTest
 
   public function setUp() {
     parent::setUp();
+
     $this->_buildTemplateProfil(['id' => 78]);
 
     Storm_Cache::beVolatile();
@@ -259,9 +276,11 @@ class SerialsDetailsRecordDescriptionPeriodiqueSerieTest
             ['description', 'Un résumé succinct']];
   }
 
-  /** @test
-      @dataProvider getElementsToTest
-  */
+
+  /**
+   * @test
+   * @dataProvider getElementsToTest
+   */
   public function modelElementShouldCorrespondingExpectedString($element, $expected_result) {
     $this->assertXPathContentContains('//p[@class="model_'.$element.'_Class_Notice"]',
                                       $expected_result);
@@ -279,9 +298,12 @@ class SerialsDetailsRecordDescriptionPeriodiqueSerieTest
 
 
 class SerialsDetailsInThemeTest extends SerialsDetailsTestCase {
+
   public function setUp() {
     parent::setUp();
+
     $this->_buildTemplateProfil(['id' => 789]);
+
     $this->dispatch('/record/description/id/234');
   }
 
@@ -297,3 +319,53 @@ class SerialsDetailsInThemeTest extends SerialsDetailsTestCase {
     $this->assertXPathContentContains('//div[@class="record_serials_articles container-fluid articles"]//div[@class="record_serials_articles_list col-12"]//div[@class="card-title card_title card_title_Intonation_Library_View_Wrapper_SerialArticleFromArray"]', 'Fakir ecologie');
   }
 }
+
+
+
+
+/* hotline : https://forge.afi-sa.net/issues/185534 */
+class SerialsDetailsWithNoteTest extends SerialsDetailsTestCase {
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->_buildTemplateProfil(['id' => 789]);
+
+    Class_Notice_SerialArticles::find(19015)
+      ->setUnimarc('00196nas0 2200097   450 0010008000001000018000082000039000262100009000653000015000744610009000893037025  a|||||||||2012  aFakir ecologieh57iSeptembre-Novebr 2012  aFakir note  d2012')
+      ->save();
+
+    $mock_sql = $this->mock();
+    Zend_Registry::set('sql', $mock_sql);
+
+    $mock_sql
+
+      ->whenCalled('fetchOne')
+      ->with("select count(*) from stats_notices where annee=2023 and mois=09")
+      ->answers(1)
+
+      ->whenCalled('execute')
+      ->with("update stats_notices set nb_visu = nb_visu + 1 where annee=2023 and mois=09")
+      ->answers(1)
+
+      ->whenCalled('fetchAll')
+      ->with("select id_notice, facettes from notices Where (MATCH(titres, auteurs, editeur, collection, matieres, dewey, other_terms) AGAINST('+(FAKIR FAKIRS)' IN BOOLEAN MODE)) and type=1 order by MATCH(auteurs) AGAINST('P_FAKIR') desc, MATCH(titres) AGAINST('P_FAKIR') desc, MATCH(titres) AGAINST('FAKIR') desc, MATCH(auteurs) AGAINST('FAKIR') desc, date_creation desc",
+             true,
+             false)
+      ->answers([234, 'T1'])
+
+      ->whenCalled('fetchAllByColumn')
+      ->with('select id_notice from notices where type_doc = "2" and clef_chapeau = "FAKIR"')
+      ->answers([234])
+
+      ->beStrict();
+
+    $this->dispatch('/recherche/viewnotice/clef/FAKIRHEBDO---1523---2/id/234/tri/*/expressionRecherche/fakir');
+  }
+
+
+  /** @test */
+  public function divRecordSerialsShouldContainsCardTitleFakirNote() {
+    $this->assertXPath('//div[@class="card-text card_description card_description_Intonation_Library_View_Wrapper_SerialArticleFromArray"]/p[text()="Fakir note"]');
+  }
+}
-- 
GitLab