From 85d5ce7724f780c97cc766d373759309cdcbb67b 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 | 103 ++++++++++++++++-- ...wsletter_placeholder_content_expected.html | 4 +- ...ewsletter_placeholder_content_expected.txt | 2 +- ...etter_placeholder_content_with_widget.html | 3 + ...r_placeholder_content_without_articles.txt | 2 +- 9 files changed, 155 insertions(+), 17 deletions(-) create mode 100644 tests/application/modules/admin/controllers/newsletter_placeholder_content_with_widget.html diff --git a/library/Class/Notice/MailRenderer.php b/library/Class/Notice/MailRenderer.php index 6b6315d1390..42efe0f3d04 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::LISTING, + 'rendering' => Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_CARD, + 'style_list' => 'vignettes', + 'size' => 20, + '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..d2ea84bc55c 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, @@ -1017,6 +1020,31 @@ abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase exten 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 +1055,13 @@ abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase exten } + public function tearDown(){ + Class_MoteurRecherche::setInstance(null); + + parent::tearDown(); + } + + protected function _customizeNewsletter(Class_Newsletter $newsletter){ } @@ -1074,6 +1109,7 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHolder + class Admin_NewsletterControllerPreviewActionWithPlaceHoldersWithoutCatalogueTest extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { @@ -1130,14 +1166,67 @@ class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetTest } - 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="list-group-item"]//div[@class="card"]//div[@role="heading"]//a', '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'); + } +} + + + + +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetWithoutArticleSelectionTest + extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { + + protected function _customizeNewsletter(Class_Newsletter $newsletter) { + $newsletter + ->setRenderWithWidget(1) + ->setArticlesIds(0) + ->setArticlesCategoriesIds(0); + } + + + /** @test */ + public function pageShouldContainsBoiteNoticeWithTitleMartineALaPlage() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="list-group-item"]//div[@class="card"]//div[@role="heading"]//a', 'Martine à la plage'); + } + + + /** @test */ + public function pageShouldNotRenderBoiteArticle() { + $this->assertContains("Middle\n\nfooter<br/>", $this->_response->getBody()); + } +} + + + + +class Admin_NewsletterControllerPreviewActionWithPlaceHoldersAndRenderWidgetWithoutNoticeSelectionTest + extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase { + + protected function _customizeNewsletter(Class_Newsletter $newsletter) { + $newsletter + ->setRenderWithWidget(1) + ->setIdCatalogue(0) + ->setIdPanier(0); + } + + + /** @test */ + public function pageShouldContainsNotRenderBoiteNotice() { + $this->assertContains("Top\n\nMiddle\n", $this->_response->getBody()); + } + + + /** @test */ + public function pageShouldContainsBoiteArticleWithTitleExpected() { + $this->assertXPathContentContains('//div[@class="widget-body"]//div[@class="list-group-item"]//div[@class="card"]//div[@role="heading"]//a', 'Gilets Jaunes'); } } @@ -1203,7 +1292,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..196f83b1c51 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://localhost/html/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> +footer<br/><a href="http://localhost/html/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..1158540a389 100644 --- a/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_expected.txt @@ -2,7 +2,7 @@ Top<br /> - Martine à la plage<br /> <br /> -Lien: http://localhost/html/recherche/viewnotice/clef//id/42<br /> +Lien: http://localhost/html/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42<br /> <br /> <br /> Middle<br /> diff --git a/tests/application/modules/admin/controllers/newsletter_placeholder_content_with_widget.html b/tests/application/modules/admin/controllers/newsletter_placeholder_content_with_widget.html new file mode 100644 index 00000000000..791a22fb326 --- /dev/null +++ b/tests/application/modules/admin/controllers/newsletter_placeholder_content_with_widget.html @@ -0,0 +1,3 @@ +Middle +<div id="boite_no_651171539e078" class="boite news widget col"><div class="widget-header" role="heading" aria-level="2">Boite d'articles</div><div class="widget-body"><div class="list-group"><div class="list-group-item"><div class="card"><div class=" container-fluid"><div class=" row no-gutters"><div class="cardify_horizontal_img"></div><div class="cardify_horizontal_content"><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_Article"><a href="http://localhost/html/cms/articleview/id/36" data-popup="">Le Roi des cons</a></div><div title="Résumé de l'article "Le Roi des cons"" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_Article"><span class="badge_tag badge_article_category"><span class="badge_text">La France</span></span></div><p class="model_description_Class_Article">Il est beau, il est fier sur son throne.</p></div></div><div class="cardify_horizontal_actions"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action"><a href="http://localhost/html/cms/articleview/id/36" class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lire la suite <span class="sr-only">Lire l'article: Le Roi des cons</span></div></a></div><div class="card_action 1"><div id="dropdown_65117153a6f40" class="dropdown dropleft dropup"><button class=" more_action btn" id="dropdown_button_65117153a6f40" data-toggle="dropdown" aria-haspopup="true"><i title="Voir plus d'actions pour Le Roi des cons" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Plus <span class="sr-only">Voir plus d'actions pour Le Roi des cons</span></span></button><div class="dropdown-menu " aria-labelledby="dropdown_button_65117153a6f40"><div class="py-0 px-3"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action share_record_on_facebook"><a href="/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F36%253Fid_profil%253D1/titre/Le+Roi+des+cons/message/article/img_url/" title="Partager sur facebook" class="card-link share_record_on_facebook" onclick="$.getScript('/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F36%253Fid_profil%253D1/titre/Le+Roi+des+cons/message/article/img_url/');return false;"><i class="fab fa-facebook-f utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">facebook <span class="sr-only">Partager Le Roi des cons </span></div></a></div><div class="card_action share_record_on_twitter"><a href="/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F36%253Fid_profil%253D1/titre/Le+Roi+des+cons/message/article/img_url/" title="Partager sur twitter" class="card-link share_record_on_twitter" onclick="$.getScript('/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F36%253Fid_profil%253D1/titre/Le+Roi+des+cons/message/article/img_url/');return false;"><i class="fab fa-twitter utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">twitter <span class="sr-only">Partager Le Roi des cons </span></div></a></div><div class="card_action view_permalink permalink py-1 my-1"><a title="Afficher le lien permanent du document Le Roi des cons" class="card-link view_permalink permalink py-1 my-1" data-url="http://localhost/html/cms/articleview/id/36?id_profil=1" data-helptext="Copiez le lien suivant" href="http://localhost/html/cms/articleview/id/36?id_profil=1" onclick="popupPermalink(this);return false;"><i class="fas fa-link utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lien … <span class="sr-only"> permanent pour Le Roi des cons</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/edit/id/36" title="Modifier l'article Le Roi des cons" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier … <span class="sr-only">l'article Le Roi des cons</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/version/id/36" title="Historique des modifications de l'article Le Roi des cons" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-history library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Historique … <span class="sr-only">des modifications de l'article Le Roi des cons</span></div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="list-group-item"><div class="card"><div class=" container-fluid"><div class=" row no-gutters"><div class="cardify_horizontal_img"></div><div class="cardify_horizontal_content"><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_Article"><a href="http://localhost/html/cms/articleview/id/35" data-popup="">70 millions …</a></div><div title="Résumé de l'article "70 millions …"" class="card-text"><div class="badge-group badge_group badge_group_Intonation_Library_View_Wrapper_Article"><span class="badge_tag badge_article_category"><span class="badge_text">La France</span></span></div><p class="model_description_Class_Article">Ils sont 70 millions prêts à prendre sa place.</p></div></div><div class="cardify_horizontal_actions"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action"><a href="http://localhost/html/cms/articleview/id/35" class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lire la suite <span class="sr-only">Lire l'article: 70 millions …</span></div></a></div><div class="card_action 1"><div id="dropdown_65117153a8dad" class="dropdown dropleft dropup"><button class=" more_action btn" id="dropdown_button_65117153a8dad" data-toggle="dropdown" aria-haspopup="true"><i title="Voir plus d'actions pour 70 millions …" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Plus <span class="sr-only">Voir plus d'actions pour 70 millions …</span></span></button><div class="dropdown-menu " aria-labelledby="dropdown_button_65117153a8dad"><div class="py-0 px-3"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action share_record_on_facebook"><a href="/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F35%253Fid_profil%253D1/titre/70+millions+%E2%80%A6/message/article/img_url/" title="Partager sur facebook" class="card-link share_record_on_facebook" onclick="$.getScript('/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F35%253Fid_profil%253D1/titre/70+millions+%E2%80%A6/message/article/img_url/');return false;"><i class="fab fa-facebook-f utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">facebook <span class="sr-only">Partager 70 millions … </span></div></a></div><div class="card_action share_record_on_twitter"><a href="/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F35%253Fid_profil%253D1/titre/70+millions+%E2%80%A6/message/article/img_url/" title="Partager sur twitter" class="card-link share_record_on_twitter" onclick="$.getScript('/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F35%253Fid_profil%253D1/titre/70+millions+%E2%80%A6/message/article/img_url/');return false;"><i class="fab fa-twitter utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">twitter <span class="sr-only">Partager 70 millions … </span></div></a></div><div class="card_action view_permalink permalink py-1 my-1"><a title="Afficher le lien permanent du document 70 millions …" class="card-link view_permalink permalink py-1 my-1" data-url="http://localhost/html/cms/articleview/id/35?id_profil=1" data-helptext="Copiez le lien suivant" href="http://localhost/html/cms/articleview/id/35?id_profil=1" onclick="popupPermalink(this);return false;"><i class="fas fa-link utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lien … <span class="sr-only"> permanent pour 70 millions …</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/edit/id/35" title="Modifier l'article 70 millions …" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier … <span class="sr-only">l'article 70 millions …</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/version/id/35" title="Historique des modifications de l'article 70 millions …" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-history library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Historique … <span class="sr-only">des modifications de l'article 70 millions …</span></div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="list-group-item"><div class="card"><div class=" container-fluid"><div class=" row no-gutters"><div class="cardify_horizontal_img"><a href="http://localhost/html/cms/articleview/id/13" class="card-link"><div class="img-thumbnail" aria-hidden="true"><img src="http://localhost/html/userfiles/jaunes.gif" alt="Couverture de Gilets Jaunes"></div></a></div><div class="cardify_horizontal_content"><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_Article"><a href="http://localhost/html/cms/articleview/id/13" data-popup="">Gilets Jaunes</a></div><div title="Résumé de l'article "Gilets Jaunes"" class="card-text"><p class="model_description_Class_Article"> La révolution a commencé. . </p></div></div><div class="cardify_horizontal_actions"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action"><a href="http://localhost/html/cms/articleview/id/13" class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lire la suite <span class="sr-only">Lire l'article: Gilets Jaunes</span></div></a></div><div class="card_action 1"><div id="dropdown_65117153aac47" class="dropdown dropleft dropup"><button class=" more_action btn" id="dropdown_button_65117153aac47" data-toggle="dropdown" aria-haspopup="true"><i title="Voir plus d'actions pour Gilets Jaunes" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Plus <span class="sr-only">Voir plus d'actions pour Gilets Jaunes</span></span></button><div class="dropdown-menu " aria-labelledby="dropdown_button_65117153aac47"><div class="py-0 px-3"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action share_record_on_facebook"><a href="/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F13%253Fid_profil%253D1/titre/Gilets+Jaunes/message/article/img_url/%252Fhtml%252Fuserfiles%252Fjaunes.gif" title="Partager sur facebook" class="card-link share_record_on_facebook" onclick="$.getScript('/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F13%253Fid_profil%253D1/titre/Gilets+Jaunes/message/article/img_url/%252Fhtml%252Fuserfiles%252Fjaunes.gif');return false;"><i class="fab fa-facebook-f utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">facebook <span class="sr-only">Partager Gilets Jaunes </span></div></a></div><div class="card_action share_record_on_twitter"><a href="/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F13%253Fid_profil%253D1/titre/Gilets+Jaunes/message/article/img_url/%252Fhtml%252Fuserfiles%252Fjaunes.gif" title="Partager sur twitter" class="card-link share_record_on_twitter" onclick="$.getScript('/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F13%253Fid_profil%253D1/titre/Gilets+Jaunes/message/article/img_url/%252Fhtml%252Fuserfiles%252Fjaunes.gif');return false;"><i class="fab fa-twitter utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">twitter <span class="sr-only">Partager Gilets Jaunes </span></div></a></div><div class="card_action view_permalink permalink py-1 my-1"><a title="Afficher le lien permanent du document Gilets Jaunes" class="card-link view_permalink permalink py-1 my-1" data-url="http://localhost/html/cms/articleview/id/13?id_profil=1" data-helptext="Copiez le lien suivant" href="http://localhost/html/cms/articleview/id/13?id_profil=1" onclick="popupPermalink(this);return false;"><i class="fas fa-link utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lien … <span class="sr-only"> permanent pour Gilets Jaunes</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/edit/id/13" title="Modifier l'article Gilets Jaunes" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier … <span class="sr-only">l'article Gilets Jaunes</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/version/id/13" title="Historique des modifications de l'article Gilets Jaunes" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-history library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Historique … <span class="sr-only">des modifications de l'article Gilets Jaunes</span></div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="list-group-item"><div class="card"><div class=" container-fluid"><div class=" row no-gutters"><div class="cardify_horizontal_img"></div><div class="cardify_horizontal_content"><div role="heading" aria-level="3" class="card-title card_title card_title_Intonation_Library_View_Wrapper_Article"><a href="http://localhost/html/cms/articleview/id/12" data-popup="">L'arnaque</a></div><div title="Résumé de l'article "L'arnaque"" class="card-text"><p class="model_description_Class_Article">La révolution a oublié de décapiter la misère et l'exploitation.</p></div></div><div class="cardify_horizontal_actions"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action"><a href="http://localhost/html/cms/articleview/id/12" class="card-link"><i class="far fa-arrow-alt-circle-right library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lire la suite <span class="sr-only">Lire l'article: L'arnaque</span></div></a></div><div class="card_action 1"><div id="dropdown_65117153ac6f0" class="dropdown dropleft dropup"><button class=" more_action btn" id="dropdown_button_65117153ac6f0" data-toggle="dropdown" aria-haspopup="true"><i title="Voir plus d'actions pour L'arnaque" class="fas fa-ellipsis-h utils" aria-hidden="true"></i><span class="d-none d-md-inline text-left button_text">Plus <span class="sr-only">Voir plus d'actions pour L'arnaque</span></span></button><div class="dropdown-menu " aria-labelledby="dropdown_button_65117153ac6f0"><div class="py-0 px-3"><div class=" container-fluid"><div class=" row no-gutters"><div class="card_action share_record_on_facebook"><a href="/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F12%253Fid_profil%253D1/titre/L%27arnaque/message/article/img_url/" title="Partager sur facebook" class="card-link share_record_on_facebook" onclick="$.getScript('/social-network/share/on/facebook/url/%252Fcms%252Farticleview%252Fid%252F12%253Fid_profil%253D1/titre/L%27arnaque/message/article/img_url/');return false;"><i class="fab fa-facebook-f utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">facebook <span class="sr-only">Partager L'arnaque </span></div></a></div><div class="card_action share_record_on_twitter"><a href="/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F12%253Fid_profil%253D1/titre/L%27arnaque/message/article/img_url/" title="Partager sur twitter" class="card-link share_record_on_twitter" onclick="$.getScript('/social-network/share/on/twitter/url/%252Fcms%252Farticleview%252Fid%252F12%253Fid_profil%253D1/titre/L%27arnaque/message/article/img_url/');return false;"><i class="fab fa-twitter utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">twitter <span class="sr-only">Partager L'arnaque </span></div></a></div><div class="card_action view_permalink permalink py-1 my-1"><a title="Afficher le lien permanent du document L'arnaque" class="card-link view_permalink permalink py-1 my-1" data-url="http://localhost/html/cms/articleview/id/12?id_profil=1" data-helptext="Copiez le lien suivant" href="http://localhost/html/cms/articleview/id/12?id_profil=1" onclick="popupPermalink(this);return false;"><i class="fas fa-link utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Lien … <span class="sr-only"> permanent pour L'arnaque</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/edit/id/12" title="Modifier l'article L'arnaque" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-edit utils" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Modifier … <span class="sr-only">l'article L'arnaque</span></div></a></div><div class="card_action menu_admin_front_anchor"><a href="/admin/cms/version/id/12" title="Historique des modifications de l'article L'arnaque" data-popup="1" class="card-link menu_admin_front_anchor"><i class="fas fa-history library" aria-hidden="true"></i><div class="d-none d-md-inline text-left button_text">Historique … <span class="sr-only">des modifications de l'article L'arnaque</span></div></a></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></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> 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..9cf951a3946 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,7 +2,7 @@ Top<br /> - Martine à la plage<br /> <br /> -Lien: http://localhost/html/recherche/viewnotice/clef//id/42<br /> +Lien: http://localhost/html/recherche/viewnotice/clef/MARTINEALAPLAGE/id/42<br /> <br /> <br /> Middle<br /> -- GitLab