diff --git a/VERSIONS_WIP/32497 b/VERSIONS_WIP/32497 new file mode 100644 index 0000000000000000000000000000000000000000..6f077eb778c9a047a3324650a4c29a84afb982f8 --- /dev/null +++ b/VERSIONS_WIP/32497 @@ -0,0 +1 @@ + - ticket #32497 : Possibilité de dupliquer une newsletter diff --git a/VERSIONS_WIP/32511 b/VERSIONS_WIP/32511 new file mode 100644 index 0000000000000000000000000000000000000000..4363b2c0988e9c7abde630992b8c9c03717e4f48 --- /dev/null +++ b/VERSIONS_WIP/32511 @@ -0,0 +1 @@ + - ticket #32511 : Ajout d'une case à cocher "Brouillon ?" dans le formulaire d'édition d'une newsletter qui permet de la masquer à l'opac. \ No newline at end of file diff --git a/VERSIONS_WIP/32614 b/VERSIONS_WIP/32614 new file mode 100644 index 0000000000000000000000000000000000000000..91f609685016259eb3a772eca1924706b17317e4 --- /dev/null +++ b/VERSIONS_WIP/32614 @@ -0,0 +1 @@ + - ticket #32614 : Une newsletter dupliquée doit être automatiquement mise en "brouillon" \ No newline at end of file diff --git a/application/modules/admin/controllers/NewsletterController.php b/application/modules/admin/controllers/NewsletterController.php index 10cf6dde3491c6aeb94bb3ff218fc85f116a2004..991f630c7a2898d649971020c8a90c4392564fcc 100644 --- a/application/modules/admin/controllers/NewsletterController.php +++ b/application/modules/admin/controllers/NewsletterController.php @@ -105,6 +105,18 @@ class Admin_NewsletterController extends ZendAfi_Controller_Action { } + public function duplicateAction() { + $this->_redirect('admin/newsletter'); + if (!$newsletter = Class_Newsletter::find($this->_request->getParam('id'))) { + $this->_helper->notify($this->_('Duplication impossible: la source n\'a pas été trouvée.')); + return; + } + + if(!$newsletter->duplicate()) + $this->_helper->notify($this->_('Duplication impossible: Erreur lors de l\'enregisrement de la copie.')); + } + + public function editSubscribersAction() { if (!$newsletter = Class_Newsletter::find($this->_getParam('id'))) { $this->_redirect('admin/newsletter'); @@ -244,29 +256,33 @@ class Admin_NewsletterController extends ZendAfi_Controller_Action { $titre = $form ->createElement('text', 'titre') - ->setLabel('Titre') + ->setLabel($this->_('Titre')) ->setAttrib('size', 30) ->setRequired(true); $expediteur = $form ->createElement('text', 'expediteur') - ->setLabel('Expéditeur') + ->setLabel($this->_('Expéditeur')) ->setAttrib('size', 30) ->addValidator(new Zend_Validate_EmailAddress()); + $draft = $form + ->createElement('checkbox', 'draft') + ->setLabel($this->_('Brouillon ?')); + $contenu = $form ->createElement('ckeditor', 'contenu') ->setRequired(true); $id_catalogue = $form ->createElement('select', 'id_catalogue', array("onchange"=>"$('#id_panier').val('')")) - ->setLabel('Domaine') + ->setLabel($this->_('Domaine')) ->setMultiOptions(Class_Catalogue::getCataloguesForCombo()); $id_panier = $form ->createElement('select', 'id_panier', array("onchange"=>"$('#id_catalogue').val('')")) - ->setLabel('Panier'); + ->setLabel($this->_('Panier')); $paniers_admin = Class_PanierNotice::getLoader()->findAllBelongsToAdmin(); $id_panier->addMultiOption(null, ''); @@ -285,13 +301,14 @@ class Admin_NewsletterController extends ZendAfi_Controller_Action { $form ->addElement($titre) ->addElement($expediteur) - ->addElement('checkbox', 'auto_subscribe', ['label' => "Inscrire automatiquement les nouveaux lecteurs à la lettre d'information"]) + ->addElement($draft) + ->addElement('checkbox', 'auto_subscribe', ['label' => $this->_("Inscrire automatiquement les nouveaux lecteurs à la lettre d'information")]) ->addElement($contenu) - ->addDisplayGroup(array('titre', 'expediteur'), + ->addDisplayGroup(array('titre', 'expediteur', 'draft'), 'letter', array("legend" => "Lettre")) ->addDisplayGroup(['auto_subscribe'], - 'add_reader',['legend' => 'Inscription automatique']) + 'add_reader',['legend' => $this->_('Inscription automatique')]) ->addDisplayGroup(array('contenu'), 'contenu_html', array("legend" => "Contenu HTML")) @@ -300,7 +317,7 @@ class Admin_NewsletterController extends ZendAfi_Controller_Action { ->addElement($nb_notices) ->addDisplayGroup(array('id_catalogue', 'id_panier', 'nb_notices'), 'notices', - array("legend" => "Notices")); + array("legend" => $this->_("Notices"))); $form ->populate($newsletter->toArray()); diff --git a/application/modules/admin/views/scripts/newsletter/_newsletter_row.phtml b/application/modules/admin/views/scripts/newsletter/_newsletter_row.phtml index 88810ffe74dfc4e9a522f8f75374c060cecf29f1..d49cd1ccdb0685d59309ee671184f8c5235d0821 100644 --- a/application/modules/admin/views/scripts/newsletter/_newsletter_row.phtml +++ b/application/modules/admin/views/scripts/newsletter/_newsletter_row.phtml @@ -3,8 +3,9 @@ <td><?php echo $this->tagProgressBarForNewsletter($this->newsletter);?></td> <?php foreach(['edit' => $this->boutonIco("type=edit"), - 'delete' => $this->boutonIco("type=del"), - 'preview' => $this->boutonIco("type=show"), + 'delete' => $this->boutonIco("type=del"), + 'preview' => $this->boutonIco("type=show"), + 'duplicate' => $this->boutonIco("type=duplicate"), 'edit-subscribers' => $this->boutonIco("picto=picto/abonnes.gif", "bulle=Membres").$this->newsletter->getNumberOfUsers(), 'sendtest' => $this->boutonIco("type=test"), 'send' => $this->boutonIco("type=mail")] diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php index 3a3b4714cac7ee77065f8a6fc4f9fba0d4de1798..f0e90d9dc20742e59cf5c245f3c6c9eb41ce7da3 100644 --- a/application/modules/opac/controllers/AbonneController.php +++ b/application/modules/opac/controllers/AbonneController.php @@ -421,14 +421,14 @@ class AbonneController extends ZendAfi_Controller_Action { ->setAttrib('class', 'zend_form') ->setAttrib('autocomplete', 'off'); - $textfields = array('nom' => $this->_('Nom'), - 'prenom' => $this->_('Prénom'), - 'pseudo' => $this->_('Pseudo'), - 'adresse' => $this->_('Adresse'), - 'code_postal' => $this->_('Code postal'), - 'ville' => $this->_('Ville'), - 'mail' => $this->_('E-Mail'), - 'telephone' => $this->_('Téléphone')); + $textfields = ['nom' => $this->_('Nom'), + 'prenom' => $this->_('Prénom'), + 'pseudo' => $this->_('Pseudo'), + 'adresse' => $this->_('Adresse'), + 'code_postal' => $this->_('Code postal'), + 'ville' => $this->_('Ville'), + 'mail' => $this->_('E-Mail'), + 'telephone' => $this->_('Téléphone')]; foreach($textfields as $field => $label) { if (!in_array($field, $fields_to_show)) @@ -511,7 +511,7 @@ class AbonneController extends ZendAfi_Controller_Action { $subscriptions->setLabel($this->_("Abonnement aux lettres d'information")); - $newsletters = Class_Newsletter::getLoader()->findAll(); + $newsletters = Class_Newsletter::getPublishedNewsletters(); if (count($newsletters)>0) { foreach($newsletters as $nl) $subscriptions->addMultiOption($nl->getId(), $nl->getTitre()); @@ -540,11 +540,11 @@ class AbonneController extends ZendAfi_Controller_Action { $form = $this->_userForm($this->_user); if ($this->getRequest()->isPost() && $form->isValid($_POST)) { - $newsletters = array(); + $newsletters = []; - $newsletters_id = $this->_request->getParam('subscriptions', array()); + $newsletters_id = $this->_request->getParam('subscriptions', []); foreach($newsletters_id as $nl_id) - $newsletters []= Class_Newsletter::getLoader()->find($nl_id); + $newsletters []= Class_Newsletter::find($nl_id); try { $password = $this->_request->getParam('password'); diff --git a/cosmogramme/php/_init.php b/cosmogramme/php/_init.php index 684300cd54dc68c228e1d58ffe132b9d70824c57..a9b7ff9dac9eef7a9d1dcec0d264f6c07ec214f4 100644 --- a/cosmogramme/php/_init.php +++ b/cosmogramme/php/_init.php @@ -1,7 +1,7 @@ <?php error_reporting(E_ERROR | E_PARSE); -define("PATCH_LEVEL","278"); +define("PATCH_LEVEL","279"); define("APPLI","cosmogramme"); define("COSMOPATH", "/var/www/html/vhosts/opac2/www/htdocs"); diff --git a/cosmogramme/sql/patch/patch_279.php b/cosmogramme/sql/patch/patch_279.php new file mode 100644 index 0000000000000000000000000000000000000000..6a56000b7b8c42e13af731a466d13d60ebfc4633 --- /dev/null +++ b/cosmogramme/sql/patch/patch_279.php @@ -0,0 +1,9 @@ +<?php +$adapter = Zend_Db_Table::getDefaultAdapter(); + +try { + $adapter->query('select draft from newsletters limit 1'); +} catch (Exception $e) { + $adapter->query('ALTER TABLE newsletters ADD COLUMN draft tinyint default 0'); +} +?> diff --git a/library/Class/Newsletter.php b/library/Class/Newsletter.php index a991af74386d4637f4361547be93c8ab592f7a1a..f156ef7e277644c663eded34c50ee987d972c7b6 100644 --- a/library/Class/Newsletter.php +++ b/library/Class/Newsletter.php @@ -64,7 +64,7 @@ class Class_Newsletter extends Storm_Model_Abstract { 'dependents' => 'delete']]; protected $_notices_finder; protected $_recipent_size = 20; - + protected $_default_attribute_values = ['draft' => 0]; public function getSubscriptionsPage($page=0, $items_by_page=20) { return Class_NewsletterSubscription::findAllBy(['newsletter_id' => $this->getId(), @@ -72,6 +72,11 @@ class Class_Newsletter extends Storm_Model_Abstract { } + public function getPublishedNewsletters() { + return Class_Newsletter::findAllBy(['draft' => 0]); + } + + public function send() { return (new Class_Batch_SendNewsletters($this))->run(); } @@ -301,6 +306,27 @@ class Class_Newsletter extends Storm_Model_Abstract { return hash('crc32b', $this->getId().$user->getMail()); } + + public function duplicate() { + $attributes = $this->attributesToArray(); + unset($attributes['id']); + unset($attributes['last_distribution_date']); + $attributes['titre'] .= ' ('. $this->_('copie').')'; + + $duplicate = new Class_Newsletter(); + $duplicate->updateAttributes($attributes); + $duplicate->setDraft(true); + if (!$duplicate->save()) + return false; + + $subscriptions = Class_NewsletterSubscription::findAllBy(['newsletter_id' => (int) $this->getId()]); + + foreach ($subscriptions as $subscription) + Class_NewsletterSubscription::newWith($duplicate, + $subscription->getUser()); + + return true; + } } ?> \ No newline at end of file diff --git a/library/ZendAfi/View/Helper/Accueil/Newsletters.php b/library/ZendAfi/View/Helper/Accueil/Newsletters.php index c7b6fc5f1b8a4f9c0646a37dc4cf1647a4f00b2d..fd59f132550e593f8074e1fd75755ba52779718e 100644 --- a/library/ZendAfi/View/Helper/Accueil/Newsletters.php +++ b/library/ZendAfi/View/Helper/Accueil/Newsletters.php @@ -22,7 +22,7 @@ class ZendAfi_View_Helper_Accueil_Newsletters extends ZendAfi_View_Helper_Accuei protected $_boite_id = 'newsletters'; public function getModels() { - return Class_Newsletter::findAll(); + return Class_Newsletter::getPublishedNewsletters(); } public function renderModel($newsletter) { diff --git a/library/ZendAfi/View/Helper/BoutonIco.php b/library/ZendAfi/View/Helper/BoutonIco.php index 6abedb0e2bbce0055b8ed4d3058d522816cbdd00..a3edca47125c38be10ba1bef698febfce282e0d7 100644 --- a/library/ZendAfi/View/Helper/BoutonIco.php +++ b/library/ZendAfi/View/Helper/BoutonIco.php @@ -51,8 +51,10 @@ class ZendAfi_View_Helper_BoutonIco extends ZendAfi_View_Helper_BaseHelper { $options['title'] = $this->bulle; } - if ('DEL' == strtoupper($this->type)) - $options['onclick'] = 'javascript:return confirm(\'' . $this->traduire('Êtes vous sûr de vouloir supprimer cet élément ?') . '\');'; + foreach (['DEL' => 'supprimer', 'DUPLICATE' => 'dupliquer'] as $key => $verb) + if ($key == strtoupper($this->type)) + $options['onclick'] = 'javascript:return confirm(\'' . $this->traduire("Êtes vous sûr de vouloir $verb cet élément ?") . '\');'; + $html = $this->view->tag('img', null, $options); @@ -73,7 +75,8 @@ class ZendAfi_View_Helper_BoutonIco extends ZendAfi_View_Helper_BaseHelper { 'SHOW' => ['show.gif', $this->traduire('Visualiser')], 'MAIL' => ['mail.png', $this->traduire('Envoyer par mail')], 'VISIBLE' => ['hide.gif', $this->traduire('Rendre visible')], - 'INVISIBLE' => ['show.gif', $this->traduire('Archiver')] + 'INVISIBLE' => ['show.gif', $this->traduire('Archiver')], + 'DUPLICATE' => ['page_copy.png', $this->traduire('Dupliquer')] ]; $type = strtoupper($type); diff --git a/tests/application/modules/admin/controllers/NewsletterControllerTest.php b/tests/application/modules/admin/controllers/NewsletterControllerTest.php index d8eb85869b7a256719ecbaa5e4e18b2202fb6ade..c4309b1a2dd8afd9e8e552fa601a2c213ea61525 100644 --- a/tests/application/modules/admin/controllers/NewsletterControllerTest.php +++ b/tests/application/modules/admin/controllers/NewsletterControllerTest.php @@ -161,6 +161,10 @@ class Admin_NewsletterControllerIndexActionTest extends Admin_NewsletterControll $this->assertXPath("//tbody//tr[1]//td//a[@href='/admin/newsletter/preview/id/1']"); } + public function testDuplicateLink() { + $this->assertXPath("//tbody//tr[1]//td//a[@href='/admin/newsletter/duplicate/id/1']"); + } + public function testTestNouveautesClassiqueLink() { $this->assertXPath("//tbody//tr[1]//td//a[@href='/admin/newsletter/sendtest/id/1']"); } @@ -341,6 +345,10 @@ class Admin_NewsletterControllerEditActionTest extends Admin_NewsletterControlle $this->assertXPath("//form//input[@id='expediteur'][@value='laurent@free.fr']"); } + public function testFormDraft() { + $this->assertXPath('//form//input[@id="draft"][@value="1"]'); + } + public function testFormContenuHTML() { $this->assertQueryContentContains("form textarea[@name='contenu'][following-sibling::script]", 'Notre sélection du mois'); @@ -1062,4 +1070,67 @@ class Admin_NewsletterControllerNeverSendTest extends Admin_NewsletterController } } + + +class Admin_NewsletterControllerDuplicateActionTest extends Admin_AbstractControllerTestCase { + protected $_new_id = null; + + public function setUp() { + parent::setUp(); + + $subscription = $this->fixture('Class_Users', ['id' => 1, + 'id_user' => 1, + 'nom' => 'Jean', + 'prenom' => 'Jean', + 'login' => 'jean', + 'password' => 'jean']); + + $newsletter = $this->fixture('Class_Newsletter', ['id' => 1, + 'titre' => 'Nouveautés classique', + 'contenu' => 'Notre sélection du mois']); + + Class_Newsletter::find(1)->setLastDistributionDateWithFormat(); + + $this->fixture('Class_NewsletterSubscription', ['id' => 100, + 'newsletter_id' => 1, + 'user_id' => 1]); + + $newsletter->addSubscription($subscription); + + $this->dispatch('/admin/newsletter/duplicate/id/1', true); + if ($new_newsletter = Class_Newsletter::findFirstBy(['titre' => 'Nouveautés classique (copie)'])) + $this->_new_id = $new_newsletter->getId(); + } + + + /** @test */ + public function thereShouldBe2Newsletters() { + $this->assertCount(2, Class_Newsletter::findAll()); + } + + + /** @test */ + public function duplicateNewsletterShouldExit() { + $this->assertNotNull(Class_Newsletter::find($this->_new_id)); + } + + + /** @test */ + public function duplicatedNewsletterShouldBeDraft() { + $this->assertEquals(1,Class_Newsletter::find($this->_new_id)->getDraft()); + } + + + /** @test */ + public function duplicatedNewsletterShouldHaveSameContentThanSource() { + $this->assertEquals(Class_Newsletter::find(1)->getContenu(), Class_Newsletter::find($this->_new_id)->getContenu()); + } + + + /** @test */ + public function duplicatedNewsletterShouldHaveSameSubscriptionThanSource() { + $this->assertNotNull(Class_NewsletterSubscription::findFirstBy(['newsletter_id' => $this->_new_id, 'user_id' => 1])); + } +} + ?> \ No newline at end of file diff --git a/tests/application/modules/opac/controllers/AbonneControllerNewslettersTest.php b/tests/application/modules/opac/controllers/AbonneControllerNewslettersTest.php index 71665246c44fec50b58a1fb83af4f390f3bf12d3..ee375150ce0335440f5e38d5e017c60e4cc0682e 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerNewslettersTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerNewslettersTest.php @@ -22,6 +22,7 @@ require_once 'AbstractControllerTestCase.php'; abstract class AbstractAbonneControllerNewslettersTestCase extends AbstractControllerTestCase { + protected $_storm_default_to_volatile=true; public function setUp() { parent::setUp(); @@ -29,26 +30,22 @@ abstract class AbstractAbonneControllerNewslettersTestCase extends AbstractContr ['valeur' => 'pseudo;nom;prenom;mail;password']); - $this->marcus = Class_Users::getLoader()->newInstanceWithId(10) - ->setPrenom('Marcus') - ->setNom('Miller') - ->setLogin('mmiller') - ->setMail('marcus@gmail.com') - ->setPseudo('mimi') - ->setDateDebut(null) - ->setPassword('mysecret') - ->setFicheSIGB(['type_comm' => 0, - 'nom_aff' => 'Marcus']) - ->setRole('abonne_sigb') - ->setRoleLevel(3) - ->setIdSite(999) - ->setIdabon('00123'); + $this->marcus = $this->fixture('Class_Users',['id'=> 10, + 'prenom' => 'Marcus', + 'nom' => 'Miller', + 'login' => 'mmiller' , + 'mail' => 'marcus@gmail.com', + 'pseudo' => 'mimi', + 'password' => 'mysecret', + 'date_debut' => null, + 'role' => 'abonne_sigb', + 'role_level' => 3, + 'id_site' => 999, + 'idabon' => '00123', + 'fiche_SIGB' => ['type_comm' => 0, + 'nom_aff' => 'Marcus'] + ]); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('save') - ->answers(true); - - $this->newsletter_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Newsletter'); ZendAfi_Auth::getInstance()->logUser($this->marcus); } @@ -81,9 +78,7 @@ class AbonneControllerNewslettersFicheActionWithNoExistingNewslettersTest extend public function setUp() { parent::setUp(); - $this->marcus->setNewsletters(array()); - $this->newsletter_loader->whenCalled('findAll') - ->answers(array()); + $this->marcus->setNewsletters([]); $this->dispatch('/opac/abonne'); } @@ -192,6 +187,10 @@ class AbonneControllerNewslettersEditActionTest extends AbonneControllerWithTwoN ->setValeur("Saisissez\nvos données"); Class_AdminVar::getLoader() ->cacheInstance($this->aide_fiche_abonne); + $this->fixture('Class_Newsletter', + ['id' => 5, + 'titre' => 'hidden newsletter', + 'draft' => true]); $this->dispatch('/opac/abonne/edit'); @@ -252,6 +251,13 @@ class AbonneControllerNewslettersEditActionTest extends AbonneControllerWithTwoN public function testBackButton() { $this->assertXPath("//table//div[contains(@onclick, 'window.location.replace')]"); } + + /** @test */ + public function hiddenNewsletterShouldNotBedisplayed() { + $this->assertNotXPathContentContains("//form//input[@type='checkbox'][@name='subscriptions[]']/..", + 'hidden newsletter',$this->_response->getBody()); + } + } @@ -261,13 +267,13 @@ class AbonneControllerNewslettersSaveActionTest extends AbonneControllerWithTwoN public function setUp() { parent::setUp(); - $data = array('nom' => 'MILLER', - 'prenom' => 'MARCUS', - 'mail' => 'marcus@free.fr', - 'pseudo' => 'M2', - 'subscriptions' => array(14), - 'password' => 'amstramgram', - 'confirm_password' => 'amstramgram'); + $data = ['nom' => 'MILLER', + 'prenom' => 'MARCUS', + 'mail' => 'marcus@free.fr', + 'pseudo' => 'M2', + 'subscriptions' => [14], + 'password' => 'amstramgram', + 'confirm_password' => 'amstramgram']; $this->getRequest() ->setMethod('POST') @@ -278,7 +284,7 @@ class AbonneControllerNewslettersSaveActionTest extends AbonneControllerWithTwoN /** @test */ public function marcusShouldHaveBeenSaved() { - $this->assertEquals($this->marcus, Class_Users::getLoader()->getFirstAttributeForLastCallOn('save')); + $this->assertEquals($this->marcus, Class_Users::findFirstBy(['pseudo' => 'M2'])); } public function testNomSetToMILLER() { @@ -322,7 +328,7 @@ class AbonneControllerNewslettersSaveWithEmptyDataTest extends AbonneControllerW /** @test */ public function marcusShouldHaveBeenSaved() { - $this->assertEquals($this->marcus, Class_Users::getLoader()->getFirstAttributeForLastCallOn('save')); + $this->assertEquals($this->marcus, Class_Users::findFirstBy(['idabon' => '00123'])); } public function testNoNewsletters() { @@ -421,12 +427,6 @@ class AbonneControllerNewslettersSubscriptionTest extends AbonneControllerWithTw $this->assertContains( $this->visites,$this->marcus->getNewsletters()); } - - /** @test **/ - public function userShouldHaveBeenSaved() { - $this->assertTrue(Class_Users::methodHasBeenCalled('save')); - } - } @@ -450,14 +450,6 @@ class AbonneControllerNewslettersUnsubscriptionTest extends AbonneControllerWith $this->assertNotContains( $this->visites,$this->marcus->getNewsletters()); } - - /** @test **/ - public function userShouldHaveBeenSaved() { - $this->assertTrue(Class_Users::methodHasBeenCalled('save')); - } - - - } @@ -514,7 +506,7 @@ class AbonneControllerNewslettersValidationsTest extends AbonneControllerWithTwo /** @test */ public function withEmptyPasswordMarcusShouldBeSaved() { $this->_postData(array('password' => '')); - $this->assertEquals($this->marcus, Class_Users::getLoader()->getFirstAttributeForLastCallOn('save')); + $this->assertEquals($this->marcus->getPassword(), Class_Users::findFirstBy(['idabon' => '00123'])->getPassword()); } } @@ -553,4 +545,5 @@ class AbonneControllerNewslettersSubscriptionTwiceTest extends AbstractControlle $this->assertEquals(1 , Class_NewsletterSubscription::countBy(['user_id' => 156])); } } + ?> \ No newline at end of file diff --git a/tests/db/UpgradeDBTest.php b/tests/db/UpgradeDBTest.php index b56a38ca5fdb8f2922102deef61888766c5f18a8..fb06803c4fac3d0f7a4858c22487122dd338cedd 100644 --- a/tests/db/UpgradeDBTest.php +++ b/tests/db/UpgradeDBTest.php @@ -60,6 +60,22 @@ abstract class UpgradeDBTestCase extends PHPUnit_Framework_TestCase { } + public function assertColumnExists($exist) { + list($table, $column) = explode('.', $exist); + + if (!$table || !$column) + return false; + + try { + $adapter->query("select $column from $table limit 1"); + } catch (Exception $e) { + return false; + } + + return true; + } + + protected function _getPatchLevel() { preg_match('/UpgradeDB_([0-9]+)_Test/', get_class($this), @@ -176,7 +192,6 @@ class UpgradeDB_277_Test extends UpgradeDBTestCase { } - class UpgradeDB_278_Test extends UpgradeDBTestCase { public function prepare() { @@ -197,3 +212,15 @@ class UpgradeDB_278_Test extends UpgradeDBTestCase { $this->assertContains("12:Cd-Script\r\n", $this->query('select liste from variables where clef = "comm_sigb";')->fetch()['liste']); } } + +class UpgradeDB_279_Test extends UpgradeDBTestCase { + public function prepare() { + $this->query("ALTER TABLE newsletters DROP draft"); + } + + + /** @test */ + public function newslettersDraftColumnshouldExist() { + $this->assertColumnExists('newsletters.draft'); + } +} diff --git a/tests/library/ZendAfi/View/Helper/Accueil/NewslettersTest.php b/tests/library/ZendAfi/View/Helper/Accueil/NewslettersTest.php index 969a7abba63e30acfe0140d4ee8aa8250ee8a137..fde491b678919a08b087c07ba964358e3689c270 100644 --- a/tests/library/ZendAfi/View/Helper/Accueil/NewslettersTest.php +++ b/tests/library/ZendAfi/View/Helper/Accueil/NewslettersTest.php @@ -161,4 +161,50 @@ class NewslettersTestWithNonConnectedUser extends ViewHelperTestCase { } + + + +class NewslettersTestWithConnectedUserAndHiddenNewsletter extends ViewHelperTestCase { + public function setUp() { + parent::setUp(); + + $helper = new ZendAfi_View_Helper_Accueil_Newsletters(2, [ + 'type_module'=>'NEWSLETTERS', + 'division' => '1', + 'preferences' => [ + 'titre' => 'Newsletters']]); + $helper->setView(new ZendAfi_Controller_Action_Helper_View()); + + $account = new StdClass(); + $account->ID_USER = '123456'; + ZendAfi_Auth::getInstance()->getStorage()->write($account); + $user = $this->fixture('Class_Users', ['id' => 123456, + 'nom' => 'Arnaud', + 'login' => 'arnaud', + 'password' => 'foo']); + + $this->fixture('Class_Newsletter', ['id' => 2, + 'titre' =>'Nouveautes musique', + 'draft' => 0]); + + $this->fixture('Class_Newsletter', ['id' => 3, + 'titre' =>'Nouveautes classique', + 'draft' => 1]); + + $this->html = $helper->getBoite(); + } + + + /** @test */ + public function newsletterNouveautesMusiqueShouldBeDisplayed() { + $this->assertXPathContentContains($this->html,'//ul//li','Nouveautes musique'); + } + + + /** @test */ + public function newsletterNouveautesClassiqueShouldNotBeDisplayed() { + $this->assertNotXPathContentContains($this->html,'//ul//li','Nouveautes classique'); + } +} + ?> \ No newline at end of file