diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index 134c25d8cc2c3f24c67e12aa18ff8fe0112653f0..084f3c10c879a89e75f0b48bec3805bfc7052098 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -23,6 +23,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
 	/** @var Class_Bib */
 	private $_bib;
+	protected $_article_old_status = null;
 
 	public function init() {
 		$identity = Class_Users::getLoader()->getIdentity();
@@ -203,8 +204,8 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 		if ($this->_isArticleSaved($article)) {
 			if($id_module = $this->_getParam('id_module')) 
 				$this->updateConfigBoiteNews($id_module,$article);
-
-			$this->_helper->notify('Article ajouté '.$article->getNotifyMessage());
+			$this->_notifyArticleChanged($article);
+			$this->_helper->notify('Article ajouté');
 			$this->_redirectClose(sprintf('admin/cms/newsedit/id/%d', $article->getId()));
 			return;
 		}
@@ -229,7 +230,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
 	public function newseditAction() {
 		$article = Class_Article::getLoader()->find((int)$this->_getParam('id'));
-	 	$article->setOldStatus($article->getStatus());
+	 	$this->_article_old_status = $article->getStatus();
 		if (null === ($article->getCategorie()->getBib())) {
 			$article->getCategorie()->setBib($this->_bib);
 		}
@@ -239,7 +240,8 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 		}
 
 		if ($this->_isArticleSaved($article)) {
-			$this->_helper->notify('Article sauvegardé '.$article->getNotifyMessage());
+			$this->_notifyArticleChanged($article);
+			$this->_helper->notify('Article sauvegardé ');
 			$this->_redirectClose(sprintf('admin/cms/newsedit/id/%d', $article->getId()));
 			return;
 		}
@@ -272,7 +274,6 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 	 * @return bool
 	 */
 	protected function _isArticleSaved($article) {
-		$article->setView($this->view);
 		if ($this->_request->isPost()) {
 			$post = $this->_request->getPost();
 			
@@ -299,6 +300,100 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 	}
 
 
+	protected function _notifyArticleChanged($article) {
+		$this->_sendMailWhenUpdatedStatusToValidationPending($article);
+		$this->_sendMailWhenUpdatedStatusToRefused($article);
+	}
+
+
+	protected function _sendMailWhenUpdatedStatusToRefused($article) {
+		if ($this->_article_old_status != Class_Article::STATUS_REFUSED &&
+				$article->getStatus() == Class_Article::STATUS_REFUSED)  {
+			$this->_sendMailToAuteur($article);
+		}
+	}
+	
+
+	protected function _sendMailWhenUpdatedStatusToValidationPending($article) {
+		if ($this->_article_old_status != Class_Article::STATUS_VALIDATION_PENDING &&
+				$article->getStatus() == Class_Article::STATUS_VALIDATION_PENDING)  {
+			$this->_sendMailToAdmin($article);
+		}
+	}
+
+
+	protected function _sendMailToAuteur($article) {
+		$mail = new ZendAfi_Mail('utf8');
+		if(!$article->getAuteur()) {
+			$this->_helper->notify('Mail non envoyé: article sans auteur');
+			return;
+		}
+		if(!$mail_address = $article->getAuteur()->getMail()) {
+			$this->_helper->notify('Mail non envoyé: '.$article->getNomCompletAuteur().' sans mail.');
+			return;
+		}
+
+		$body = $article->getRefusMessage();
+		$body = str_replace('TITRE_ARTICLE',
+												$article->getTitre(),
+												$body);
+		$body = str_replace('URL_ARTICLE',
+												$this->view->absoluteUrl($article->getUrl(), null, true), 
+												$body);
+		
+		$mail
+			->setFrom('no-reply@no-reply-afi.fr')
+			->addTo($mail_address)
+			->setSubject(quoted_printable_decode('[AFI-OPAC] Refus de l\'article '.$article->getTitre()))
+			->setBodyText($body,'utf-8',Zend_Mime::ENCODING_8BIT);
+		if($this->_sendMail($mail))
+			$this->_helper->notify('Mail envoyé à: '.$mail_address);
+
+	}
+
+
+	protected function _sendMailToAdmin($article) {
+		$mail = new ZendAfi_Mail('utf8');
+		$all_admins=Class_Users::findAllBy(['role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL]);
+		$mails=[];
+		foreach ($all_admins as $admin) {
+			if (!$mail_admin=$admin->getMail())
+				continue;
+			$mails[]=$mail_admin;
+		}
+
+		if(!$mail_address = implode(',',$mails))
+			return;
+		$body = Class_AdminVar::getWorkflowTextMailArticlePending();
+		$body = str_replace('TITRE_ARTICLE',
+												$article->getTitre(),
+												$body);
+		$body = str_replace('URL_ARTICLE',
+												$this->view->absoluteUrl($article->getUrl(), null, true), 
+												$body);
+
+		$mail
+			->setFrom('no-reply@no-reply-afi.fr')
+			->addTo($mail_address)
+			->setSubject('[AFI-OPAC] Validation d\'article en attente: '.$article->getTitre())
+			->setBodyText($body);
+
+		if($this->_sendMail($mail))
+			$this->_helper->notify('Mail de validation envoyé aux administrateurs.');
+	}
+
+
+	protected function _sendMail($mail) {
+		try {
+			$mail->send();
+			return true;
+		}catch (Exception $e) {
+			$this->_helper->notify('Mail non envoyé: vérifier la configuration du serveur de mail.');
+			return false;
+		}
+	}
+
+
 	public function deleteAction() {
 		if (
 			null !== (
diff --git a/library/Class/Article.php b/library/Class/Article.php
index dfbd7694e34e8d1a1a48f1a2fc4ffc7905cee53a..9fa5be44023c02a65cddd5e1e0183a5720d2d691 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -410,12 +410,9 @@ class Class_Article extends Storm_Model_Abstract {
 		 self::STATUS_REFUSED => 'Refusé',
 		 self::STATUS_ARCHIVED => 'Archivé'];
 
-	protected $_view;
 	protected $_loader_class = 'ArticleLoader';
 	protected $_table_name = 'cms_article';
 	protected $_table_primary = 'ID_ARTICLE';
-	protected $old_status;
-	protected $notify_message;
 	protected $_has_many = ['traductions' => ['model' => 'Class_Article',
 																						'role' => 'article_original',
 																						'dependents' => 'delete'],
@@ -567,14 +564,10 @@ class Class_Article extends Storm_Model_Abstract {
 
 
 	public function __construct() {
-
 		$this->_default_attribute_values['langue'] = Class_AdminVar::getDefaultLanguage();
 	}
 
 
-	public function getNotifyMessage() {
-		return $this->notify_message;
-	}
 
 	/**
 	 * @return string
@@ -708,11 +701,6 @@ class Class_Article extends Storm_Model_Abstract {
 		$this->setDateMaj($date->DateTimeDuJour());
 	}
 
-	public function setOldStatus($status) {
-		$this->old_status = $status;
-	}
-
-
 	public function beforeSave() {
 		$this->_updateDateMaj();
 
@@ -720,92 +708,6 @@ class Class_Article extends Storm_Model_Abstract {
 			$this->setDateCreation($this->getDateMaj());
 	}
 
-	public function afterSave() {
-		
-		$this->_sendMailWhenUpdatedStatusToValidationPending();
-		$this->_sendMailWhenUpdatedStatusToRefused();
-	}
-
-
-	protected function _sendMailWhenUpdatedStatusToRefused() {
-		if ($this->old_status != self::STATUS_REFUSED &&
-				$this->getStatus() == self::STATUS_REFUSED)  {
-			$this->_sendMailToAuteur();
-		}
-	}
-	
-
-	protected function _sendMailWhenUpdatedStatusToValidationPending() {
-		if ($this->old_status != self::STATUS_VALIDATION_PENDING &&
-				$this->getStatus() == self::STATUS_VALIDATION_PENDING)  {
-			$this->_sendMailToAdmin();
-		}
-	}
-
-
-	protected function _sendMailToAuteur() {
-	
-		$mail = new ZendAfi_Mail('utf8');
-		if(!$this->getAuteur()) {
-			$this->notify_message.= 'Mail non envoyé: article sans auteur.';
-			return;
-		}
-		if(!$mail_address = $this->getAuteur()->getMail()) {
-			$this->notify_message.= 'Mail non envoyé: '.$this->getNomCompletAuteur().' sans mail.';
-			return;
-		}
-
-		$body = $this->getRefusMessage();
-		$body = str_replace('TITRE_ARTICLE',$this->getTitre(),$body);
-		$body = str_replace('URL_ARTICLE',$this->getStaticUrl(),$body);
-		
-		$mail
-			->setFrom('no-reply@no-reply-afi.fr')
-			->addTo($mail_address)
-			->setSubject(quoted_printable_decode('[AFI-OPAC] Refus de l\'article '.$this->getTitre()))
-			->setBodyText($body,'utf-8',Zend_Mime::ENCODING_8BIT);
-		if($this->_sendMail($mail))
-			$this->notify_message.= 'Mail envoyé à: '.$mail_address;
-
-	}
-
-
-	protected function _sendMailToAdmin() {
-		$mail = new ZendAfi_Mail('utf8');
-		$all_admins=Class_Users::findAllBy(['role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL]);
-		$mails=[];
-		foreach ($all_admins as $admin) {
-			if (!$mail_admin=$admin->getMail())
-				continue;
-			$mails[]=$mail_admin;
-		}
-
-		if(!$mail_address = implode(',',$mails))
-			return;
-		$body = Class_AdminVar::getWorkflowTextMailArticlePending();
-		$body = str_replace('TITRE_ARTICLE',$this->getTitre(),$body);
-		$body = str_replace('URL_ARTICLE',$this->getStaticUrl(),$body);
-
-		$mail
-			->setFrom('no-reply@no-reply-afi.fr')
-			->addTo($mail_address)
-			->setSubject('[AFI-OPAC] Validation d\'article en attente: '.$this->getTitre())
-			->setBodyText($body);
-		if($this->_sendMail($mail))
-			$this->notify_message.= 'Mail de validation envoyé aux administrateurs.';
-	}
-
-
-	protected function _sendMail($mail) {
-		try {
-			$mail->send();
-			return true;
-		}catch (Exception $e) {
-			$this->notify_message.= 'Mail non envoyé: vérifier la configuration du serveur de mail.';
-			return false;
-		}
-		
-	}
 
 	/**
 	 * @param string $str_date
@@ -940,14 +842,6 @@ class Class_Article extends Storm_Model_Abstract {
 	}
 
 
-	public function getStaticUrl() {
-		return $this->_view->absoluteUrl(['controller'=>'cms',
-																			'module'=>'opac',
-																			'action'=>'articleview',
-																			'id'=> $this->getId()],null,true);
-	}
-
-
 	/**
 	 * @return string
 	 */
@@ -1102,11 +996,6 @@ class Class_Article extends Storm_Model_Abstract {
 	}
 
 
-	public function setView($view) {
-		$this->_view = $view;
-	}
-
-
 	public function getProfil() {
 		if(!$categorie = $this->getCategorie())
 			return null;
diff --git a/tests/application/modules/AbstractControllerTestCase.php b/tests/application/modules/AbstractControllerTestCase.php
index 26ac23aee575e5839e63ecd3cb4db94411647068..e0ae39f3a335ac5e32bc47e71b2d6d7fa3d13117 100644
--- a/tests/application/modules/AbstractControllerTestCase.php
+++ b/tests/application/modules/AbstractControllerTestCase.php
@@ -259,8 +259,11 @@ abstract class AbstractControllerTestCase extends Zend_Test_PHPUnit_ControllerTe
 	public function assertFlashMessengerContentContains($value, $message = '') {
 		$messages = $this->_getFlashMessengerMessages();
 		foreach($messages as $message_value){
-			$this->assertContains($value, $message_value, $message);
+			if (false!==strpos($message_value, $value))
+				return;
 		}
+
+		$this->fail("Flash messenger does not contains: ".$value.". ".$message);
 	}
 
 
diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php
index 53aed740a79a99e0f813e0242c78adfcb694bd5c..4b958ef736b7ebac6c2e1150fe5d1bd166885f53 100644
--- a/tests/application/modules/admin/controllers/CmsControllerTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerTest.php
@@ -147,7 +147,9 @@ abstract class CmsControllerTestCase extends Admin_AbstractControllerTestCase {
 		$this->concert = Class_Article::newInstanceWithId(4,
 																											['categorie' => $this->cat_evenements,
 																											 'titre' => 'Erik Truffaz en concert',
-																											 'auteur' => Class_Users::newInstanceWithIdAssertSave(2,['Nom' => 'Tom et Jerry','password'=>'toto','login'=>'tom']),
+																											 'auteur' => Class_Users::newInstanceWithIdAssertSave(2,['Nom' => 'Tom et Jerry',
+																																																							 'password'=>'toto',
+																																																							 'login'=>'tom']),
 																											 'description' => 'Venez nombreux ici: <img src="'.BASE_URL.'/images/bonlieu.jpg" />',
 																											 'contenu' => 'à Bonlieu. <img src="'.BASE_URL.'/images/truffaz.jpg" />',
 																											 'debut' => '2011-03-20',
@@ -1330,7 +1332,27 @@ class CmsControllerNewsAddActionPostWithoutWorkflowTest extends CmsControllerTes
 
 }
 
-class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerTestCase {
+
+
+abstract class CmsControllerWorkflowTestCase extends CmsControllerTestCase {
+	public function setUp() {
+		parent::setUp();
+
+		$this->article_wrapper
+			->whenCalled('find')
+			->answers($this->concert);
+
+		$this->mock_transport = new MockMailTransport();
+		Zend_Mail::setDefaultTransport($this->mock_transport);
+		Class_Profil::getCurrentProfil()->setMailSite('laurent@afi-sa.fr');
+	
+		Class_AdminVar::getLoader()->newInstanceWithId('WORKFLOW')->setValeur('1');
+	}
+}
+
+
+
+class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerWorkflowTestCase {
 	/** @var Class_Article */
 	protected $_article;
 	protected $mock_transport;
@@ -1350,15 +1372,6 @@ class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerTestCa
 	public function setUp() {
 		parent::setUp();
 		$this->_basePostDatas['auteur']=$this->_laurent;
-		$this->article_wrapper
-			->whenCalled('find')
-			->answers($this->concert);
-
-		$this->mock_transport = new MockMailTransport();
-		Zend_Mail::setDefaultTransport($this->mock_transport);
-		Class_Profil::getCurrentProfil()->setMailSite('laurent@afi-sa.fr');
-
-	
 		Class_AdminVar::getLoader()->newInstanceWithId('WORKFLOW')->setValeur('1');
 	}
 
@@ -1394,8 +1407,8 @@ class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerTestCa
 	public function newArticleSavedWithStatusAValiderShouldSendMail() {
 		$data = $this->_basePostDatas;
 		$data['status'] = Class_Article::STATUS_VALIDATION_PENDING;
-		$this->getRequest()->setMethod('POST')->setPost($data);
-		$this->dispatch('/admin/cms/newsadd/id_cat/23');
+		$this->postDispatch('/admin/cms/newsadd/id_cat/23', 
+												$data);
 		$this->_article = $this->article_wrapper->getFirstAttributeForLastCallOn('save');
 		$this->assertEquals(['laurent@afi-sa.fr', 'bernard@afi-sa.fr'],$this->mock_transport->getSentMails()[0]->getRecipients());
 	}
@@ -1466,61 +1479,60 @@ class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerTestCa
 }
 
 
-class CmsControllerWorkflowArticleRefusedTest extends CmsControllerNewsAddActionPostWithWorkflowTest {
-	
-	public function setup() {
-		parent::setup();
-		
+
+
+
+class CmsControllerWorkflowArticleRefusedTest extends CmsControllerWorkflowTestCase {
+	public function setUp() {
+		parent::setUp();
+		$this->concert
+			->setStatus(Class_Article::STATUS_DRAFT)
+			->setAuteur(Class_Users::newInstanceWithId(1,['mail'=>'bernard@afi-sa.fr']));
 	}
 
-	public function postArticleRefuser() {
-		$this->concert->setStatus(Class_Article::STATUS_DRAFT);
-		$this->concert->setAuteur(Class_Users::newInstanceWithId(1,['mail'=>'bernard@afi-sa.fr']));
 
+	public function postArticleRefuser() {
+	  $datas = [
+		'titre' => 'Katsuhiro Otomo en dédicace !',
+		'debut' => '',
+		'fin' => '',
+		'events_debut' => '',
+		'events_fin' => '',
+		'ckeditor_description' => '',
+		'id_cat' => 23,
+		'ckeditor_contenu' => 'Ne manquez pas cet évènement.',
+		'status' => Class_Article::STATUS_REFUSED
+		];
 
-		$data = $this->_basePostDatas;
-		$this->getRequest()->setMethod('POST')->setPost($data);
-		$this->dispatch('/admin/cms/newsadd/id/230');
-		$data['status'] = Class_Article::STATUS_REFUSED;
-		$this->getRequest()->setMethod('POST')->setPost($data);
-		$this->dispatch('/admin/cms/newsedit/id_cat/230');
+		$this->postDispatch('/admin/cms/newsedit/id/4',
+												$datas);
 	}
 
 
 	/** @test */
 	public function statusBrouillonUpdatedToRefuserShouldSendMail() {
+		$this->concert->getAuteur()->setMail('tom@acme.com');
 		$this->postArticleRefuser();
-		$this->_article = $this->article_wrapper->getFirstAttributeForLastCallOn('save');
-		$this->assertEquals([$this->_article->getAuteur()->getMail()],$this->mock_transport->getSentMails()[0]->getRecipients());
+		$this->assertEquals(['tom@acme.com'],
+												$this->mock_transport->getSentMails()[0]->getRecipients());
 	}
 
 	/** @test */
 	public function statusBrouillonUpdatedToRefuserAndAuteurNotSetShouldNotifyMessagePasDAuteur() {
-		$this->_basePostDatas['auteur']='';
+		$this->concert->setAuteur(null);
 		$this->postArticleRefuser();
-		$this->_article = $this->article_wrapper->getFirstAttributeForLastCallOn('save');
-		$this->assertEquals($this->_article->getNotifyMessage(), 'Mail non envoyé: article sans auteur.');
+		$this->assertFlashMessengerContentContains('Mail non envoyé: article sans auteur');
 	}
 
 
 	/** @test */
 	public function statusBrouillonUpdatedToRefuserAndAuteurWithOutMailShouldNotifyMessagePasDeMail() {
-		$this->_basePostDatas['auteur']->setMail('')->setLogin('Russe');
+		$this->concert->getAuteur()->setMail('')->setLogin('Russe');
 		$this->postArticleRefuser();
-		$this->_article = $this->article_wrapper->getFirstAttributeForLastCallOn('save');
-		$this->assertEquals($this->_article->getNotifyMessage(), 'Mail non envoyé: Russe sans mail.');
+		$this->assertFlashMessengerContentContains('Mail non envoyé: Russe sans mail.');
 	}
 
 
-	/** @test */
-	public function statusBrouillonUpdatedToRefuseWithAuteurAndMailShouldNotifyMessageEnvoyeWithRecipient() {
-		$this->postArticleRefuser();
-		$this->_article = $this->article_wrapper->getFirstAttributeForLastCallOn('save');
-		$this->assertEquals($this->_article->getNotifyMessage(), 'Mail envoyé à: laurent@afi-sa.fr');
-	}
-
-
-
 	/** @test */
 	public function sentMailToUserWhenRefusedShouldContainsDefaultTitle() {
 		$this->postArticleRefuser();