From a9440d9664f57c489217b0cb0471914417ceed7f Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Sat, 6 Feb 2016 14:01:10 +0100
Subject: [PATCH] dev #37100 performances: for fetch limit for record comments

---
 library/Class/AvisNotice.php           |  6 ++++--
 tests/library/Class/AvisNoticeTest.php | 27 ++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/library/Class/AvisNotice.php b/library/Class/AvisNotice.php
index b4bb16054e3..159018a5df0 100644
--- a/library/Class/AvisNotice.php
+++ b/library/Class/AvisNotice.php
@@ -158,6 +158,7 @@ class AvisNoticeLoader extends Storm_Model_Loader {
     $preferences = array_merge(['id_panier' => 0,
                                 'id_catalogue' => 0,
                                 'abon_ou_bib' => 'all',
+                                'nb_aff_avis' => 10,
                                 ],
                                $preferences);
 
@@ -171,8 +172,9 @@ class AvisNoticeLoader extends Storm_Model_Loader {
 
     $this->_addStatutAbonBibWhereClause($abon_ou_bib, $params);
 
-    if ($limit_page)
-      $params['limitPage'] = $limit_page;
+    $params['limitPage'] = $limit_page
+      ? $limit_page
+      : [1, $preferences['nb_aff_avis'] * 3];
 
     return Class_AvisNotice::findAllBy($params);
   }
diff --git a/tests/library/Class/AvisNoticeTest.php b/tests/library/Class/AvisNoticeTest.php
index 392e64d9036..cad8522695e 100644
--- a/tests/library/Class/AvisNoticeTest.php
+++ b/tests/library/Class/AvisNoticeTest.php
@@ -865,6 +865,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
       ->with(['order' => 'DATE_AVIS DESC',
               'clef_oeuvre' => ['POTTER'],
               'flags' => '0',
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=1) AND (STATUT=1 OR ABON_OU_BIB=0)'])
       ->answers([$this->_avis_bib_moderated, $this->_avis_abon_moderated]);
 
@@ -882,6 +883,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
               'clef_oeuvre' => ['POTTER'],
               'ABON_OU_BIB' => 0,
               'flags' => 0,
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=1) AND (STATUT=1 OR ABON_OU_BIB=0)'])
       ->answers([$this->_avis_abon_moderated]);
 
@@ -898,6 +900,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
               'clef_oeuvre' => ['POTTER'],
               'ABON_OU_BIB' => 1,
               'flags' => 0,
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=1) AND (STATUT=1 OR ABON_OU_BIB=0)'])
       ->answers([$this->_avis_bib_moderated]);
 
@@ -916,6 +919,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
               'clef_oeuvre' => ['POTTER'],
               'ABON_OU_BIB' => 0,
               'flags' => 0,
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=0)'])
       ->answers([$this->_avis_abon_moderated, $this->_avis_abon_not_moderated]);
 
@@ -934,6 +938,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
       ->with(['order' => 'DATE_AVIS DESC',
               'clef_oeuvre' => ['POTTER'],
               'flags' => 0,
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=0)'])
       ->answers([$this->_avis_bib_moderated, $this->_avis_abon_moderated, $this->_avis_abon_not_moderated]);
 
@@ -943,6 +948,26 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
   }
 
 
+  /** @test */
+  public function withNbAffTwoAvisShouldLimitPageToSix() {
+    Class_AdminVar::newInstanceWithId('MODO_AVIS', ['valeur' => 0]);
+
+    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_AvisNotice')
+      ->whenCalled('findAllBy')
+      ->with(['order' => 'DATE_AVIS DESC',
+              'clef_oeuvre' => ['POTTER'],
+              'flags' => 0,
+              'limitPage' => [1, 6],
+              'where' => '(STATUT=1 OR ABON_OU_BIB=0)'])
+      ->answers([$this->_avis_bib_moderated, $this->_avis_abon_moderated, $this->_avis_abon_not_moderated]);
+
+    $this->assertEquals([$this->_avis_bib_moderated, $this->_avis_abon_moderated, $this->_avis_abon_not_moderated],
+                        Class_AvisNotice::getAvisFromPreferences(['id_panier' => 1,
+                                                                  'nb_aff_avis' => 2,
+                                                                  'abon_ou_bib' => 'all']));
+  }
+
+
 
   /** @test */
   public function withAPosterioriBibModerationAllAvisShouldReturnModeratedRatingFromAbon() {
@@ -954,6 +979,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
       ->with(['order' => 'DATE_AVIS DESC',
               'clef_oeuvre' => ['POTTER'],
               'flags' => 0,
+              'limitPage' => [1, 30],
               'where' => '(STATUT=1 OR ABON_OU_BIB=1)'])
       ->answers([$this->_avis_bib_moderated, $this->_avis_bib_not_moderated, $this->_avis_abon_moderated]);
 
@@ -978,6 +1004,7 @@ class AvisNoticeAvisFromPreferencesTest extends Storm_Test_ModelTestCase {
       ->whenCalled('findAllBy')
       ->with(['order' => 'DATE_AVIS DESC',
               'flags' => 0,
+              'limitPage' => [1, 30],
               'id_notice' => -1])
       ->answers([$this->_avis_bib_moderated, $this->_avis_bib_not_moderated, $this->_avis_abon_moderated]);
 
-- 
GitLab