From 2de8cefadedc2454dff054e8b0cd21ee25e4e673 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Mon, 4 May 2020 19:27:18 +0200 Subject: [PATCH] Diverses simplifications, refactorisations, optimisations (v3.7.9.24): --- README.md | 39 ++++++++++++++++++++++++--------------- TESTS.sh | 32 +++++++++++++++++++++----------- src/Controller/AppController.php | 47 +++++++++++++++++++++++++---------------------- src/Controller/MaterielsController.php | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- src/Model/Entity/Materiel.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Model/Entity/User.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ tests/Fixture/MaterielsFixture.php | 15 ++++++++------- tests/TestCase/Controller/General.php | 7 ++++++- tests/TestCase/Controller/MaterielsControllerTest.php | 24 ++++++++++++++++++------ 9 files changed, 262 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 27d9dc9..4aeab95 100644 --- a/README.md +++ b/README.md @@ -53,24 +53,20 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 30/04/2020 -Version: 3.7.9.23 +Date: 04/05/2020 +Version: 3.7.9.24 Author: EP Commentaire: Diverses améliorations, simplifications, refactorisations, optimisations : - - ajout de l'option globale $this->SUPERADMIN_CAN_DO_EVERYTHING dans AppController (false par défaut) pour donner rapidement TOUS les droits à superadmin (juste passer à true) - - regroupement des conditions d'accès des 3 actions ADD, EDIT, et DELETE car très semblables => remplacé 60 lignes par 10 !!! - - Grosse simplification (et bugfixes !!) des conditions d'accès à la plupart des actions de MaterielsController => c'est bien plus clair à lire - - Nouvelles règles ACL (conditions d'accès) sous forme de tableau $acl => en cours... - => ce changement offre plusieurs avantages, et devrait notamment permettre de : - - clarifier les conditions d'accès, - - les rendre plus facilement modifiables - - les rendre copiables d'une action à l'autre (et donc facilement réutilisables sans avoir à réécrire de code) - - afficher une page web présentant automatiquement (dynamiquement) une synthèse claire de toutes les ACL, action par action, et profil par profil - (ce qui permettra de se rendre compte plus facilement de l'état actuel des conditions d'accès) - - Utilisation de $this->action et $this->action_id (...) de AppController.beforeFilter() un peu partout - - Utilisation de $this->entity de AppController.beforeFilter() un peu partout pour simplifier et surtout éviter (bcp) les accès BD redondants - - Optimisations pour éviter trop de requetes en BD et simplification des tests acl + - Nouvelle variable $this->current_user_entity "globale" et héritée par tous les controleurs (car définie dans AppController.beforeFilter()) + => cette variable est un objet Entity et donc avec des propriétés (virtuelles) pratiques permettant de faire par exemple : + - $user->is_admin + - $user->is_resp + - $user->is_super + mais aussi : + - $user->is_admin_or_more() + - $user->is_admin_or_less() + - bugfix 3 TESTS !!! IMPORTANT : - Pour connaitre la version actuelle, taper "./VERSION" @@ -105,6 +101,19 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https ----------------------------------------------------------------------------------------------------------- +30/04/2020 Version 3.7.9.23 (EP) + Diverses améliorations, simplifications, refactorisations, optimisations : + - ajout de l'option globale $this->SUPERADMIN_CAN_DO_EVERYTHING dans AppController (false par défaut) pour donner rapidement TOUS les droits à superadmin (juste passer à true) + - regroupement des conditions d'accès des 3 actions ADD, EDIT, et DELETE car très semblables => remplacé 60 lignes par 10 !!! + - Grosse simplification (et bugfixes !!) des conditions d'accès à la plupart des actions de MaterielsController => c'est bien plus clair à lire + - Nouvelles règles ACL (conditions d'accès) sous forme de tableau $acl => en cours... + => ce changement offre plusieurs avantages, et devrait notamment permettre de : + - clarifier les conditions d'accès, + - les rendre plus facilement modifiables + - les rendre copiables d'une action à l'autre (et donc facilement réutilisables sans avoir à réécrire de code) + - afficher une page web présentant automatiquement (dynamiquement) une synthèse claire de toutes les ACL, action par action, et profil par profil + (ce qui permettra de se rendre compte plus facilement de l'état actuel des conditions d'accès) + 29/04/2020 Version 3.7.9.22 (EP) Diverses améliorations, simplifications, optimisations : - factorisation d'une partie de add_or_edit() dans AppController (appelée par les add_or_edit() de chaque controleur spécifique) diff --git a/TESTS.sh b/TESTS.sh index d13f2ab..e01c19c 100755 --- a/TESTS.sh +++ b/TESTS.sh @@ -2,21 +2,31 @@ #rm -rf tmp/cache/*/* sudo chmod o+w tmp/cache/persistent/myapp_cake_core_translations_* > /dev/null 2>&1 +# Tous les tests +TESTALL=1 +# Quelques tests seulement (au moins 1) +#TESTALL=0 -vendor/bin/phpunit || vendor/phpunit/phpunit/phpunit +if [[ $TESTALL == 1 ]] ; then + vendor/bin/phpunit || vendor/phpunit/phpunit/phpunit -# Si ca ne marche pas, essayer plutot: -#vendor/phpunit/phpunit/phpunit + # Si ca ne marche pas, essayer plutot: + #vendor/phpunit/phpunit/phpunit + + # Plus de details: + #vendor/bin/phpunit --debug + #vendor/bin/phpunit --verbose --log-tap tap.log + #vendor/bin/phpunit --testdox -# Plus de details: -#vendor/bin/phpunit --debug -#vendor/bin/phpunit --verbose --log-tap tap.log -#vendor/bin/phpunit --testdox +else + # Executer UN SEUL test: + # Ex: je veux executer ONLY le test testMat31CreateAs() de MaterielsControllerTest: + #vendor/bin/phpunit --filter testMat31CreateAs + vendor/bin/phpunit --filter testMat32CreateAdministratifOrTechnicalAs + vendor/bin/phpunit --filter testACLEditUtilisateur + vendor/bin/phpunit --filter testMatCopy -# Executer UN SEUL test: -# Ex: je veux executer ONLY le test testMat31CreateAs() de MaterielsControllerTest: -#vendor/bin/phpunit --filter testMat31CreateAs -#vendor/bin/phpunit --filter testMat32CreateAdministratifOrTechnicalAs +fi sudo rm -f tmp/cache/persistent/myapp_cake_core_translations_* diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 96770db..aed9b67 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -66,10 +66,10 @@ class AppController extends Controller protected $action; protected $entity; protected $entity_id; + // Current (priviledged) USER (if so, otherwise = NULL) from DB (Entity class) + //private $CURRENT_PRIVILEDGED_USER = null; + protected $current_user_entity = null; - // Current priviledged USER (if so, otherwise = NULL) - private $CURRENT_PRIVILEDGED_USER = null; - // Current ROLE (by default = "Utilisateur") private $CURRENT_ROLE = null; @@ -471,7 +471,7 @@ class AppController extends Controller * $user est l'equivalent de $this->LdapAuth->user() * */ - public function isAuthorized($user) + public function isAuthorized(Array $user) { $this->myDebug("step 2C (general): AppController.isAuthorized()"); @@ -553,23 +553,26 @@ class AppController extends Controller return $users_name; } - - public function getTablePriviledgedUserFromCurrentSessionUserIfExists($user = null) - { - if (! $this->CURRENT_PRIVILEDGED_USER) { + // @deprecated + public function getTablePriviledgedUserFromCurrentSessionUserIfExists($user = null) { + return $this->getUserEntity($user); + } + public function getUserEntity($user = null) { + //if (! $this->CURRENT_PRIVILEDGED_USER) { + if (! $this->current_user_entity) { $configuration = $this->confLabinvent; - $username = $user ? $user[$configuration->ldap_authenticationType][0] : $this->LdapAuth->user($configuration->ldap_authenticationType)[0]; - $priviledgedUser = TableRegistry::getTableLocator()->get('Users')->find() - ->where([ - 'username' => $username - ]) - -> + $ldapAuthType = $configuration->ldap_authenticationType; + $username = $user ? $user[$ldapAuthType] : $this->LdapAuth->user($ldapAuthType); + $username = $username[0]; + $priviledgedUser = TableRegistry::getTableLocator()->get('Users') + ->find() + ->where(['username' => $username]) + ->first(); // ->where(['username' => $this->LdapAuth->user('cn')[0]]) - first(); // if (! $priviledgedUser) $priviledgedUser = "Unpriviledged User (not in table utilisateurs)"; - $this->CURRENT_PRIVILEDGED_USER = $priviledgedUser; + $this->current_user_entity = $priviledgedUser; } - return $this->CURRENT_PRIVILEDGED_USER; + return $this->current_user_entity; } public function getUserRole($user = null) @@ -585,8 +588,7 @@ class AppController extends Controller private function userHasRole($expectedRole, $ORMORE = false) { $role = $this->getUserRole(); - if (! $ORMORE) - return ($role == $expectedRole); + if (!$ORMORE) return ($role == $expectedRole); return ($this->getRoleLevel($role) >= $this->getRoleLevel($expectedRole)); /* * //$hasRole = false; @@ -843,11 +845,12 @@ class AppController extends Controller if ($this->LdapAuth->user()) { // ATTENTION, $priviledgedUser = NULL si l'utilisateur courant n'est pas un utilisateur privilégié // (c'est à dire s'il n'est pas dans la table "utilisateurs") - $this->priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists(); + //$this->priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists(); + $this->current_user_entity = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists(); //$role = $this->getUserRole(); $this->userRole = $this->getUserRole(); $profile = self::PROFILES["$this->userRole"]; - $this->myDebug("- priviledgedUser is {$this->priviledgedUser}"); + $this->myDebug("- priviledgedUser is {$this->current_user_entity}"); $this->myDebug("- userRole is {$this->getUserRole()}", "- profile is: $profile"); // L'utilisateur connecté (return null si pas connecté) // $this->Auth->user('id'); @@ -867,7 +870,7 @@ class AppController extends Controller $this->set('role', $this->userRole); $this->set('profile', $profile); $this->set('username', $this->userName); - $this->set('priviledgedUser', $this->priviledgedUser); + $this->set('priviledgedUser', $this->current_user_entity); $this->set('USER_IS_UTILISATEUR', $this->USER_IS_UTILISATEUR); $this->set('USER_IS_ADMIN', $this->USER_IS_ADMIN); diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 2fd5456..cecb140 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -259,6 +259,27 @@ class MaterielsController extends AppController { //if (parent::isAuthorized($userFromSession)) return TRUE; $this->myDebug("step 2A (specific): MaterielsController.isAuthorized(user)"); $this->myDebug("- user is:", $user); + + $this->current_user_entity = $this->getUserEntity(); + assert($this->current_user_entity != null); + if ($this->current_user_entity == null) throw new \Exception("pas d'utilisateur défini !!!"); + debug($this->current_user_entity); + + debug("user is xxx :"); + debug($this->current_user_entity->is_user); + debug($this->current_user_entity->is_resp); + debug($this->current_user_entity->is_admin); + debug($this->current_user_entity->is_adminplus); + debug($this->current_user_entity->is_super); + + debug("user is xxx or more :"); + debug($this->current_user_entity->is_resp_or_more); + debug($this->current_user_entity->is_admin_or_more); + + debug("user is xxx or less :"); + debug($this->current_user_entity->is_resp_or_less); + debug($this->current_user_entity->is_admin_or_less); + /* ICI C'EST OK $toto="tititoto"; $this->set(compact('toto')); @@ -368,7 +389,8 @@ class MaterielsController extends AppController { //debug("action $action, id $this->entity_id"); //return $this->isAuthorizedActionFor($action, $this->getIdPassed(), $this->userRole, $this->userFromSession, $this->userCname); return $this->isAuthorizedActionFor( - $action?$action:$this->action, $this->entity_id, + $action ? $action : $this->action, + $this->entity_id, $this->userRole, $this->userFromSession, $this->userCname ); @@ -390,6 +412,7 @@ class MaterielsController extends AppController { $this->myDebug("step 2B (intermediaire): MaterielsController.isAuthorizedAction($role, $action, $id, user, $userCname)"); //$this->myDebug("- user is ", $user); + //debug($this->entity->tititoto()); // Raccourci pour SUPERADMIN : par défaut il a (presque) TOUS les droits, donc c'est vite vu ! // (sauf certaines actions afin de lui donner un comportement proche de ADMIN) if ($this->USER_IS_SUPERADMIN) { @@ -397,8 +420,21 @@ class MaterielsController extends AppController { //pr($this->Materiels->toto()); // Il suffit de passer $this->SUPERADMIN_CAN_DO_EVERYTHING à true pour TOUT autoriser à superadmin : if (! $this->SUPERADMIN_CAN_DO_EVERYTHING) { + $acl = [ + 'add' => "(id==0) || (id>0 && entity_is_created)", + 'edit' => "entity_is_created", + 'delete' => "entity_is_created", + 'statusValidated' => "entity_is_created", + 'statusToBeArchived' => "entity_is_validated", + 'statusArchived' => "entity_is_tobearchived", + 'statusCreated' => "! entity_is_created", + 'printLabelRuban' => "config_has_printer && entity_is_validated", + // toutes les autres actions => ok + '*' => 'Y' + ]; // add by copy, edit, ou delete => ssi CREATED if ( ($this->action=='add' && $id>0) || in_array($this->action,['edit', 'delete', 'statusValidated']) ) return $this->isCreated($id); + //if ($this->action==’statusValidated’) return $this->isCreated($id); if ($this->action=='statusToBeArchived') return $this->isValidated($id); if ($this->action=='statusArchived') return $this->isToBeArchived($id); if ($this->action=='statusCreated') return ! $this->isCreated($id); @@ -450,7 +486,9 @@ class MaterielsController extends AppController { // Conditions supplémentaires pour profils User et Responsable : if ( in_array($role, ['Utilisateur', 'Responsable']) ) { //return $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0]); - $isHis = $this->isHis($id, $user); + //$isHis = $this->isHis($id, $user); + //$isHis = $this->isHis($id); + $isHis = $this->belongsToCurrentUser($id); return $role=='Utilisateur' ? $isHis : $isHis||$this->isRespGroup($id, $userCname); /* if ($role=='Utilisateur') return $isHis; @@ -768,7 +806,9 @@ class MaterielsController extends AppController { // Archivage case 'statusArchived': - return $this->isToBeArchived($id) && $this->USER_IS_ADMIN_AT_LEAST(); + //return $this->isToBeArchived($id) && $this->USER_IS_ADMIN_AT_LEAST(); + if (! $this->isToBeArchived($id)) return FALSE; + return $this->USER_IS_ADMIN_AT_LEAST(); // /$id = (int) $this->request->getAttribute('params')['pass'][0]; // if ($this->userHasRoleAtLeast('Administration')) { // if ($role == 'Super Administrateur') { @@ -821,10 +861,11 @@ class MaterielsController extends AppController { * cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html */ // True if materiel with id $id is owned by $nomCreateur - public function isOwnedBy($id, $nomCreateur) + public function isOwnedBy($id, $user_name) { - $entity = $this->getEntity($id); - return in_array($nomCreateur, [$entity->nom_createur, $entity->nom_responsable]); + //$entity = $this->getEntity($id); + //return in_array($user_name, [$entity->nom_createur, $entity->nom_responsable]); + return $this->getEntity($id)->isOwnedOrDeclaredByUser($user_name); /* return ($this->Materiels->exists([ 'id' => $id, @@ -837,10 +878,14 @@ class MaterielsController extends AppController { } // True if materiel with id $id is owned by current user - public function isHis($id, $userFromSession) { - return ($this->isOwnedBy($id, $userFromSession['sn'][0] . ' ' . $userFromSession['givenname'][0])); + //public function isHis($id, $userFromSession) { + //public function isHis($matos_id) { + public function belongsToCurrentUser($id) { + //return ($this->isOwnedBy($id, $userFromSession['sn'][0] . ' ' . $userFromSession['givenname'][0])); + return $this->isOwnedBy($id, $this->current_user_entity->nom); } + public function isRespGroup($id, $loginResponsable) { // Get user @@ -1054,6 +1099,13 @@ class MaterielsController extends AppController { public function view($id = null) { $this->myDebug("step 3: MaterielsController.view()"); + + /* + debug($this->getEntity($id)); + debug("matos is status xxx:"); + debug($this->getEntity($id)->is_created); + debug($this->getEntity($id)->is_validated); + */ $materiel = $this->Materiels->get($id, [ 'contain' => [ @@ -1105,9 +1157,10 @@ class MaterielsController extends AppController { // Current user is same group as current materiel $USER_IS_SAME_GROUP_AS_MATERIEL = ( - ( isset($this->priviledgedUser->groupes_metier_id) && $this->priviledgedUser->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->priviledgedUser->groupes_metier_id ) + //( isset($this->priviledgedUser->groupes_metier_id) && $this->priviledgedUser->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->priviledgedUser->groupes_metier_id ) + ( isset($this->current_user_entity->groupes_metier_id) && $this->current_user_entity->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->current_user_entity->groupes_metier_id ) || - ( isset($this->priviledgedUser->groupe_thematique_id) && $this->priviledgedUser->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->priviledgedUser->groupe_thematique_id ) + ( isset($this->current_user_entity->groupe_thematique_id) && $this->current_user_entity->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->current_user_entity->groupe_thematique_id ) ); $this->set(compact('USER_IS_SAME_GROUP_AS_MATERIEL')); diff --git a/src/Model/Entity/Materiel.php b/src/Model/Entity/Materiel.php index 7358921..3851083 100755 --- a/src/Model/Entity/Materiel.php +++ b/src/Model/Entity/Materiel.php @@ -74,6 +74,59 @@ class Materiel extends Entity 'id' => false ]; + public function tititoto() { + return "tototiti"; + } + + // (EP 20200504) + // Propriétés virtuelles (attributs virtuels de l'entité matériel) + // A utiliser dans le controleur ainsi : $materiel->is_created + //public function isCreated() { return $this->status == 'CREATED'; } + //protected function _getIsCreated() { return $this->_fields['status'] == 'CREATED'; } + protected function _getIsCreated() { return $this->status == 'CREATED'; } + //return $this->status == 'CREATED'; + protected function _getIsValidated() { return $this->status == 'VALIDATED'; } + //protected function _getIsValidated() { return $this->_fields['status'] == 'VALIDATED'; } + //public function is_tobearchived() { return $this->status == 'TOBEARCHIVED'; } + protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; } + protected function _getIsArchived() { return $this->status == 'ARCHIVED'; } + + //public function isUsedOrCreatedByUser($user) { + public function isOwnedOrDeclaredByUser($username) { + return in_array($username, [$this->nom_createur, $this->nom_responsable]); + } + /* + public function isSameGroupAsUser($user_groupid1, $user_groupid2) { + // Responsable groupe métier ? + $group = 'groupes_metier'; + $group_fk = $group.'_id'; + if ( + $user_groupid1 !== null + && + $user_groupid1 != TableRegistry::getTableLocator()->get('GroupesMetiers') + ->find() + ->where(['nom =' => 'N/A']) + ->first()['id'] + ) return $this->$group_fk == $user_groupid1; + + // Responsable groupe thématique ? + $group = 'groupe_thematique'; + $group_fk = $group.'_id'; + if ( + $u[$group_fk] !== null + && + $u[$group_fk] != TableRegistry::getTableLocator()->get('GroupesThematiques') + ->find() + ->where(['nom =' => 'N/A']) + ->first()['id'] + ) return $this->getEntity($id)->$group_fk == $u[$group_fk]; + + // sinon, pas responsable de groupe + return false; + } // isSameGroupAsUser + */ + + /* 14/1/19 bake autogenerated: protected $_accessible = [ 'designation' => true, diff --git a/src/Model/Entity/User.php b/src/Model/Entity/User.php index 1bc8cf0..2d95e21 100755 --- a/src/Model/Entity/User.php +++ b/src/Model/Entity/User.php @@ -56,4 +56,48 @@ class User extends Entity return $hasher->hash($password); } } + + // (EP 20200504) - Champs virtuels + + // Nom Prénom + //protected function _getFullname() { return $this->name.' '.$this->firstname; } + + // Champs virtuels $user->is_xxx +/* + public function isUser() { return $this->role == 'Utilisateur'; } + public function is_resp() { return $this->role == 'Responsable'; } + public function is_admin() { return $this->role == 'Administration'; } + public function is_super() { return $this->role == 'Super Administrateur'; } + */ + protected function _getIsUser() { return $this->role == 'Utilisateur'; } //return $this->_fields['status'] == 'CREATED'; + protected function _getIsResp() { return $this->role == 'Responsable'; } + protected function _getIsAdmin() { return $this->role == 'Administration'; } + protected function _getIsAdminplus() { return $this->role == 'Administration Plus'; } + protected function _getIsSuper() { return $this->role == 'Super Administrateur'; } + + + // Champs virtuels $user->is_xxx_or_more + //public function isRespOrMore() { + protected function _getIsRespOrMore() { + return in_array($this->role, ['Responsable', 'Administration', 'Administration Plus', 'Super Administrateur']); + } + public function _getIsAdminOrMore() { + return in_array($this->role, ['Administration', 'Administration Plus', 'Super Administrateur']); + } + public function _getIsAdminplusOrMore() { + return in_array($this->role, ['Administration Plus', 'Super Administrateur']); + } + + // Champs virtuels $user->is_xxx_or_less + public function _getIsRespOrLess() { + return in_array($this->role, ['Utilisateur', 'Responsable']); + } + public function _getIsAdminOrLess() { + return in_array($this->role, ['Utilisateur', 'Responsable', 'Administration']); + } + public function _getIsAdminplusOrLess() { + return in_array($this->role, ['Utilisateur', 'Responsable', 'Administration', 'Administration Plus']); + } + + } diff --git a/tests/Fixture/MaterielsFixture.php b/tests/Fixture/MaterielsFixture.php index 557bb59..40350b9 100755 --- a/tests/Fixture/MaterielsFixture.php +++ b/tests/Fixture/MaterielsFixture.php @@ -630,11 +630,12 @@ class MaterielsFixture extends TestFixture { 'lieu_detail' => 'Lorem ipsum dolor sit amet', //'nom_responsable' => 'Lorem ipsum dolor sit amet', - 'nom_responsable' => 'test0 test9', - //'nom_responsable' => 'user5 USER', + //'nom_responsable' => 'test0 test9', + 'nom_responsable' => 'user5 USER', 'email_responsable' => 'Lorem ipsum dolor sit amet', //'nom_createur' => 'Lorem ipsum dolor sit amet', - 'nom_createur' => 'test0 test9', + //'nom_createur' => 'test0 test9', + 'nom_responsable' => 'user5 USER', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:29', 'modified' => '2016-04-19 09:09:29', @@ -748,11 +749,11 @@ class MaterielsFixture extends TestFixture { 'date_archivage' => '2016-04-19', 'etiquette' => 0, 'lieu_detail' => 'Lorem ipsum dolor sit amet', - 'nom_responsable' => 'test0 test9', - //'nom_responsable' => 'user5 USER', + //'nom_responsable' => 'test0 test9', + 'nom_responsable' => 'user5 USER', 'email_responsable' => 'Lorem ipsum dolor sit amet', - 'nom_createur' => 'test0 test9', - //'nom_createur' => 'user5 USER', + //'nom_createur' => 'test0 test9', + 'nom_createur' => 'user5 USER', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:29', 'modified' => '2016-04-19 09:09:29', diff --git a/tests/TestCase/Controller/General.php b/tests/TestCase/Controller/General.php index 214e41c..b1c37fb 100644 --- a/tests/TestCase/Controller/General.php +++ b/tests/TestCase/Controller/General.php @@ -28,8 +28,13 @@ class General extends IntegrationTestCase { 'ADMINP', 'SUPER' ]; + /* + * (EP 20200504) + * Supprimé le cas USER_from_ldap car tous les users sont desormais dans la table users. + * On n'a donc plus jamais ce cas... + */ protected $ROLES6 = [ - ['USER_from_ldap'], + //['USER_from_ldap'], ['USER'], ['RESP'], ['ADMIN'], diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index 2b91e8b..a3cf287 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -483,13 +483,20 @@ class MaterielsControllerTest extends General { $newMateriel["$fields[0]"] = $i; $newMateriel["$fields[1]"] = $j; $combination = [$i,$j]; + //debug($combination); // ni administratif ni technique => must FAIL if ($combination == [0,0]) $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); // technique only if ($combination == [0,1]) { // cree un nouveau materiel //$this->_testMatCreateAs($role, $newMateriel, implode(',',$combination)); - $this->testMat31CreateAs($role, $newMateriel, implode(',',$combination)); + //$this->testMat31CreateAs($role, $newMateriel, implode(',',$combination)); + /* + $this->authAs($role); + $this->get('/materiels/index'); + $this->assertResponseContains("Liste des matériels (6)", $role.','.implode($combination)); + */ + $this->testMat31CreateAs($role, $newMateriel); // supprimer un materiel pour avoir toujours le meme nombre //TODO: impossible de supprimer le matos 1, why ??? //$this->post('/materiels/delete/1'); @@ -497,6 +504,7 @@ class MaterielsControllerTest extends General { $this->get('/materiels/index'); $nbmat = $this->USER_IS_ADMIN_AT_LEAST() ? 7 : 6; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.implode($combination)); + //$this->assertResponseContains("Liste des matériels (7)", $role.','.implode($combination)); } // Administratif : (1,0) et (1,1) : ok si prix > 800 // No need to test the case [1,1] because same as [1,0] @@ -547,10 +555,10 @@ class MaterielsControllerTest extends General { $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role); //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); $this->post('/materiels/add', $materiel); + $nbmat++; // APRES add $this->get('/materiels/index'); - $nbmat++; // VOIR LE HTML DE LA PAGE WEB //var_dump($this->_getBodyAsString()); $this->assertResponseContains("Liste des matériels (".$nbmat.")", "(testMat31CreateAs): Le matériel ne s'ajoute pas correctement (avec le profil $role)"); @@ -699,17 +707,20 @@ class MaterielsControllerTest extends General { } // Called by testMatCopy() just above + //if ($do1) $this->_testMatCopy(1, true, $role, 1, [], 'TEST-2014-0001'); + private function _testMatCopy($testnum, $COPIED, $role, $id, array $materiel_new_data=[], $num_inventaire=NULL) { //debug("_testMatCopy numéro ".$testnum); - if ($this->DEBUG) { - echo("\n"); - echo("_testMatCopy (with role ".$role.") numéro ".$testnum." :"); - } $designation = isset($materiel_new_data->designation) ? $materiel_new_data->designation : 'matos 1 USER (C)'; // AVANT add // USER ne voit pas les materiels ARCHIVED $nbmat = $this->USER_IS_ADMIN_AT_LEAST() ? 7 : 6; + if ($this->DEBUG) { + echo("\n _testMatCopy (avec role $role et test numéro $testnum) :"); + echo("\n designation: $designation"); + echo("\n nb matos: $nbmat"); + } $this->_checkNbMaterielInIndexViewIs(true, $role, $nbmat); /* $this->get('/materiels/index'); @@ -719,6 +730,7 @@ class MaterielsControllerTest extends General { */ $this->post('/materiels/add/'.$id, $materiel_new_data); $nbmat++; + //debug($nbmat); // APRES add $this->_checkNbMaterielInIndexViewIs($COPIED, $role, $nbmat, $designation, $num_inventaire); -- libgit2 0.21.2