From c856dfa2c5786d716fc92a2a93bf9b3d96b92206 Mon Sep 17 00:00:00 2001 From: Henri-Damien LAURENT <hdlaurent@afi-sa.net> Date: Mon, 25 Sep 2023 12:54:18 +0000 Subject: [PATCH] dev#160166 : Placeholders in renderwithwigdetContext tests --- library/Class/Notice/MailRenderer.php | 12 +- library/Class/Url.php | 42 +++++ .../ZendAfi/View/Helper/Accueil/Kiosque.php | 2 +- .../Library/Widget/Carousel/Record/View.php | 2 +- .../controllers/NewsletterControllerTest.php | 154 ++++++++++++++---- ...wsletter_placeholder_content_expected.html | 6 +- ...ewsletter_placeholder_content_expected.txt | 12 +- ...r_placeholder_content_without_articles.txt | 4 +- ...der_content_without_catalogue_expected.txt | 10 +- 9 files changed, 189 insertions(+), 55 deletions(-) diff --git a/library/Class/Notice/MailRenderer.php b/library/Class/Notice/MailRenderer.php index 6b6315d1390..e5a09ed234b 100644 --- a/library/Class/Notice/MailRenderer.php +++ b/library/Class/Notice/MailRenderer.php @@ -56,15 +56,19 @@ class Class_Notice_MailRenderer { $view = (new ZendAfi_Controller_Action_Helper_View)->init(); $widget = (new Class_Systeme_Widget_Widget) - ->loadFromSettings(['type_module' => Class_Systeme_ModulesAccueil_Kiosque::CODE, + ->loadFromSettings(['type_module' => Intonation_Library_Widget_Carousel_Record_Definition::CODE, 'profile_id' => 1, 'preferences' => - ['layout' => 'list', - 'rendering' => 'card-horizontal', + ['layout' => Intonation_Library_Widget_Carousel_Definition::WALL, + 'rendering' => Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_CARD, + 'style_list' => 'vignettes', + 'size' => 6, + 'only_img' => 0, 'aleatoire' => 0, + 'notice_domain' => $newsletter->getIdCatalogue(), 'id_catalogue' => $newsletter->getIdCatalogue(), 'id_panier' => $newsletter->getIdPanier(), - 'display_order' => Class_Systeme_ModulesAccueil_News::SELECTION + 'display_order' => Class_Systeme_ModulesAccueil_News::SELECTION, ] ]); diff --git a/library/Class/Url.php b/library/Class/Url.php index 65669b37404..5db3d398a46 100644 --- a/library/Class/Url.php +++ b/library/Class/Url.php @@ -170,6 +170,48 @@ class Class_Url { } + public static function sanitizeUrlOptions(array $url_options) : array { + $valid_url_keys = ['controller', + 'module', + 'action', + 'id_profil', + 'profile_id', + 'id', + 'titre', + 'boite', + 'rendering', + 'layout', + 'tri', + 'display_order', + 'layout', + 'style_liste', + 'nb_notices', + 'only_img', + 'aleatoire', + 'nb_analyse', + 'op_hauteur_img', + 'op_transition', + 'op_largeur_img', + 'op_hauteur_boite', + 'op_captions', + 'op_autoplay', + 'op_visible', + 'op_speed', + 'op_auto', + 'op_scroll', + 'rss_avis', + 'id_catalogue', + 'id_panier', + 'articles_ids', + 'articles_categories_ids', + 'profil_redirect' ]; + + return array_filter($url_options, function($v) use ($valid_url_keys) { + return in_array($v, $valid_url_keys); + }, ARRAY_FILTER_USE_KEY); + } + + public static function absolute($url_array_or_string = [], $name = null, $reset = false, $encode = true) { return (new static())->absoluteUrl($url_array_or_string, $name, $reset, $encode); } diff --git a/library/ZendAfi/View/Helper/Accueil/Kiosque.php b/library/ZendAfi/View/Helper/Accueil/Kiosque.php index 7e8ac554ea5..91bfdbe6fef 100644 --- a/library/ZendAfi/View/Helper/Accueil/Kiosque.php +++ b/library/ZendAfi/View/Helper/Accueil/Kiosque.php @@ -269,7 +269,7 @@ class ZendAfi_View_Helper_Accueil_Kiosque extends ZendAfi_View_Helper_Accueil_Ba : $tris[0]; unset($url_options['preferences']); - return $this->view->tagAnchor($this->view->url($url_options, null, true), + return $this->view->tagAnchor($this->view->url(Class_Url::sanitizeUrlOptions($url_options), null, true), htmlentities($titre)); } diff --git a/library/templates/Intonation/Library/Widget/Carousel/Record/View.php b/library/templates/Intonation/Library/Widget/Carousel/Record/View.php index 8d4319e9362..f2f2b42f181 100644 --- a/library/templates/Intonation/Library/Widget/Carousel/Record/View.php +++ b/library/templates/Intonation/Library/Widget/Carousel/Record/View.php @@ -89,7 +89,7 @@ class Intonation_Library_Widget_Carousel_Record_View $params['tri'] = $params['order']; $criteres = (new Class_CriteresRecherche)->setParams($params); - $result = (new Class_MoteurRecherche)->lancerRecherche($criteres); + $result = Class_MoteurRecherche::getInstance()->lancerRecherche($criteres); return Class_Notice::findAllByIds($result->fetchAllRecordsIds(), $params['limit'], 1); diff --git a/tests/application/modules/admin/controllers/NewsletterControllerTest.php b/tests/application/modules/admin/controllers/NewsletterControllerTest.php index 147fab42c6a..514e241611e 100644 --- a/tests/application/modules/admin/controllers/NewsletterControllerTest.php +++ b/tests/application/modules/admin/controllers/NewsletterControllerTest.php @@ -844,7 +844,7 @@ class Admin_NewsletterControllerSendActionTest ['title', 'Animations'], ['body_text', 'Pour les jeunes Lien pour se désinscrire de cette lettre d\'information : http://localhost'. BASE_URL . '/newsletter/unsubscribe/newsletter/2/user/%user.id%/hash/%hash%'], - ['body_html', 'Pour les jeunes<br/><a href="http://localhost'. BASE_URL . '/newsletter/unsubscribe/newsletter/2/user/%user.id%/hash/%hash%">Je ne veux plus recevoir cette lettre d\'information</a>'], + ['body_html', 'Pour les jeunes<br/><a href="http://localhost'. BASE_URL . '/newsletter/unsubscribe/newsletter/2/user/%user.id%/hash/%hash%">'], ['sender', 'bokehrulez@linuxfr.org'], ['created_on', '2016-07-21 11:21:38'] ]; @@ -856,7 +856,7 @@ Lien pour se désinscrire de cette lettre d\'information : http://localhost'. BA * @dataProvider dispatchDatas */ public function dispatchDataShouldBeCorrect($name, $expected) { - $this->assertEquals($expected, $this->_dispatch->$name); + $this->assertContains($expected, $this->_dispatch->$name); } @@ -950,6 +950,9 @@ abstract class Admin_NewsletterControllerPreviewActionTestCase $this->fixture(Class_Notice::class, ['id' => 42, + 'type_doc' => Class_TypeDoc::LOGICIEL, + 'clef_alpha' => 'MARTINEALAPLAGE', + 'facettes' => 'T5 Q1', 'titre_principal' => 'Martine à la plage']); $this->fixture(Class_Catalogue::class, @@ -1011,12 +1014,39 @@ abstract class Admin_NewsletterControllerPreviewActionTestCase + abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase extends Admin_NewsletterControllerPreviewActionTestCase{ protected Class_Newsletter $_newsletter; + protected string $_file_path = ''; public function setUp() { parent::setUp(); + $this->_buildTemplateProfil(['id' => 1]); + + /* + // This Should have been enough to get Martine for widget + // But there is a Zend_Registry::get('sql') in MoteurRecherche_Result->fetchFromCache + Class_AdminVar::set('CACHE_ACTIF', 1); + Storm_Cache::beVolatile(); + + $this->fixture(Class_NoticeDomain::class, + ['id' => 480, + 'domain_id' => 1, + 'record_alpha_key' => 'MARTINEALAPLAGE' + ]); + */ + + // This is required to make Records Widget Contains Martine + $search_result = + $this->mock() + ->whenCalled('fetchAllRecordsIds') + ->answers([42]); + + Class_MoteurRecherche::setInstance($this->mock() + ->whenCalled('lancerRecherche') + ->answers($search_result)); + $this->_newsletter = Class_Newsletter::find(3); $this->_newsletter ->setContenu("Top\n[newsletter_records]\nMiddle\n[newsletter_articles]\nfooter"); @@ -1027,6 +1057,13 @@ abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase exten } + public function tearDown(){ + Class_MoteurRecherche::setInstance(null); + + parent::tearDown(); + } + + protected function _customizeNewsletter(Class_Newsletter $newsletter){ } @@ -1041,104 +1078,155 @@ abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase exten public function placeholderNewsletterArticlesShouldHaveBeenRemoved() { $this->assertNotXPathContentContains('//body', '[newsletter_articles]'); } + + + /** @test */ + public function contentShouldBeAsExpected() { + $this->assertContains( str_replace('ROOT_URL', BASE_URL, file_get_contents($this->_file_path)), + $this->_response->getBody()); + } } +class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersAsTextTest + extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { + + protected string $_file_path =__DIR__.'/newsletter_placeholder_content_expected.txt'; +} + + + -class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersTest +class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersAsHtmlTest extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { - protected function _expectedText() { - return file_get_contents(__DIR__.'/newsletter_placeholder_content_expected.txt'); - } + protected string $_file_path =__DIR__.'/newsletter_placeholder_content_expected.html'; +} - protected function _expectedHtml() { - return file_get_contents(__DIR__.'/newsletter_placeholder_content_expected.html'); - } - /** @test */ - public function contentTextShouldBeAsExpected() { - $this->assertContains( $this->_expectedText(), $this->_response->getBody()); +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersWithoutCatalogueTest + extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { + + protected string $_file_path = __DIR__.'/newsletter_placeholder_content_without_catalogue_expected.txt'; + + protected function _customizeNewsletter(Class_Newsletter $newsletter) { + $newsletter + ->setIdCatalogue(0); } +} - /** @test */ - public function contentHtmlShouldBeAsExpected() { - $this->assertContains( $this->_expectedHtml(), $this->_response->getBody()); + + + +class Admin_NewsletterControllerPreviewActionWithPlaceholdersWithoutArticlesTest + extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { + + protected string $_file_path = __DIR__.'/newsletter_placeholder_content_without_articles.txt'; + + protected function _customizeNewsletter(Class_Newsletter $newsletter) { + $newsletter + ->setArticlesIds(0) + ->setArticlesCategoriesIds(0); } } -class Admin_NewsletterControllerPreviewActionWithPlaceHoldersWithoutCatalogueTest + +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetTest extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { protected function _customizeNewsletter(Class_Newsletter $newsletter) { $newsletter - ->setIdCatalogue(0); + ->setRenderWithWidget(1); } - protected function _expectedText() { - return file_get_contents(__DIR__.'/newsletter_placeholder_content_without_catalogue_expected.txt'); + /** @test */ + public function pageShouldContainsBoiteNoticeWithTitleMartineALaPlage() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="masonry-brick"]//div[@class="card"]//span[@class="200a"]', 'Martine à la plage'); } /** @test */ - public function pageShouldContainsExpectedText() { - $this->assertContains($this->_expectedText(), $this->_response->getBody()); + public function pageShouldContainsBoiteArticleWithTitleExpected() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="list-group-item"]//div[@class="card"]//div[@role="heading"]//a', 'Gilets Jaunes'); } + + + /** + * @group ignore + */ + public function contentShouldBeAsExpected() {} } -class Admin_NewsletterControllerPreviewActionWithPlaceholdersWithoutArticlesTest +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetWithoutArticleSelectionTest extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { protected function _customizeNewsletter(Class_Newsletter $newsletter) { $newsletter + ->setRenderWithWidget(1) ->setArticlesIds(0) ->setArticlesCategoriesIds(0); } - protected function _expectedText() { - return file_get_contents(__DIR__.'/newsletter_placeholder_content_without_articles.txt'); + /** @test */ + public function pageShouldContainsBoiteNoticeWithTitleMartineALaPlage() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="masonry-brick"]//div[@class="card"]//span[@class="200a"]', 'Martine à la plage'); } /** @test */ - public function pageShouldContainsExpectedText() { - $this->assertContains($this->_expectedText(), $this->_response->getBody()); + public function pageShouldNotRenderBoiteArticle() { + $this->assertContains("Middle\n\nfooter<br/>", $this->_response->getBody()); } + + + /** + * @group ignore + */ + public function contentShouldBeAsExpected() {} } -class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetTest +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetWithoutNoticeSelectionTest extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { protected function _customizeNewsletter(Class_Newsletter $newsletter) { $newsletter - ->setRenderWithWidget(1); + ->setRenderWithWidget(1) + ->setIdCatalogue(0) + ->setIdPanier(0); } - protected function _expectedText() { - return file_get_contents(__DIR__.'/newsletter_placeholder_content_without_articles.txt'); + /** @test */ + public function pageShouldContainsNotRenderBoiteNotice() { + $this->assertContains("Top\n\nMiddle\n", $this->_response->getBody()); } /** @test */ - public function pageShouldContainsExpectedText() { - $this->assertContains($this->_expectedText(), $this->_response->getBody()); + public function pageShouldContainsBoiteArticleWithTitleExpected() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="list-group-item"]//div[@class="card"]//div[@role="heading"]//a', 'Gilets Jaunes'); } + + + /** + * @group ignore + */ + public function contentShouldBeAsExpected() {} } @@ -1203,7 +1291,7 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionTest /** @test */ public function noticeMartineALaPlageUrlShouldBeRechercheViewNotice42() { - $this->assertXPath('//a[contains(@href,"/recherche/viewnotice/clef//id/42")]'); + $this->assertXPath('//a[contains(@href,"/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42")]'); } diff --git a/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.html b/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.html index 0bd53c7a1b5..32c2cd7b53d 100644 --- a/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.html +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.html @@ -1,6 +1,6 @@ <div> Top -<div style="padding:5px"><a href="http://localhost/html/recherche/viewnotice/clef//id/42">Martine à la plage</a><div></div><div style="clear:both"></div></div> +<div style="padding:5px"><a href="http://localhostROOT_URL/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42">Martine à la plage</a><div></div><div style="clear:both"></div></div> Middle -<div style="padding:5px"><h1>Le Roi des cons</h1><div>Il est beau, il est fier sur son throne.</div><div style="clear:both"></div></div><div style="padding:5px"><h1>70 millions …</h1><div>Ils sont 70 millions prêts à prendre sa place.</div><div style="clear:both"></div></div><div style="padding:5px"><h1>Gilets Jaunes</h1><div><a href="http://localhost/html/viewarticle/gilets-jaunes"> La révolution a commencé.<img src='http://localhost/html/userfiles/jaunes.gif' /> . <img SRC="http://localhost/html/userfiles/gilets.gif" /></a><a href="http://lienexterne/maquereau"><img src='http://imageexterne/maquereau.gif' /></a></div><div style="clear:both"></div></div><div style="padding:5px"><h1>L'arnaque</h1><div>La révolution a oublié de décapiter la misère et l'exploitation.</div><div style="clear:both"></div></div> -footer<br/><a href="http://localhost/html/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b">Je ne veux plus recevoir cette lettre d'information</a></div> +<div style="padding:5px"><h1>Le Roi des cons</h1><div>Il est beau, il est fier sur son throne.</div><div style="clear:both"></div></div><div style="padding:5px"><h1>70 millions …</h1><div>Ils sont 70 millions prêts à prendre sa place.</div><div style="clear:both"></div></div><div style="padding:5px"><h1>Gilets Jaunes</h1><div><a href="http://localhostROOT_URL/viewarticle/gilets-jaunes"> La révolution a commencé.<img src='http://localhostROOT_URL/userfiles/jaunes.gif' /> . <img SRC="http://localhostROOT_URL/userfiles/gilets.gif" /></a><a href="http://lienexterne/maquereau"><img src='http://imageexterne/maquereau.gif' /></a></div><div style="clear:both"></div></div><div style="padding:5px"><h1>L'arnaque</h1><div>La révolution a oublié de décapiter la misère et l'exploitation.</div><div style="clear:both"></div></div> +footer<br/><a href="http://localhostROOT_URL/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b"> \ No newline at end of file diff --git a/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt b/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt index acd2da2bb53..4ad81810d03 100644 --- a/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt @@ -2,17 +2,17 @@ Top<br /> - Martine à la plage<br /> <br /> -Lien: http://localhost/html/recherche/viewnotice/clef//id/42<br /> +Lien: http://localhostROOT_URL/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42<br /> <br /> <br /> Middle<br /> -- Le Roi des consIl est beau, il est fier sur son throne.Lien: http://localhost/html/cms/viewarticle/id/36<br /> +- Le Roi des consIl est beau, il est fier sur son throne.Lien: http://localhostROOT_URL/cms/viewarticle/id/36<br /> <br /> -- 70 millions …Ils sont 70 millions prêts à prendre sa place.Lien: http://localhost/html/cms/viewarticle/id/35<br /> +- 70 millions …Ils sont 70 millions prêts à prendre sa place.Lien: http://localhostROOT_URL/cms/viewarticle/id/35<br /> <br /> -- Gilets Jaunes La révolution a commencé. . Lien: http://localhost/html/cms/viewarticle/id/13<br /> +- Gilets Jaunes La révolution a commencé. . Lien: http://localhostROOT_URL/cms/viewarticle/id/13<br /> <br /> -- L'arnaqueLa révolution a oublié de décapiter la misère et l'exploitation.Lien: http://localhost/html/cms/viewarticle/id/12<br /> +- L'arnaqueLa révolution a oublié de décapiter la misère et l'exploitation.Lien: http://localhostROOT_URL/cms/viewarticle/id/12<br /> <br /> footer<br /> -Lien pour se désinscrire de cette lettre d'information : http://localhost/html/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> +Lien pour se désinscrire de cette lettre d'information : http://localhostROOT_URL/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> diff --git a/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_articles.txt b/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_articles.txt index 72e6599ac01..b569f3acd68 100644 --- a/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_articles.txt +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_articles.txt @@ -2,10 +2,10 @@ Top<br /> - Martine à la plage<br /> <br /> -Lien: http://localhost/html/recherche/viewnotice/clef//id/42<br /> +Lien: http://localhostROOT_URL/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42<br /> <br /> <br /> Middle<br /> <br /> footer<br /> -Lien pour se désinscrire de cette lettre d'information : http://localhost/html/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> +Lien pour se désinscrire de cette lettre d'information : http://localhostROOT_URL/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> diff --git a/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_catalogue_expected.txt b/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_catalogue_expected.txt index 35888f58a36..5fa3a6f29f5 100644 --- a/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_catalogue_expected.txt +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_without_catalogue_expected.txt @@ -2,13 +2,13 @@ Top<br /> <br /> Middle<br /> -- Le Roi des consIl est beau, il est fier sur son throne.Lien: http://localhost/html/cms/viewarticle/id/36<br /> +- Le Roi des consIl est beau, il est fier sur son throne.Lien: http://localhostROOT_URL/cms/viewarticle/id/36<br /> <br /> -- 70 millions …Ils sont 70 millions prêts à prendre sa place.Lien: http://localhost/html/cms/viewarticle/id/35<br /> +- 70 millions …Ils sont 70 millions prêts à prendre sa place.Lien: http://localhostROOT_URL/cms/viewarticle/id/35<br /> <br /> -- Gilets Jaunes La révolution a commencé. . Lien: http://localhost/html/cms/viewarticle/id/13<br /> +- Gilets Jaunes La révolution a commencé. . Lien: http://localhostROOT_URL/cms/viewarticle/id/13<br /> <br /> -- L'arnaqueLa révolution a oublié de décapiter la misère et l'exploitation.Lien: http://localhost/html/cms/viewarticle/id/12<br /> +- L'arnaqueLa révolution a oublié de décapiter la misère et l'exploitation.Lien: http://localhostROOT_URL/cms/viewarticle/id/12<br /> <br /> footer<br /> -Lien pour se désinscrire de cette lettre d'information : http://localhost/html/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> +Lien pour se désinscrire de cette lettre d'information : http://localhostROOT_URL/newsletter/unsubscribe/newsletter/3/user//hash/6dd28e9b</p> -- GitLab