From f09f54e9eea91bb4eaa56b632e2c130d271f45ac Mon Sep 17 00:00:00 2001 From: llaffont <llaffont@afi-sa.fr> Date: Mon, 30 Nov 2015 15:02:52 +0100 Subject: [PATCH] dev #31762 workflow notifications send mail to validators with dynamic workflows --- .../admin/controllers/CmsController.php | 2 +- library/Class/Article.php | 7 ++ .../admin/controllers/CmsControllerTest.php | 100 +++++++++++++----- 3 files changed, 80 insertions(+), 29 deletions(-) diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php index f4bee15637e..ea60bdbe735 100644 --- a/application/modules/admin/controllers/CmsController.php +++ b/application/modules/admin/controllers/CmsController.php @@ -366,7 +366,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action { protected function _getValidatorsMail($article) { return array_unique( - Class_Permission::getWorkflow(Class_Article::STATUS_VALIDATED) + Class_Permission::getWorkflow($article->getNextWorkflowStatus()) ->getUsersOnModel($article->getCategorie()) ->collect('mail') ->getArrayCopy()); diff --git a/library/Class/Article.php b/library/Class/Article.php index 12b30b0b88a..65260057830 100644 --- a/library/Class/Article.php +++ b/library/Class/Article.php @@ -609,6 +609,13 @@ class Class_Article extends Storm_Model_Abstract { } + public function getNextWorkflowStatus() { + $statuses = array_keys($this->getKnownStatus()); + $current = array_search($this->getStatus(), $statuses); + return $statuses[$current + 1]; + } + + /** * Retourne les traductions des articles valides et pour la langue courant * @param array diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php index a6028e76b5d..bcabf5d7fc0 100644 --- a/tests/application/modules/admin/controllers/CmsControllerTest.php +++ b/tests/application/modules/admin/controllers/CmsControllerTest.php @@ -1498,6 +1498,9 @@ class CmsControllerNewsAddActionPostWithoutWorkflowTest extends CmsControllerWit abstract class CmsControllerWorkflowTestCase extends CmsControllerWithPermissionTestCase { + protected + $mock_transport; + public function setUp() { parent::setUp(); $this->mock_transport = new MockMailTransport(); @@ -1599,8 +1602,8 @@ class CmsControllerWorkflowWithPermissionsTest extends CmsControllerWorkflowPerm class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerWorkflowTestCase { - protected $_article, - $mock_transport, + + protected $_basePostDatas = ['titre' => 'Katsuhiro Otomo en dédicace !', 'debut' => '', 'fin' => '', @@ -1612,12 +1615,7 @@ class CmsControllerNewsAddActionPostWithWorkflowTest public function setUp() { parent::setUp(); - $this->_basePostDatas['auteur'] = $this->fixture('Class_Users', - ['id' => 1, - 'login' => 'l', - 'password' => 'l', - 'nom' => 'Batman', - 'mail' => 'l@afi-sa.fr']);; + $this->fixture('Class_Article', ['id' => 18, 'id_user' => '', @@ -1625,6 +1623,12 @@ class CmsControllerNewsAddActionPostWithWorkflowTest 'contenu' => 'September News', 'description' => '', 'status' =>'', + 'auteur' => $this->fixture('Class_Users', + ['id' => 1, + 'login' => 'l', + 'password' => 'l', + 'nom' => 'Batman', + 'mail' => 'batman@afi-sa.fr']), 'categorie' => Class_ArticleCategorie::find(34)]); } @@ -1635,17 +1639,6 @@ class CmsControllerNewsAddActionPostWithWorkflowTest $this->postDispatch('/admin/cms/edit/id/18', $data); } - - protected function postArticleToDynamicStatus() { - $this->fixture('Class_AdminVar', - ['id' => 'WORKFLOW', - 'valeur' => '[{"id":"12", "label":"A valider "}]']); - $data = $this->_basePostDatas; - $data['status'] = 12; - $this->postDispatch('/admin/cms/edit/id/18', $data); - } - - /** @test */ public function statusShouldBeUpdated() { $this->postArticleValidated(); @@ -1657,15 +1650,7 @@ class CmsControllerNewsAddActionPostWithWorkflowTest /** @test */ public function validatedNewsShouldSendMailToAuthor() { $this->postArticleValidated(); - $this->assertEquals('l@afi-sa.fr', - $this->mock_transport->getSentMails()[0]->getRecipients()[0]); - } - - - /** @test */ - public function dynamicStatusShouldSendMailToAdmins() { - $this->postArticleToDynamicStatus(); - $this->assertEquals('laurent@afi-sa.fr', + $this->assertEquals('batman@afi-sa.fr', $this->mock_transport->getSentMails()[0]->getRecipients()[0]); } @@ -1805,6 +1790,65 @@ class CmsControllerNewsAddActionPostWithWorkflowTest +class CmsControllerNewsAddActionPostWithDynamicWorkflowTest extends CmsControllerWorkflowTestCase { + public function setUp() { + parent::setUp(); + $this->fixture('Class_AdminVar', + ['id' => 'WORKFLOW', + 'valeur' => '[{"id":"12", "label":"A lire"}]']); + } + + + protected function _postDataTo($datas, $url) { + $datas = array_merge(['titre' => 'Katsuhiro Otomo en dédicace !', + 'debut' => '', + 'fin' => '', + 'events_debut' => '', + 'events_fin' => '', + 'description' => '', + 'id_cat' => $this->_cat_a_la_une->getId(), + 'contenu' => 'Ne manquez pas cet évènement.'], + $datas); + + $this->postDispatch($url, $datas); + } + + + /** @test */ + public function newArticleSavedWithDynamicStatusALireShouldSendMailToAdmin() { + $this->_postDataTo(['status' => 12], '/admin/cms/add/id_cat/23'); + + $this->assertEquals(['laurent@afi-sa.fr', 'bernard@afi-sa.fr'], + $this->mock_transport->getSentMails()[0]->getRecipients()); + } + + + /** @test */ + public function newArticleSavedWithStatusPendingShouldNotSendMail() { + $this->_postDataTo(['status' => Class_Article::STATUS_VALIDATION_PENDING], + '/admin/cms/add/id_cat/23'); + + $this->assertEmpty($this->mock_transport->getSentMails()); + } + + + /** @test */ + public function newArticleSavedWithStatusPendingShouldSendMailToGroupTestingWithRights() { + + Class_Permission::findDynamicWorkflow(12) + ->permitTo($this->_group_testing, $this->_cat_a_la_une); + + + $this->_postDataTo(['status' => Class_Article::STATUS_VALIDATION_PENDING], + '/admin/cms/add/id_cat/23'); + + $this->assertEquals(['admin@afi-sa.fr'], + $this->mock_transport->getSentMails()[0]->getRecipients()); + } +} + + + class CmsControllerWorkflowArticleRefusedTest extends CmsControllerWorkflowTestCase { public function setUp() { -- GitLab