From 670e24dbeee0a2ff5c6163499ecdad6ba9708708 Mon Sep 17 00:00:00 2001
From: gloas <gloas@git-test.afi-sa.fr>
Date: Fri, 4 Oct 2013 09:53:39 +0000
Subject: [PATCH] ajout tests sur validation du formulaire d ajout d une
 categorie

---
 .../admin/controllers/UsergroupController.php | 38 ++++++++++---------
 library/Class/UserGroup.php                   |  2 +-
 .../controllers/UserGroupControllerTest.php   | 31 ++++++++++++++-
 3 files changed, 51 insertions(+), 20 deletions(-)

diff --git a/application/modules/admin/controllers/UsergroupController.php b/application/modules/admin/controllers/UsergroupController.php
index 804c7bd3a7c..3691be81cef 100644
--- a/application/modules/admin/controllers/UsergroupController.php
+++ b/application/modules/admin/controllers/UsergroupController.php
@@ -48,9 +48,9 @@ class Admin_UsergroupController extends ZendAfi_Controller_Action {
 
 
 	public function addAction() {
+		$categorie = Class_UserGroupCategorie::find((int)$this->_getParam('id_cat'));
 		$this->view->titre = "Ajouter un groupe d'utilisateurs";
-		$new_group = Class_UserGroup::getLoader()->newInstance();
-
+		$new_group = Class_UserGroup::getLoader()->newInstance()->setCategorie($categorie);
 		$this->_setupGroupFormAndSave('add', $new_group);
 	}
 
@@ -273,13 +273,15 @@ class Admin_UsergroupController extends ZendAfi_Controller_Action {
 
 
 	public function cataddAction() {
-		if ($categorie = $this->_isCategorieSaved()) {
+		$form = new ZendAfi_Form_UserGroupCategorie();
+		$categorie = new Class_UserGroupCategorie();
+		if ($this->_isCategorieSaved($categorie,$form)) {
 			$this->_helper->notify($this->view->_('La catégorie "%s" a été ajoutée', $categorie->getLibelle()));
 			$this->_redirect(sprintf('admin/usergroup/index/id_cat/%d', $categorie->getId()));
 			return;
 		}
 
-		$this->view->form= new ZendAfi_Form_UserGroupCategorie();
+		$this->view->form= $form;
 		$this->view->titre = $this->view->_('Ajouter une catégorie d\'utilisateurs');
 		if ($categorie_parent = Class_UserGroupCategorie::find((int)$this->_getParam('id')))
 			$this->view->form->setDefault('parent_id', $categorie_parent->getId());
@@ -301,13 +303,15 @@ class Admin_UsergroupController extends ZendAfi_Controller_Action {
 
 
 	function cateditAction() {
+		$form = new ZendAfi_Form_UserGroupCategorie();
+		$categorie = new Class_UserGroupCategorie();
 		$this->view->titre = "Modifier une catégorie de groupes";
 		if (!$categorie = Class_UserGroupCategorie::find((int)$this->_getParam('id'))) {
 			$this->_redirect('admin/usergroup');
 			return;
 		}
 
-		if ($this->_isCategorieSaved($categorie)) {
+		if ($this->_isCategorieSaved($categorie, $form)) {
 			$this->_helper->notify($this->_('La catégorie "%s" a été sauvegardée', $categorie->getLibelle()));
 			$this->_redirect(sprintf('admin/usergroup/index/id_cat/%d', $categorie->getId()));
 			return;
@@ -365,20 +369,18 @@ class Admin_UsergroupController extends ZendAfi_Controller_Action {
 	 * @param Class_SitothequeCategorie $categorie
 	 * @return bool
 	 */
-	protected function _isCategorieSaved() {
-		if ($this->_request->isPost()) {
-			$post = $this->_request->getPost();
-			$filter = new Zend_Filter_StripTags();
-			$post['libelle'] = trim($filter->filter($this->_request->getPost('libelle')));
-			$categorie= (new Class_UserGroupCategorie());
-			$categorie
-				->updateAttributes($post)
-				->save();
-			
-			return $categorie;
-		}
+	protected function _isCategorieSaved($categorie,$form) {
+		if(!$this->_request->isPost()) 
+			return false;
 
-		return false;
+		$post = $this->_request->getPost();
+		$filter = new Zend_Filter_StripTags();
+		$post['libelle'] = trim($filter->filter($this->_request->getPost('libelle')));
+
+		$categorie
+			->updateAttributes($post);
+
+		return $form->isValid($categorie) ? $categorie->save() : false;
 	}
 
 
diff --git a/library/Class/UserGroup.php b/library/Class/UserGroup.php
index d102453851f..b2197603409 100644
--- a/library/Class/UserGroup.php
+++ b/library/Class/UserGroup.php
@@ -28,7 +28,7 @@ class Class_UserGroup extends Storm_Model_Abstract {
 													 'users' => [ 'through' => 'user_group_memberships',
 																				'unique' => true ] ];
 	protected $_belongs_to = ['categorie' => ['model' => 'Class_UserGroupCategorie',
-																						'referenced_in' => 'ID_CAT']];
+																						'referenced_in' => 'id_cat']];
 	// Les droits doivent être une puissance de 2 (ce sont des masques)
 	const RIGHT_SUIVRE_FORMATION = 1;
 	const RIGHT_DIRIGER_FORMATION = 2;
diff --git a/tests/application/modules/admin/controllers/UserGroupControllerTest.php b/tests/application/modules/admin/controllers/UserGroupControllerTest.php
index 6facda48a51..0d64c54ac7a 100644
--- a/tests/application/modules/admin/controllers/UserGroupControllerTest.php
+++ b/tests/application/modules/admin/controllers/UserGroupControllerTest.php
@@ -274,7 +274,7 @@ class Admin_UserGroupControllerAddTest extends Admin_UserGroupControllerTestCase
 class Admin_UserGroupControllerAddPostTest extends Admin_UserGroupControllerTestCase {
 	public function setUp() {
 		parent::setUp();
-		$this->postDispatch('admin/usergroup/add',
+		$this->postDispatch('admin/usergroup/add/id_cat/2',
 												array('libelle' => 'Intervenants'));
 	}
 
@@ -290,6 +290,13 @@ class Admin_UserGroupControllerAddPostTest extends Admin_UserGroupControllerTest
 	public function responseShouldRedirectToDefaultAction() {
 		$this->assertRedirectTo('/admin/usergroup');
 	}
+
+
+	/** @test */
+	public function intervenantShouldBeInCategorieAssociation() {
+		$this->assertEquals(2, 
+												Class_UserGroup::getLoader()->getFirstAttributeForLastCallOn('save')->getIdCat());
+	}
 }
 
 
@@ -315,6 +322,28 @@ class Admin_UserGroupControllerAddPostInvalidDataTest extends Admin_UserGroupCon
 
 
 
+class Admin_UserGroupCategorieControllerCataddPostInvalidDataTest extends Admin_UserGroupControllerTestCase {
+	public function setUp() {
+		parent::setUp();
+		$this->postDispatch('admin/usergroup/catadd',
+												array('libelle' => ''));
+	}
+
+
+	/** @test */
+	public function newGroupShouldNotBeCreated() {
+		$this->assertFalse(Class_UserGroupCategorie::getLoader()->methodHasBeenCalled('save'));
+	}
+
+
+	/** @test */
+	public function errorsShouldContainsUneValeurEstRequise() {
+		$this->assertXPathContentContains('//ul[@class="errors"]', 'Une valeur est requise');
+	}
+}
+
+
+
 class Admin_UserGroupControllerEditGroupStagiairesTest extends Admin_UserGroupControllerTestCase {
 	public function setUp() {
 		parent::setUp();
-- 
GitLab