Skip to content
Snippets Groups Projects
CmsControllerTest.php 47.1 KiB
Newer Older
llaffont's avatar
llaffont committed
<?php
/**
 * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
 *
Laurent's avatar
Laurent committed
 * BOKEH is free software; you can redistribute it and/or modify
llaffont's avatar
llaffont committed
 * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
 * the Free Software Foundation.
 *
 * There are special exceptions to the terms and conditions of the AGPL as it
 * is applied to this software (see README file).
 *
Laurent's avatar
Laurent committed
 * BOKEH is distributed in the hope that it will be useful,
llaffont's avatar
llaffont committed
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
 *
 * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
Laurent's avatar
Laurent committed
 * along with BOKEH; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
require_once 'application/modules/opac/controllers/CmsController.php';
llaffont's avatar
llaffont committed
class CmsControllerRssNoProfileTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Profil')
      ->whenCalled('find')
      ->answers(null);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('cms/rss');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function titleShouldBeFluxIndisponible() {
    $this->assertXPathContentContains('//channel/title', 'Flux indisponible');
  }
class CmsControllerdCalendarRssWithProfileAndArticleTest
llaffont's avatar
llaffont committed
extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  /**
   * @param Class_Profil $profil
   */
  protected function _initProfilHook($profil) {
    $profil->setCfgAccueil(
      array(
        'modules' => array(
          '1' => array(
            'division'        => '1',
            'type_module'     => 'NEWS',
            'preferences'     => array(
              'titre'         => 'Les dernières nouvelles',
              'rss_avis'      => true,
              'type_aff'      => 2,
              'display_order' => 'Random',
              'nb_aff'        => 2,
              'nb_analyse'    => 5
              )
            )
          ),
        'options' =>  array()
        )
      );
  }

  public function setUp() {
    parent::setUp();

    CmsController::setTimeSource(new TimeSourceForTest('2014-12-01 14:00:00'));
    Class_Calendar::setTimeSource(new TimeSourceForTest('2014-12-01 14:00:00'));
    $fete =$this->fixture('Class_Article',
                   ['id' => 1,
                    'titre' => 'La fête de la banane',
                    'contenu' => 'Une fête qui glisse !<img src="'.BASE_URL.'/image/banane.jpg"/>'])
                ->setDateMaj('2011-11-11 11:11:11')
                ->setEventsDebut('2009-09-09 09:09:09');

    $fete_frite=$this->fixture('Class_Article',
                   ['id' => 2,
                    'titre' => 'La fête de la frite',
                    'contenu' => 'Une fête qui sent !',
                    'debut' => '2012-12-12 12:12:12',
                    'events_debut' => '2012-12-13',
                    'all_day' => true]);

    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->with(['titre' => 'Les dernières nouvelles',
              'type_aff' => 2,
              'id_categorie' => '',
              'id_items' => '',
              'nb_aff' => 2,
              'nb_analyse' => 5,
              'display_order' => 'EventDebut',
              'display_titles_only' => false,
              'rss_avis' => 1,
              'op_largeur_img' => 200,
              'op_hauteur_boite' => 400,
              'boite' => null,
              'id_module' => 1,
              'event_end_after' => "2014-12-01",
              'events_only' => true,
              'published' => true])
      ->answers([$fete,
                 $fete_frite ])

      ->beStrict();

    $this->dispatch('cms/calendarrss?id_profil=2&id_module=1', true);

  }



  /** @test */
  public function imgShouldBeDisplayWithAbsoluteUrl() {
    $this->assertXPathContentContains('//description',
                                      '<img src="http://localhost'.BASE_URL.'/image/banane.jpg"');
  }


  /** @test */
  public function channelTitleShouldBeLesDernieresNouvelles() {
    $this->assertXpathContentContains('//channel/title',
                                      'Les dernières nouvelles');
  }


  /** @test */
  public function channelDescriptionShouldBeAgendaColonLesDerniereNouvelles() {
    $this->assertXpathContentContains('//channel/description',
                                      'Agenda: Les dernières nouvelles');
  }


  /** @test */
  public function itemsCountShouldBeTwo() {
    $this->assertXpathCount('//channel/item', 2);
  }


  /** @test */
  public function firstItemDateShouldBe09_09_2009() {
    $this->assertXpathContentContains('//channel/item[1]/pubDate',
                                      '09 Sep 2009',
                                      $this->_response->getBody());
  }


  /** @test */
  public function secondItemDateShouldBe12_12_2012() {
    $this->assertXpathContentContains('//channel/item[2]/pubDate',
                                      '12 Dec 2012',
                                      $this->_response->getBody());
  }


  /** @test */
  public function secondItemContentShouldContainsLe13Decembre() {
    $this->assertXPathContentContains('//channel/item[2]/description',
                                      'jeudi 13 décembre',
                                      $this->_response->getBody());

  }
llaffont's avatar
llaffont committed
class CmsControllerRssWithProfileAndArticle extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  /**
   * @param Class_Profil $profil
   */
  protected function _initProfilHook($profil) {
    $profil->setCfgAccueil(
      array(
        'modules' => array(
          '1' => array(
            'division'        => '1',
            'type_module'     => 'NEWS',
            'preferences'     => array(
              'titre'         => 'Les dernières nouvelles',
              'rss_avis'      => true,
              'type_aff'      => 2,
              'display_order' => 'Random',
              'nb_aff'        => 2,
              'nb_analyse'    => 5
              )
            )
          ),
        'options' =>  array()
        )
      );

  }

  public function setUp() {
    parent::setUp();

    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->answers(array(
                  Class_Article::getLoader()
                  ->newInstanceWithId(1)
                  ->setTitre('La f&ecirc;te de la banane')
                  ->setContenu('Une f&ecirc;te qui glisse !'),
                  Class_Article::getLoader()
                  ->newInstanceWithId(2)
                  ->setTitre('La fête de la frite')
                  ->setContenu('Une fête qui sent !'),
                  ));

    $this->dispatch('cms/rss?id_profil=2&id_module=1');

  }

  /** @test */
  public function channelTitleShouldBeLesDernieresNouvelles() {
    $this->assertXpathContentContains('//channel/title', 'Les dernières nouvelles');
  }

  /** @test */
  public function feteDeLaBananeTitreShouldBePresent() {
    $this->assertXpathContentContains('//channel/item[1]/title', 'La fête de la banane');
  }

  /** @test */
  public function feteLeLaBananeDescriptionShouldBeQuiGlisse() {
    $this->assertXpathContentContains("//channel/item[1]/description", 'Une fête qui glisse !');
  }

  /** @test */
  public function feteDeLaFriteShouldBePresent() {
    $this->assertXpathContentContains('//channel/item[2]/title', 'La fête de la frite');
  }

  /** @test */
  public function feteLeLaFriteDescriptionShouldBeQuiSent() {
    $this->assertXpathContentContains('//channel/item[2]/description', 'Une fête qui sent !');
  }


  /** @test */
  public function firstLinkShouldContainsCmsArticleViewOne() {
    $this->assertXpathContentContains('//channel/item[1]/link', 'http://localhost/cms/articleview/id/1');
  }


  /** @test */
  public function secondLinkShouldContainsCmsArticleViewTwo() {
    $this->assertXpathContentContains('//channel/item[2]/link', 'http://localhost/cms/articleview/id/2');
  }


abstract class AbstractCmsControllerArticleViewByDateTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
  protected $display_mode = "Title";
  protected $display_order = "EventDebut";

  public function dispatchViewByDate() {
    Class_Profil::getCurrentProfil()
      ->setCfgAccueil(
        ['modules' =>
         ['8' => ['division'  => '0',
                  'type_module' => 'CALENDAR',
                  'preferences' => ['display_mode' => $this->display_mode,
                                    'display_order' => $this->display_order]],
          'options' =>[]]]
        );

    Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '']);

    $articles = [ Class_Article::getLoader()
                  ->newInstanceWithId(1)
                  ->setTitre('La fête de la banane')
                  ->setDateCreation('2011-01-15')
                  ->setContenu('Pas qu\'à moitié {FIN} Une fête qui glisse !')
                  ->setEventsDebut('2011-09-03')
                  ->setEventsFin('2011-10-03')
                  ->setCategorie(
                    Class_ArticleCategorie::getLoader()->newInstanceWithId(1)
                    ->setLibelle('Alimentaire')
                    ->setBib(Class_Bib::getLoader()
                             ->newInstanceWithId(1)
                             ->setLibelle('Bonlieu'))),
                  Class_Article::getLoader()
                  ->newInstanceWithId(9)
                  ->setTitre('La fête de la frite')
                  ->setDateCreation('2011-01-20')
                  ->setContenu('')
                  ->setEventsDebut('2011-09-03')
                  ->setEventsFin('2011-09-03')
                  ->setCategorie(
                    Class_ArticleCategorie::getLoader()->newInstanceWithId(1)
                    ->setLibelle('Alimentaire')
                    )];

    $articles =  Class_Article::getLoader()->sortArticles($articles, $this->display_order);

    $prefs_module_calendar = ['titre' => "Calendrier des animations",
                              'event_date' => '2011-09-03',
                              'id_bib' => null,
                              'id_categorie' => '',
                              'events_only' => true,
                              'published' => false,
                              'display_next_event' => 1,
                              'nb_events' => 3,
                              'display_mode' => $this->display_mode,
                              'display_order' => $this->display_order,
                              'display_cat_select' => false,
                              'display_event_info'=>false,
                              'rss_avis'  => false,
                              'boite' => null
      ];

    if ($this->display_mode == "Summary")
      $prefs_module_calendar['summary_content']="Summary";

    $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->with($prefs_module_calendar)
      ->answers($articles)

      ->whenCalled('getArticlesByPreferences')
      ->with([
               'event_date' => '2011-09-03',
               'events_only' => true,
               'published' => false,
               'id_bib' => null,
               'display_mode' => $this->display_mode,
               'display_order' => $this->display_order
               ])
      ->answers($articles)

      ->whenCalled('getArticlesByPreferences')
      ->answers($articles);


    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
/** @see http://forge.afi-sa.fr/issues/20971 */
class CmsControllerArticleViewByDateOnMonthTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Storm_Model_Loader::defaultToVolatile();
    $this->wrapper = $this->onLoaderOfModel('Class_Article')
                          ->whenCalled('getArticlesByPreferences')
                          ->answers([]);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleviewbydate/id_profil/1/d/2015-02/id_module/5/select_id_categorie/all', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function tearDown() {
    Storm_Model_Loader::defaultToDb();
    parent::tearDown();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function shouldNotAllowUnpublishedArticles() {
    $preferences = $this->wrapper
      ->getFirstAttributeForLastCallOn('getArticlesByPreferences');
    $this->assertNotContains('published', array_keys($preferences));
  }

class CmsControllerArticleViewByDateTest extends AbstractCmsControllerArticleViewByDateTest {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->display_mode='Title';
    $this->dispatchViewByDate();
  }
llaffont's avatar
llaffont committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function feteDeLaBananeTitleShouldBePresent() {
    $this->assertXpathContentContains('//ul//li//a', 'La fête de la banane');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function feteDeLaBananeAnchorShouldLinkToActionViewArticleOne() {
    $this->assertXpathContentContains('//ul//li//a[contains(@href, "cms/articleview/id/1")]',
                                      'La fête de la banane');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function dateForFeteDeLaBananeShouldBePresent() {
    $this->assertXpathContentContains('//ul//li//span', 'Du samedi 03 septembre au lundi 03 octobre');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function feteDeLaFriteShouldBePresent() {
    $this->assertXpathContentContains('//ul//li//a', 'La fête de la frite');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function dateForFeteDeLaFriteShouldBePresent() {
    $this->assertXpathContentContains('//ul//li//span', 'samedi 03 septembre');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function bibliothequeLibelleShouldBePresent() {
    $this->assertXpathContentContains('//h2', 'Bonlieu');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function emptyBibliothequeLibelleShouldBeDisplayedAsPortail() {
    $this->assertXpathContentContains('//h2', 'Portail');
  }
class CmsControllerProfilDivisionTest extends AbstractCmsControllerArticleViewByDateTest {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $cfg_accueil_jeunesse = ['modules' => ['1' => ['division' => '4',
                                                   'type_module' => 'RECH_SIMPLE',
                                                   'preferences' => ['recherche_avancee' => "on",
                                                                     'select_doc' => 'on',
                                                                     'select_annexe' => 'on']],

                                           '10' => ['division' => '3',
                                                   'type_module' => 'NEWS',
                                                   'preferences' => ['titre' => 'Articles']],

                                           '11' => ['division' => '1',
                                                   'type_module' => 'LOGIN',
                                                   'preferences' => ['lien_connexion' => 'Par ici la connexion']],

        ]];
    Class_Profil::getCurrentProfil()->setCfgAccueil($cfg_accueil_jeunesse);
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
  }


  /** @test */
  public function boiteNewsShouldNotBeDisplayed() {
    $this->assertNotXPath("//div[contains(@class, 'colDroite')]//div[@class='boite news']",$this->_response->getBody());

  }

  /** @test */
  public function boiteLoginShouldBeDisplayedAtLeft() {
    $this->assertXPath("//div[contains(@class, 'colGauche')]//div[@id='boite_login']",$this->_response->getBody());
  }


  /** @test */
  public function boiteNewsShouldBeDisplayedIfDivisionThreeVisibleSelected() {
    $this->bootstrap();
    Class_Profil::getCurrentProfil()->setDivisionThreeAlwaysVisible(true);
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
    $this->assertXPath("//div[contains(@class, 'colDroite')]//div[@class='boite news']");
  }

  /** @test */
  public function boiteLoginShouldBeDisplayedAtRightWhenReverseOrder() {
    $this->bootstrap();
    Class_Profil::getCurrentProfil()->setOrdreDivisions(1);
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
    $this->assertXPath("//div[contains(@class, 'colDroite')]//div[@class='boite login']",$this->_response->getBody());

  }


  /** @test */
  public function boiteNewsShouldNotBeDisplayedWhenReverseOrder() {
    $this->bootstrap();
    Class_Profil::getCurrentProfil()->setOrdreDivisions(1);
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
    $this->assertNotXPath("//div[contains(@class, 'colGauche')]//div[@class='boite news']",$this->_response->getBody());
  }


  /** @test */
  public function boiteNewsShouldBeDisplayedWhenReverseOrderAndDivisionThreeVisibleSelected() {
    $this->bootstrap();
    Class_Profil::getCurrentProfil()
      ->setOrdreDivisions(1)
      ->setDivisionThreeAlwaysVisible(true);
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
    $this->assertXPath("//div[contains(@class, 'colGauche')]//div[@class='boite news']",$this->_response->getBody());
  }
class CmsControllerCalendarDisplayOrderTest extends AbstractCmsControllerArticleViewByDateTest {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->display_mode = 'Title';
    $this->display_order = 'DateCreationDesc';
    $this->dispatchViewByDate();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function feteDeLaBananeArticleShouldBeTheFirstArticle() {
    $this->assertXpathContentContains('//div/ul/li/ul/li[1]/span/a','La fête de la frite');
  }
class CmsControllerArticleViewByDateWithOnlyArticlePortailTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->answers([Class_Article::newInstanceWithId(1,
                                          ['titre' => 'La fête de la frite',
                                           'content' => '',
                                           'events_debut' => '2011-09-03',
                                           'events_fin' => '2011-09-03',
                                           'categorie' => Class_ArticleCategorie::newInstanceWithId(1,
                                                                                                    ['libelle' => 'Alimentaire'])])
                  ]);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&id_profil=2&select_id_categorie=all', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function emptyBibliothequeLibelleShouldNotBeDisplayedAsPortail() {
    $this->assertNotXpathContentContains('//h2', 'Portail');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function titreBoiteShouldBeCalendrier() {
    $this->assertXPathContentContains('//div[@class="titre"]', 'Calendrier');
  }
class CmsControllerArticleViewByDateCategorie23AndNoProfilParamTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Profil::getCurrentProfil()
      ->setCfgModules(['cms' => ['articleviewbydate' => ['titre' => 'Agenda de la bib']]]);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->answers(array())
      ->getWrapper();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleviewbydate?d=2011-09-03&id_module=8&select_id_categorie=23', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function byPeferencesParamShouldContainsIdCategorie23() {
    $prefs = $this->_article_loader->getFirstAttributeForLastCallOn('getArticlesByPreferences');
    $this->assertEquals(23, $prefs['id_categorie']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function contenuShouldContainsAucunContenu() {
    $this->assertXPathContentContains('//div', 'Aucun contenu');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function titreBoiteShouldBeAgendaDeLaBib() {
    $this->assertXPathContentContains('//div[@class="titre"]', 'Agenda de la bib');
  }

class CmsControllerArticleViewByDateWitoutEventDateTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    Class_AdminVar::set('WORKFLOW','');
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->answers([Class_Article::newInstanceWithId(1)
                 ->setTitre('Corrige le clic sur le bandeau de la boite calendrier qui affichait les articles non publiés')
                 ->setCategorie(Class_ArticleCategorie::getLoader()->newInstanceWithId(1)
                                ->setLibelle('Bugs')
                                ->setBib(Class_Bib::newInstanceWithId(1)->setLibelle('Annecy')))
                 ]);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleviewbydate/id_module/8/id_profil/2', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleCorrigeCalendirerShouldBePresent() {
    $this->assertXpathContentContains('//ul//li//a', 'Corrige le clic', $this->_response->getBody());
  }
class CmsControllerArticleViewByDateWithRadioSummarySelectedTest extends AbstractCmsControllerArticleViewByDateTest {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->display_mode="Summary";
    Class_AdminVar::newInstanceWithId('ID_READ_SPEAKER', ['valeur' => '1234']);
    $this->dispatchViewByDate();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleSummaryLaFeteDeLaBananeShouldBePresent() {
    $this->assertXpathContentContains('//div[@class="titre"]//h1//a[contains(@href, "/cms/articleview/id/1")]',
                                      'La fête de la banane');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleTextLaFeteDeLaBananeShouldContainsSummary() {
    $this->assertXpathContentContains('//article/div[@class="article_content"]', 'Pas qu\'à moitié');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleTextLaFeteDeLaBananeShouldNotContainsFullArticle() {
    $this->assertNotXpathContentContains('//article', ' Une fête qui glisse !');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function speakStartMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function speakStopMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function headerShouldBePresent() {
    $this->assertXPath('//article/header');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function pContentShouldBePresent() {
    $this->assertXPath('//article/div[@class="article_content"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function fotterShouldBePresent() {
    $this->assertXPath('//article/footer');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function readSpeakerLinkShouldBePresent() {
    $this->assertXPath('//a[@class="readspeaker"][contains(@onclick, "/cms/articleread?id=1")]',
                       $this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function linkLireArticleCompleShouldBePresent() {
    $this->assertXPathContentContains('//a[contains(@href, "/cms/articleview/id/1")]',
                                      "Lire l'article complet");
  }
class CmsControllerArticleViewByDateWithRadioFullArticleSelectedTest extends AbstractCmsControllerArticleViewByDateTest {
Patrick Barroca's avatar
Patrick Barroca committed
  protected $_article_loader;
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->display_mode="FullArticle";
    $this->dispatchViewByDate();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleFullTextResumeLaFeteDeLaBananeShouldContainsLaFeteDeLaBanane() {
    $this->assertXpathContentContains('//h1', 'La fête de la banane');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleFullTextLaFeteDeLaBananeShouldContainsUneFeteQuiGlisse() {
    $this->assertXpathContentContains('//div', 'Une fête qui glisse !');
  }
llaffont's avatar
llaffont committed
abstract class CmsControllerWithFeteDeLaFriteTestCase extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();

    Class_AdminVar::newInstanceWithId('MODO_AVIS_BIBLIO')
      ->setValeur(0);

    Class_AdminVar::newInstanceWithId('MODO_AVIS')
      ->setValeur(0);

    $bonlieu = $this->fixture('Class_Bib', ['id' => 1,
                                 'libelle' => 'Bonlieu']);

    $annecy = $this->fixture('Class_Lieu',
                             ['id' => '4156465',
                              'libelle' => 'Annecy',
                              'adresse' => 'Rue des tomates',
                              'code_postal' => '74000']);

    $alimentaire = $this->fixture ( 'Class_ArticleCategorie', ['id' => 1,
                                                               'libelle' => 'Alimentaire',
                                                               'bib' => $bonlieu ]);

    $avis_mimi = $this->fixture('Class_Avis' , ['id' => 34,
                                               'auteur' => $this->fixture('Class_Users' , ['id'=> 98,
                                                                                           'pseudo' => 'Mimi',
                                                                                           'password' => 'toto',
                                                                            'login' => 'mimi']),
                                               'date_avis' => '2012-02-05',
                                               'note'=>4,
                                               'entete' => "Hmmm",
                                               'avis'=> 'ça a l\'air bon'
                                  ]);

    $avis_mimi->beWrittenByAbonne();


    $avis_florence = $this->fixture('Class_Avis' ,
                                    ['id' => 35,
                                     'auteur' => $this->fixture('Class_Users' ,
                                                                ['id'=> 123,
                                                                 'pseudo' => 'Florence',
                                                                 'password' => 'toto',
                                                                 'login' => 'florence']),
                                     'date_avis' => '2012-02-05',
                                     'note'=>2,
                                     'entete' => "Argg",
                                     'avis'=> 'ça ne me tente pas']);
    $avis_florence->beWrittenByBibliothecaire();


    $avis_anonyme = $this->fixture('Class_Avis' ,
                                   ['id' => 38,
                                    'auteur' => null,
                                    'date_avis' => '2012-02-05',
                                    'note'=>2,
                                    'entete' => "Anonyme",
                                    'avis'=> 'vous ne savez pas qui je suis']);
    $avis_anonyme->beWrittenByBibliothecaire();


    $article= $this->fixture('Class_Article',
                             ['id' =>224,
                              'titre' => 'La fête de la frite',
                              'contenu' => '<div><img src="userfiles/image/foo.jpg" /><p>Une fête appétissante</p></div>',
                              'events_debut' => '2011-09-03 12:00',
                              'events_fin' => '2011-10-05 16:00',
                              'tags' => 'Tout public;Concert',
                              'lieu' => $annecy,
                              'categorie' =>$alimentaire,
                              'avis' => 1,
                              'avis_users' => [$avis_mimi,$avis_florence,$avis_anonyme]]);

    $article_en = $this->fixture('Class_Article',
                                 ['id' => 2241,
                                  'langue' => 'en',
                                  'parent_id' => 224,
                                  'titre' => 'Feast of fried',
                                  'contenu' => '<div>an appetizing feast</div>']);



    $this->fixture('Class_CmsRank',['id' => 987,
                                    'article' => $article]);



  }
class CmsControllerViewNoticeMetasTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->dispatch('/cms/articleview/id/224', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageShouldContainTitleMeta() {
    $this->assertXPathContentContains('//meta[@property="og:title"]/@content', 'La fête de la frite', $this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageShouldContainDescriptionMeta() {
    $this->assertXPath('//meta[@property="og:description"][@content="Une fête appétissante"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageShouldContainImageMeta() {
    $this->assertXPath('//meta[@property="og:image"][@content="' . ROOT_URL . BASE_URL . '/userfiles/image/foo.jpg"]');
  }
class CmsControllerArticleViewInEnglishTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function withLanguageEnShouldReturnEnglishTranslation() {
    $this->dispatch('/cms/articleview/id/224/language/en');
    $this->assertXpathContentContains('//h1', 'Feast of fried');
  }


  /** @test */
  function withLanguageEnEventDateShouldBeTranslated() {
    $this->dispatch('/cms/articleview/id/224/language/en', true);
    $this->assertXpathContentContains('//span[@class="calendar_event_date"]',
                                      'From Saturday 03 September to Wednesday 05 October 2011',
                                      $this->_response->getBody());
  }


  /** @test */
  function withCurrentLocaleEnShouldReturnEnglishTranslation() {
    Zend_Registry::get('session')->language = 'en';
    $this->dispatch('/cms/articleview/id/224');
    $this->assertXpathContentContains('//h1', 'Feast of fried');
  }
llaffont's avatar
llaffont committed
class CmsControllerArticleViewTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _loginHook($account) {
    $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB;
    $account->PSEUDO = "admin";
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
llaffont's avatar
llaffont committed

Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::newInstanceWithId('ID_READ_SPEAKER', ['valeur' => '1234']);
llaffont's avatar
llaffont committed

Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleview/id/224', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /**
   * @test
   * @group pagetitles
   */
  public function pageArticleviewBarreNavShouldBeFeteDeLaFrite() {
    $this->assertXPathContentContains('//div[@class="barre_nav"]/span','La fête de la frite',$this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /**
   * @test
   * @group pagetitles
   */
  public function pageArticleviewBarreNavShouldContainsLinkToCurrentProfil() {
    $this->assertXPathContentContains('//div[@class="barre_nav"]/span/a[contains(@href,"/index/index?id_profil=1")]','Accueil');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function titleShouldBeFeteDeLaFrite() {
    $this->assertXpathContentContains('//h1', 'La fête de la frite');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageTitleShouldContainsLaFeteDeLaFrite() {
    $this->assertXpathContentContains('//title', 'La fête de la frite');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoListShouldBeDisplay() {
    $this->assertXPath('//dl[@class="article_info"]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsHeureDebut() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_start_hour"]','12h');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsHeureFin() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_end_hour"]','16h');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsLieu() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_localisation"]','Annecy');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsTagToutPublic() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_tag"]','Tout public');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsTagConcert() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_tag"]','Concert');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsDateDebut() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_start_date"]','sam 3 sept.');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsDateFin() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_end_date"]','mer 5 oct.');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsCatPublic() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_cat"]','Alimentaire');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test **/
  public function articleInfoShouldContainsBibPortail() {
    $this->assertXPathContentContains('//dl[@class="article_info"]/dd[@class="event_bib"]','Bonlieu');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function calendarDateShouldBeDu3SeptembreAu5Octobre() {
    $this->assertXpathContentContains('//span[@class="calendar_event_date"]', 'Du samedi 03 septembre au mercredi 05 octobre');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function socialNetworksContainerShouldBePresent() {
    //on garde le @id="reseaux-sociaux-224" pour la compatibilité avec les persos graphiques