Skip to content
Snippets Groups Projects
CmsControllerTest.php 47.1 KiB
Newer Older
Patrick Barroca's avatar
Patrick Barroca committed
    $this->assertXpath('//div[@class="reseaux-sociaux"][contains(@data-article-url, "cms/reseau/id_article/224")]/img[contains(@src, "patience.gif")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function initializeResauxSociauxScriptShouldBePresent() {
    $this->assertXPathContentContains('//script',
                                      "initializeReseauxSociaux");
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function contentShouldBePresent() {
    $this->assertXpathContentContains('//div[@class="contenu"]', 'Une fête appétissante');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function withLanguageEnShouldReturnEnglishTranslation() {
    $this->bootstrap();
    $this->dispatch('/cms/articleview/id/224/language/en');
    $this->assertXpathContentContains('//h1', 'Feast of fried');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function withLanguageEnEventDateShouldBeTranslated() {
    $this->bootstrap();
    $this->dispatch('/cms/articleview/id/224/language/en');
    $this->assertXpathContentContains('//span[@class="calendar_event_date"]',
                                      'From Saturday 03 September to Wednesday 05 October 2011',
                                      $this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function withCurrentLocaleEnShouldReturnEnglishTranslation() {
    $this->bootstrap();
    Zend_Registry::get('session')->language = 'en';
    $this->dispatch('/cms/articleview/id/224');
    $this->assertXpathContentContains('//h1', 'Feast of fried');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisArgShouldNotHaveLinkForDeletion() {
    $this->assertNotXPath('//a[contains(@href, "admin/modo/delete-cms-avis/id/35")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function divShouldContainsAdresseBonlieu() {
    $this->assertXPathContentContains('//div[@class="lieu"]', 'Annecy');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  function divShouldContainsGoogleMap() {
    $this->assertXPath('//div[@class="lieu"]//img[contains(@src,"http://maps.googleapis.com/maps")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function readSpeakerLinkShouldBePresent() {
    $this->assertXPath('//a[@class="readspeaker"][contains(@onclick, "/cms/articleread?id=224")]',
                       $this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function speakStartMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->');
  }
llaffont's avatar
llaffont committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function speakStopMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->');
  }
}




class CmsControllerArticleViewArticleArchivedWithWorkflowTest 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();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']);
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Article::find(224)->beArchived()->assertSave();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleview/id/224');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldBeA404NotFound() {
    $this->assertResponseCode(404);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function pageShouldContainsH1WithNotFound() {
    $this->assertXPathContentContains('//h1', 'Désolé, cette page n\'existe pas');
  }
llaffont's avatar
llaffont committed

Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleTitleShouldNotBeVisible() {
    $this->assertNotXPathContentContains('//h1', 'frite');
  }
}



class CmsControllerArticleViewArticleArchivedWithWorkflowAsModoBibTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _loginHook($account) {
    $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::MODO_BIB;
    $account->PSEUDO = "redac";
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::newInstanceWithId('WORKFLOW', ['valeur' => '1']);
Patrick Barroca's avatar
Patrick Barroca committed
    Class_Article::find(224)->beArchived()->assertSave();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleview/id/224');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldNotBeA404NotFound() {
    $this->assertNotResponseCode(404);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function articleTitleShouldBeVisible() {
    $this->assertXPathContentContains('//h1', 'frite');
  }
llaffont's avatar
llaffont committed
}




class CmsControllerArticleViewAsAdminTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _loginHook($account) {
    $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL;
    $account->PSEUDO = "admin";
  }
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 avisShouldContainsEnteteArgg() {
    $this->assertXPathContentContains('//table[@class="avis"]//td', 'Argg',$this->_response->getBody());
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisFlorenceShouldHaveParFlorence() {
    $this->assertXPathContentContains('//div', 'par : <b>Florence</b>');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisShouldContainsEnteteHmmm() {
    $this->assertXPathContentContains('//table[@class="avis"]//td', 'Hmmm');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisShouldContainsEnteteAnonyme() {
    $this->assertXPathContentContains('//table[@class="avis"]//td', 'Anonyme');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisHmmShouldHaveLinkForDeletion() {
    $this->assertXPath('//table[@class="avis"]//td[contains(text(), "Hmmm")]//a[contains(@href, "admin/modo/delete-cms-avis/id/34")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisArgShouldHaveLinkForDeletion() {
    $this->assertXPath('//table[@class="avis"]//td[contains(text(), "Argg")]//a[contains(@href, "admin/modo/delete-cms-avis/id/35")]');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function tagEditArticleShouldBeVisible() {
    $this->assertXPath('//a[contains(@href, "/admin/cms/edit/id/224")]');
  }
class CmsControllerArticleViewWithModoTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::getLoader()
      ->newInstanceWithId('MODO_AVIS_BIBLIO')
      ->setValeur(1);
Patrick Barroca's avatar
Patrick Barroca committed
    Class_AdminVar::getLoader()
      ->newInstanceWithId('MODO_AVIS')
      ->setValeur(1);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/cms/articleview/id/224', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisNotShouldContainsEnteteArgg() {
    $this->assertNotXPathContentContains('//table[@class="avis"]//td', 'Argg');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function avisNotShouldContainsEnteteHmmm() {
    $this->assertNotXPathContentContains('//table[@class="avis"]//td', 'Hmmm');
  }
llaffont's avatar
llaffont committed
class CmsControllerArticleReadTest extends CmsControllerWithFeteDeLaFriteTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->dispatch('/cms/articleread/id/224', true);
  }

  /** @test */
  public function speakStartMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_START -->');
  }

  /** @test */
  public function speakStopMarkerShouldBePresent() {
    $this->assertXpathContentContains('//article[@class="auto_resize article"]', '<!-- RSPEAK_STOP -->');
  }


  /** @test */
  function withLanguageEnArticleReadShouldReturnEnglishTranslation() {
    $this->bootstrap();
    $this->dispatch('/cms/articleread/id/224/language/en', true);
    $this->assertXpathContentContains('//h1', 'Feast of fried');
  }
llaffont's avatar
llaffont committed

llaffont's avatar
llaffont committed
abstract class CmsControllerListTestCase extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  /**
   * @return array
   */
  protected function _createFeteDeLaFriteAndMatsumotoArticles() {
    return array(
      Class_Article::newInstanceWithId(224)
      ->setTitre('La fête de la frite')
      ->setDescription('Ce soir ça frite !')
      ->setContenu('<div>Une fête appétissante</div>'),
      Class_Article::newInstanceWithId(225)
      ->setTitre('Dédicaces de Leiji Matsumoto sama')
      ->setContenu('<div>Albaaaaaator, albaaaator</div>')
      );
  }

  /**
   * Used to choose which action to dispatch
   */
  protected function _dispatchHook() {}

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

    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles())
      ->getWrapper()
      ->whenCalled('filterByLocaleAndWorkflow')
      ->with($this->_createFeteDeLaFriteAndMatsumotoArticles())
      ->answers($this->_createFeteDeLaFriteAndMatsumotoArticles());

    $this->_dispatchHook();
  }

  /** @test */
  public function feteDeLaFriteShouldBePresent() {
    $this->assertXpathContentContains('//h1', 'La fête de la frite');
  }

  /** @test */
  public function dedicaceMatsumotoShouldBePresent() {
    $this->assertXpathContentContains('//h1', 'Dédicaces de Leiji Matsumoto sama');
  }

  /** @test */
  public function workflowAndTranslationFilterShouldBeCalled() {
    $this->assertTrue(
      Class_Article::getLoader()->methodHasBeenCalled('filterByLocaleAndWorkflow')
      );
  }
class CmsControllerArticleViewRecentTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/articleviewrecent/nb/2');
  }
class CmsControllerViewSummaryTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/viewsummary');
  }
llaffont's avatar
llaffont committed
class CmsControllerArticleViewSelectionTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/articleviewselection');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->preferences = Class_Article::getLoader()->getFirstAttributeForLastCallOn('getArticlesByPreferences');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function nbAffShouldBeThirty() {
    $this->assertEquals(30, $this->preferences['nb_aff']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function orderShouldBeDatePublicationDesc() {
    $this->assertEquals('Selection', $this->preferences['display_order']);
  }
class CmsControllerArticleViewSelectionRssBrokenLinkForwardTest extends CmsControllerArticleViewSelectionTest {
Patrick Barroca's avatar
Patrick Barroca committed
  // forward to prevent broken link on rss, tix #25724
  protected function _dispatchHook() {
    $this->dispatch('/cms/viewselection');
  }
class CmsControllerArticleViewSelectionFromHorizontalMenuBoxTest extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();


    $cfg_menus = ['H' => ['libelle' => 'Menu horizontal',
                          'picto' => 'vide.gif',
                          'menus' => [['type_menu' => 'MENU',
                                       'libelle' => 'Pratique',
                                       'picto' => 'bookmark.png',
                                       'preferences' => [],
                                       'sous_menus' => [
                                         ['type_menu' => 'NEWS',
                                          'libelle' => 'Nouvelles',
                                          'picto' => 'vide.gif',
                                          'preferences' => ['titre' => 'Nouvelles',
                                                            'id_items' => 2,
                                                            'display_order' => 'Selection']]
                                         ]
            ]]
        ]];

    $this->fixture('Class_Profil',
                   ['id' => 3,
                    'libelle' => 'Concerts',
                    'cfg_menus' => $cfg_menus])->beCurrentProfil();

    $article = $this->fixture('Class_Article',
                              ['id' => 2,
                               'titre' => 'Ibrahim Maalouf',
                               'contenu' => 'En concert !']);

    Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
      ->whenCalled('getArticlesByPreferences')
      ->with(['titre' => 'Nouvelles',
              'id_items' => 2,
              'display_order' => 'Selection',
              'nb_aff' => 30])
      ->answers([$article]);

    $this->dispatch('/cms/articleviewselection/id_module/1/id_menu/H', true);
  }


  /** @test */
  public function pageShouldRenderArticleIbrahimMaalouf() {
    $this->assertXPathContentContains('//div', 'Ibrahim Maalouf');
  }
class CmsControllerArticleViewPreferencesBySelectionTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $this->preferences = Class_Article::getLoader()->getFirstAttributeForLastCallOn('getArticlesByPreferences');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function itemsShouldBeOneAndThree() {
    $this->assertEquals('1-3', $this->preferences['id_items']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function orderShouldBeDatePublicationDesc() {
    $this->assertEquals('Selection', $this->preferences['display_order']);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function aDivShouldContainsUneFeteAppetissante() {
    $this->assertXPathContentContains('//div', 'Une fête appétissante');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noDivShouldContainsCeSoirCaFrite() {
    $this->assertNotXPathContentContains('//div', 'Ce soir ça frite !');
  }
}




class CmsControllerArticleViewPreferencesSummaryTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection&display_mode=Summary&summary_content=Summary');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noDivShouldContainsUneFeteAppetissante() {
    $this->assertNotXPathContentContains('//div', 'Une fête appétissante');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function aDivShouldContainsCeSoirCaFrite() {
    $this->assertXPathContentContains('//div', 'Ce soir ça frite !');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function linkLireArticleCompleShouldBePresent() {
    $this->assertXPathContentContains('//a[contains(@href, "/cms/articleview/id/224")]',
                                      "Lire l'article complet");
  }
}




class CmsControllerArticleViewPreferencesSummaryWithoutDisplayModeTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/articleviewpreferences?id_items=1-3&display_order=Selection&summary_content=Summary');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function aDivShouldContainsUneFeteAppetissante() {
    $this->assertXPathContentContains('//div', 'Une fête appétissante');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function noDivShouldContainsCeSoirCaFrite() {
    $this->assertNotXPathContentContains('//div', 'Ce soir ça frite !');
  }
llaffont's avatar
llaffont committed
class CmsControllerCategorieViewTest extends CmsControllerListTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected function _dispatchHook() {
    $this->dispatch('/cms/categorieview');
  }