diff --git a/CHANGELOG b/CHANGELOG index 823172a..607de4c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -353,6 +353,9 @@ Commencer à implémenter le nouveau workflow v5 : ======= TODO ======= *) + champ "budgets" à rendre optionnel dans schéma BD... + + *) validation (=livré ET payé) Facture jointe (si > 10K) @@ -396,7 +399,13 @@ Commencer à implémenter le nouveau workflow v5 : ======= CHANGES ======= ------- -13/09/2021 v5.2.6-3.7.9 +13/09/2021 v5.2.8-3.7.9 + - Bugfix TESTS : Tests: 193, Assertions: 3181, Errors: 1, Failures: 46, Incomplete: 16 + - donner valeur par défaut à budgets dans fixtures... + - bugfix getNextStatusFrom() + +------- +13/09/2021 v5.2.7-3.7.9 - Champs obligatoires "etiquette posée" et "n° inventaire tutelles" gérés via config (si obligatoires, ces champs ne sont pas demandés à la saisie, mais un simple rappel est affiché sur la vue détaillée du matériel) diff --git a/README.md b/README.md index 9298c70..aeb9c65 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 13/09/2021 -Version: v5.2.7-3.7.9 +Version: v5.2.8-3.7.9 diff --git a/TESTS.sh b/TESTS.sh index 5f53a08..110b176 100755 --- a/TESTS.sh +++ b/TESTS.sh @@ -20,8 +20,8 @@ echo "IN $(pwd)" -TESTEXEC=vendor/bin/phpunit -TESTEXEC2=vendor/phpunit/phpunit/phpunit +TESTEXEC=vendor/phpunit/phpunit/phpunit +TESTEXEC2=vendor/bin/phpunit # Tous les tests TESTALL=1 @@ -34,7 +34,7 @@ TESTALL=1 # D'abord on affiche la version courante -./VERSION +##########./VERSION # Souvent necessaire pour que les tests se passent bien: ###sudo rm -rf tmp/cache/* @@ -71,6 +71,8 @@ elif [[ $TESTALL == 0 ]] ; then fi +exit + # On remet en accès pour tous les repertoires tmp et logs (pour que Apache puisse toujours écrire dedans) : ##chmod -R 777 ./tmp/ # - tmp/cache : obligé d'utiliser sudo a cause des fichiers créés par le serveur web (appartiennent à _www sur Mac) diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index c20351d..5765057 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -749,10 +749,10 @@ class MaterielsController extends AppController { public function getNextStatusFrom($status) { - $status_num = self::statuses[$status]; - // si ARCHIVED => on reboucle à CREATED - if ($status_num==4) $status_num=0; - // Les indices commencent à 0, donc $status_num est déjà l'indice suivant... + // On prend le statut d'indice SUIVANT + $status_num = self::statuses[$status] + 1; + // Si dernier, on revient au 1er (CREATED) + if ($status_num==5) $status_num=0; $newstatus = array_keys(self::statuses)[$status_num]; //debug("new status is $newstatus"); return $newstatus; @@ -3002,7 +3002,8 @@ class MaterielsController extends AppController { if ($fval === null || $fval == '') { $msgError1 = "Pour ordonner la commande d'un matériel, le champ suivant ne doit pas être vide : ".$fnicename.' du matériel'; $this->Flash->error($msgError1); - $this->e->setError($fname, 'Ce champ ne doit pas être vide'); + // Utile ??? (plante les tests) + ////$this->e->setError($fname, 'Ce champ ne doit pas être vide'); $this->ACTION_CANCELLED = TRUE; // => on revient à "edit" return $this->redirect(['action'=>'edit',$id]); diff --git a/src/Model/Entity/Materiel.php b/src/Model/Entity/Materiel.php index 045e1ae..61cb144 100755 --- a/src/Model/Entity/Materiel.php +++ b/src/Model/Entity/Materiel.php @@ -2,6 +2,7 @@ namespace App\Model\Entity; use Cake\ORM\Entity; +use App\Model\Table\MaterielsTable; // Max 15 ans entre 2 dates const MAX_DIFF_YEARS = 15; @@ -159,6 +160,8 @@ class Materiel extends Entity { protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; } protected function _getIsArchived() { return $this->status == 'ARCHIVED'; } + public function getNiceStatus() { return MaterielsTable::getNiceStatus($this->status); } + /* public function getNiceStatus() { //if ($this->is_created) return 'À VALIDER'; if ($this->is_created) return 'CRÉÉ - à valider'; @@ -168,6 +171,7 @@ class Materiel extends Entity { //if ($this->is_archived) return 'ARCHIVÉ'; } + */ // Ce matériel est utilisé ou déclaré par l'utilisateur $userfullname diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index b195ee3..e5bfc68 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -524,6 +524,15 @@ class MaterielsTable extends AppTable } + public static function getNiceStatus($status) { + //if ($this->is_created) return 'À VALIDER'; + if ($status == 'CREATED') return 'CRÉÉ - à valider'; + if ($status == 'TOBEORDERED') return 'EN COMMANDE - à valider'; + if ($status == 'VALIDATED') return 'VALIDÉ - livré & payé'; + if ($status == 'TOBEARCHIVED') return 'À SORTIR'; + return 'ARCHIVÉ'; + } + /** * Default validation rules. @@ -912,10 +921,15 @@ class MaterielsTable extends AppTable $validator->allowEmpty('unite_duree_garantie'); /* - * (EP 202109) Annulation des champs obligatoires définis comme tels dans le schéma de la BD + * (EP 202109) Annulation des champs obligatoires définis comme tels ici ou dans le schéma de la BD * (afin de pouvoir les rendre éventuellement optionnels si on le désire via la configuration) */ - $bd_mandatory_fields = ['nom_user', 'nom_responsable', 'email_responsable']; + $bd_mandatory_fields = [ + // Champs définis comme obligatoires dans le schéma BD (pas bien...) + 'budgets', + // Champs définis comme obligatoires par défaut par l'utilisation de règles telles que "checkstring" ou autre (valid...) + 'nom_user', 'nom_responsable', 'email_responsable', + ]; foreach ($bd_mandatory_fields as $fname) $validator->allowEmpty($fname, true); //foreach ($bd_mandatory_fields as $fname) $validator->allowEmptyString($fname, true); diff --git a/tests/Fixture/MaterielsFixture.php b/tests/Fixture/MaterielsFixture.php index e6ac1d7..d3ee290 100755 --- a/tests/Fixture/MaterielsFixture.php +++ b/tests/Fixture/MaterielsFixture.php @@ -681,6 +681,8 @@ class MaterielsFixture extends TestFixture { // matos CREATED owned by USER [ //'id' => 1, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'matos 1 USER (C)', //'designation' => 'Test 1', 'sur_categorie_id' => 1, @@ -735,6 +737,8 @@ class MaterielsFixture extends TestFixture { // matos CREATED owned by anybody [ //'id' => 2, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Matos Test 2 (C)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -785,6 +789,8 @@ class MaterielsFixture extends TestFixture { // matos VALIDATED (et administratif) owned by anybody [ //'id' => 3, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Test 3 (V)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -830,6 +836,8 @@ class MaterielsFixture extends TestFixture { //'nom_responsable' => 'test0 test9' [ 'id' => 11, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Test 11 (C)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -879,6 +887,8 @@ class MaterielsFixture extends TestFixture { // matos VALIDATED owned by anybody [ //'id' => 12, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Test 12 (V)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -926,6 +936,8 @@ class MaterielsFixture extends TestFixture { // matos TBA owned by anybody [ //'id' => 13, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Test 13 (TBA)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -969,6 +981,8 @@ class MaterielsFixture extends TestFixture { // Materiel ARCHIVED owned by anybody => pas vu par un simple utilisateur (materiel/index/ ne l'affiche pas) [ //'id' => 14, + // TODO: définir budgets comme champ optionnel dans la BD !!! + 'budgets' => 'toto', 'designation' => 'Test 14 (A)', 'sur_categorie_id' => 1, 'categorie_id' => 1, diff --git a/tests/TestCase/Controller/General.php b/tests/TestCase/Controller/General.php index db82024..a53efc5 100644 --- a/tests/TestCase/Controller/General.php +++ b/tests/TestCase/Controller/General.php @@ -261,6 +261,7 @@ class General extends TestCase { public function dataProviderActionsAndRoles4() { $actions_and_roles = []; $actions = $this->getActions(); + //$actions = ['add']; //$actions = MaterielsController::getActions(); //$controller = 'App\\Controller\\'.$controller; //debug($this); @@ -285,12 +286,12 @@ class General extends TestCase { ]; */ $roles4 = [ - /* - */ 'user', 'resp', 'admin', 'super', + /* + */ ]; //$actions = ['delete']; //$actions = ['edit']; @@ -969,14 +970,16 @@ class General extends TestCase { //$m = $this->Materiels->get($id); // (1) (T,F) => accès REFUSÉ - $this->d("(1 TF) should be KO"); + $this->d("(1. TF) should be KO"); $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, true); $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, false, false); $m = $this->Materiels->get($matos_id); $this->d("(1) id is $id, materiel (id, statut, nom_responsable, nom_createur) is : $m->id, $m->status, $m->nom_responsable, $m->nom_createur"); $this->_testExecActionForId($action,$id,$getpost,$posted_data,false,$nbentities); + // (2) (F,T) => accès REFUSÉ - $this->d("(2 FT) should be KO"); + $this->d("(2. FT) should be KO"); + //debug($access_condition_on_status); $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, false); $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, true, true); $m = $this->Materiels->get($matos_id); @@ -985,7 +988,7 @@ class General extends TestCase { // (3) (F,F) => accès REFUSÉ => inutile de tester ce cas // (4) (T,T) => accès AUTORISÉ - $this->d("(3 TT) should be OK"); + $this->d("(3. TT) should be OK"); $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, true); $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, true, $this->USER_IS_RESP()); $m = $this->Materiels->get($matos_id); @@ -1253,11 +1256,24 @@ class General extends TestCase { // 1) Assert redirect //$this->assertRedirect(['controller' => 'Users', 'action' => 'login']); //$this->assertRedirect(['controller' => 'Pages', 'action' => 'home']); + // OK //$this->assertResponseSuccess(); $this->assertResponseEmpty(); //if (!in_array($action,['add_by_copy'])) $this->assertResponseEmpty(); //if ($getpost == 'get') $this->assertRedirect('/'); + // MARCHE PAS !!! + //$this->disableErrorHandlerMiddleware(); + // OK + //$this->assertResponseCode(302); + + // VOIR LE CONTENU DE LA REPONSE HTML + //debug($this->_response); // materiels/view/2 + if (!in_array($action,['edit','delete'])) $this->assertRedirect('/'); + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/materiels/view/2'); + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/pages/home'); + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/pages/display'); + //var_dump($this->headers['Location']); exit; // 2) Assert Flash error message (flash message in the 'flash' key) // Assert a flash messages uses the error element @@ -1265,6 +1281,7 @@ class General extends TestCase { $expected_flash_message = "Désolé, vous n'êtes pas autorisé à accéder à cette zone."; //var_dump($flash_message); // Test message complet + //$this->assertFlashMessage($expected_flash_message); $this->assertFlashMessage($expected_flash_message, 'flash'); $this->assertSession($expected_flash_message, 'Flash.flash.0.message'); $flash_message = $_SESSION['Flash']['flash'][0]['message']; diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index 22ace66..2e43190 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -519,13 +519,22 @@ class MaterielsControllerTest extends General { // Seul admin+ peut voir les materiels archivés et a accès à des filtres par statut + bouton exporter + cases à cocher //if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { if ($this->USER_IS_ADMIN_AT_LEAST()) { + $this->assertResponseContains('Liste des matériels (7)', 'Le profil '.$role.' devrait voir les matériels archivés.'); - $this->assertResponseContains("A valider", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); - $this->assertResponseContains("A sortir", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); + //$this->assertResponseContains("A valider", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); + $this->assertResponseContains("VALIDÉS", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.', true); + $this->assertResponseContains("ARCHIVÉS", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.', true); + //debug($this->Materiels->getNiceStatus('VALIDATED')); + //$this->assertResponseContains($this->Materiels->getNiceStatus('VALIDATED'), 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); + + //$this->assertResponseContains("A sortir", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); + //$this->assertResponseContains($this->Materiels->getNiceStatus('TOBEARCHIVED'), 'Le profil '.$role.' devrait avoir accès à des filtres par statut.'); } else { $this->assertResponseContains("Liste des matériels (6)", 'Le profil '.$role.' ne devrait PAS voir les matériels archivés.'); - $this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.'); + //$this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.'); + //$this->assertResponseNotContains($this->Materiels->getNiceStatus('CREATED'), 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.'); + $this->assertResponseNotContains("VALIDÉS", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.', true); } $this->assertResponseContainsIf($role, ($this->getUserRole() != 'Utilisateur'), ["Exporter la liste complète"=>"un bouton Exporter"]); -- libgit2 0.21.2