Commit 94fb1e94c81468286096049a69517ba828128eab

Authored by Etienne Pallier
1 parent 4e94b523
Exists in master and in 1 other branch dev

Début de bugfix des tests...

CHANGELOG
... ... @@ -353,6 +353,9 @@ Commencer à implémenter le nouveau workflow v5 :
353 353 ======= TODO =======
354 354  
355 355 *)
  356 + champ "budgets" à rendre optionnel dans schéma BD...
  357 +
  358 + *)
356 359 validation (=livré ET payé)
357 360 Facture jointe (si > 10K)
358 361  
... ... @@ -396,7 +399,13 @@ Commencer à implémenter le nouveau workflow v5 :
396 399 ======= CHANGES =======
397 400  
398 401 -------
399   -13/09/2021 v5.2.6-3.7.9
  402 +13/09/2021 v5.2.8-3.7.9
  403 + - Bugfix TESTS : Tests: 193, Assertions: 3181, Errors: 1, Failures: 46, Incomplete: 16
  404 + - donner valeur par défaut à budgets dans fixtures...
  405 + - bugfix getNextStatusFrom()
  406 +
  407 +-------
  408 +13/09/2021 v5.2.7-3.7.9
400 409 - Champs obligatoires "etiquette posée" et "n° inventaire tutelles" gérés via config
401 410 (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)
402 411  
... ...
README.md
... ... @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes :
53 53 --------------------------------------------------------------------------------------------
54 54  
55 55 Date: 13/09/2021
56   -Version: v5.2.7-3.7.9
  56 +Version: v5.2.8-3.7.9
57 57  
58 58  
59 59  
... ...
TESTS.sh
... ... @@ -20,8 +20,8 @@ echo "IN $(pwd)"
20 20  
21 21  
22 22  
23   -TESTEXEC=vendor/bin/phpunit
24   -TESTEXEC2=vendor/phpunit/phpunit/phpunit
  23 +TESTEXEC=vendor/phpunit/phpunit/phpunit
  24 +TESTEXEC2=vendor/bin/phpunit
25 25  
26 26 # Tous les tests
27 27 TESTALL=1
... ... @@ -34,7 +34,7 @@ TESTALL=1
34 34  
35 35  
36 36 # D'abord on affiche la version courante
37   -./VERSION
  37 +##########./VERSION
38 38  
39 39 # Souvent necessaire pour que les tests se passent bien:
40 40 ###sudo rm -rf tmp/cache/*
... ... @@ -71,6 +71,8 @@ elif [[ $TESTALL == 0 ]] ; then
71 71  
72 72 fi
73 73  
  74 +exit
  75 +
74 76 # On remet en accès pour tous les repertoires tmp et logs (pour que Apache puisse toujours écrire dedans) :
75 77 ##chmod -R 777 ./tmp/
76 78 # - tmp/cache : obligé d'utiliser sudo a cause des fichiers créés par le serveur web (appartiennent à _www sur Mac)
... ...
src/Controller/MaterielsController.php
... ... @@ -749,10 +749,10 @@ class MaterielsController extends AppController {
749 749  
750 750  
751 751 public function getNextStatusFrom($status) {
752   - $status_num = self::statuses[$status];
753   - // si ARCHIVED => on reboucle à CREATED
754   - if ($status_num==4) $status_num=0;
755   - // Les indices commencent à 0, donc $status_num est déjà l'indice suivant...
  752 + // On prend le statut d'indice SUIVANT
  753 + $status_num = self::statuses[$status] + 1;
  754 + // Si dernier, on revient au 1er (CREATED)
  755 + if ($status_num==5) $status_num=0;
756 756 $newstatus = array_keys(self::statuses)[$status_num];
757 757 //debug("new status is $newstatus");
758 758 return $newstatus;
... ... @@ -3002,7 +3002,8 @@ class MaterielsController extends AppController {
3002 3002 if ($fval === null || $fval == '') {
3003 3003 $msgError1 = "Pour ordonner la commande d'un matériel, le champ suivant ne doit pas être vide : ".$fnicename.' du matériel';
3004 3004 $this->Flash->error($msgError1);
3005   - $this->e->setError($fname, 'Ce champ ne doit pas être vide');
  3005 + // Utile ??? (plante les tests)
  3006 + ////$this->e->setError($fname, 'Ce champ ne doit pas être vide');
3006 3007 $this->ACTION_CANCELLED = TRUE;
3007 3008 // => on revient à "edit"
3008 3009 return $this->redirect(['action'=>'edit',$id]);
... ...
src/Model/Entity/Materiel.php
... ... @@ -2,6 +2,7 @@
2 2 namespace App\Model\Entity;
3 3  
4 4 use Cake\ORM\Entity;
  5 +use App\Model\Table\MaterielsTable;
5 6  
6 7 // Max 15 ans entre 2 dates
7 8 const MAX_DIFF_YEARS = 15;
... ... @@ -159,6 +160,8 @@ class Materiel extends Entity {
159 160 protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; }
160 161 protected function _getIsArchived() { return $this->status == 'ARCHIVED'; }
161 162  
  163 + public function getNiceStatus() { return MaterielsTable::getNiceStatus($this->status); }
  164 + /*
162 165 public function getNiceStatus() {
163 166 //if ($this->is_created) return 'À VALIDER';
164 167 if ($this->is_created) return 'CRÉÉ - à valider';
... ... @@ -168,6 +171,7 @@ class Materiel extends Entity {
168 171 //if ($this->is_archived)
169 172 return 'ARCHIVÉ';
170 173 }
  174 + */
171 175  
172 176  
173 177 // Ce matériel est utilisé ou déclaré par l'utilisateur $userfullname
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -524,6 +524,15 @@ class MaterielsTable extends AppTable
524 524 }
525 525  
526 526  
  527 + public static function getNiceStatus($status) {
  528 + //if ($this->is_created) return 'À VALIDER';
  529 + if ($status == 'CREATED') return 'CRÉÉ - à valider';
  530 + if ($status == 'TOBEORDERED') return 'EN COMMANDE - à valider';
  531 + if ($status == 'VALIDATED') return 'VALIDÉ - livré & payé';
  532 + if ($status == 'TOBEARCHIVED') return 'À SORTIR';
  533 + return 'ARCHIVÉ';
  534 + }
  535 +
527 536  
528 537 /**
529 538 * Default validation rules.
... ... @@ -912,10 +921,15 @@ class MaterielsTable extends AppTable
912 921 $validator->allowEmpty('unite_duree_garantie');
913 922  
914 923 /*
915   - * (EP 202109) Annulation des champs obligatoires définis comme tels dans le schéma de la BD
  924 + * (EP 202109) Annulation des champs obligatoires définis comme tels ici ou dans le schéma de la BD
916 925 * (afin de pouvoir les rendre éventuellement optionnels si on le désire via la configuration)
917 926 */
918   - $bd_mandatory_fields = ['nom_user', 'nom_responsable', 'email_responsable'];
  927 + $bd_mandatory_fields = [
  928 + // Champs définis comme obligatoires dans le schéma BD (pas bien...)
  929 + 'budgets',
  930 + // Champs définis comme obligatoires par défaut par l'utilisation de règles telles que "checkstring" ou autre (valid...)
  931 + 'nom_user', 'nom_responsable', 'email_responsable',
  932 + ];
919 933 foreach ($bd_mandatory_fields as $fname) $validator->allowEmpty($fname, true);
920 934 //foreach ($bd_mandatory_fields as $fname) $validator->allowEmptyString($fname, true);
921 935  
... ...
tests/Fixture/MaterielsFixture.php
... ... @@ -681,6 +681,8 @@ class MaterielsFixture extends TestFixture {
681 681 // matos CREATED owned by USER
682 682 [
683 683 //'id' => 1,
  684 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  685 + 'budgets' => 'toto',
684 686 'designation' => 'matos 1 USER (C)',
685 687 //'designation' => 'Test 1',
686 688 'sur_categorie_id' => 1,
... ... @@ -735,6 +737,8 @@ class MaterielsFixture extends TestFixture {
735 737 // matos CREATED owned by anybody
736 738 [
737 739 //'id' => 2,
  740 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  741 + 'budgets' => 'toto',
738 742 'designation' => 'Matos Test 2 (C)',
739 743 'sur_categorie_id' => 1,
740 744 'categorie_id' => 1,
... ... @@ -785,6 +789,8 @@ class MaterielsFixture extends TestFixture {
785 789 // matos VALIDATED (et administratif) owned by anybody
786 790 [
787 791 //'id' => 3,
  792 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  793 + 'budgets' => 'toto',
788 794 'designation' => 'Test 3 (V)',
789 795 'sur_categorie_id' => 1,
790 796 'categorie_id' => 1,
... ... @@ -830,6 +836,8 @@ class MaterielsFixture extends TestFixture {
830 836 //'nom_responsable' => 'test0 test9'
831 837 [
832 838 'id' => 11,
  839 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  840 + 'budgets' => 'toto',
833 841 'designation' => 'Test 11 (C)',
834 842 'sur_categorie_id' => 1,
835 843 'categorie_id' => 1,
... ... @@ -879,6 +887,8 @@ class MaterielsFixture extends TestFixture {
879 887 // matos VALIDATED owned by anybody
880 888 [
881 889 //'id' => 12,
  890 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  891 + 'budgets' => 'toto',
882 892 'designation' => 'Test 12 (V)',
883 893 'sur_categorie_id' => 1,
884 894 'categorie_id' => 1,
... ... @@ -926,6 +936,8 @@ class MaterielsFixture extends TestFixture {
926 936 // matos TBA owned by anybody
927 937 [
928 938 //'id' => 13,
  939 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  940 + 'budgets' => 'toto',
929 941 'designation' => 'Test 13 (TBA)',
930 942 'sur_categorie_id' => 1,
931 943 'categorie_id' => 1,
... ... @@ -969,6 +981,8 @@ class MaterielsFixture extends TestFixture {
969 981 // Materiel ARCHIVED owned by anybody => pas vu par un simple utilisateur (materiel/index/ ne l'affiche pas)
970 982 [
971 983 //'id' => 14,
  984 + // TODO: définir budgets comme champ optionnel dans la BD !!!
  985 + 'budgets' => 'toto',
972 986 'designation' => 'Test 14 (A)',
973 987 'sur_categorie_id' => 1,
974 988 'categorie_id' => 1,
... ...
tests/TestCase/Controller/General.php
... ... @@ -261,6 +261,7 @@ class General extends TestCase {
261 261 public function dataProviderActionsAndRoles4() {
262 262 $actions_and_roles = [];
263 263 $actions = $this->getActions();
  264 + //$actions = ['add'];
264 265 //$actions = MaterielsController::getActions();
265 266 //$controller = 'App\\Controller\\'.$controller;
266 267 //debug($this);
... ... @@ -285,12 +286,12 @@ class General extends TestCase {
285 286 ];
286 287 */
287 288 $roles4 = [
288   - /*
289   - */
290 289 'user',
291 290 'resp',
292 291 'admin',
293 292 'super',
  293 + /*
  294 + */
294 295 ];
295 296 //$actions = ['delete'];
296 297 //$actions = ['edit'];
... ... @@ -969,14 +970,16 @@ class General extends TestCase {
969 970 //$m = $this->Materiels->get($id);
970 971  
971 972 // (1) (T,F) => accès REFUSÉ
972   - $this->d("(1 TF) should be KO");
  973 + $this->d("(1. TF) should be KO");
973 974 $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, true);
974 975 $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, false, false);
975 976 $m = $this->Materiels->get($matos_id);
976 977 $this->d("(1) id is $id, materiel (id, statut, nom_responsable, nom_createur) is : $m->id, $m->status, $m->nom_responsable, $m->nom_createur");
977 978 $this->_testExecActionForId($action,$id,$getpost,$posted_data,false,$nbentities);
  979 +
978 980 // (2) (F,T) => accès REFUSÉ
979   - $this->d("(2 FT) should be KO");
  981 + $this->d("(2. FT) should be KO");
  982 + //debug($access_condition_on_status);
980 983 $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, false);
981 984 $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, true, true);
982 985 $m = $this->Materiels->get($matos_id);
... ... @@ -985,7 +988,7 @@ class General extends TestCase {
985 988  
986 989 // (3) (F,F) => accès REFUSÉ => inutile de tester ce cas
987 990 // (4) (T,T) => accès AUTORISÉ
988   - $this->d("(3 TT) should be OK");
  991 + $this->d("(3. TT) should be OK");
989 992 $this->_updateMatosWithStatusAs($matos_id, $access_condition_on_status, true);
990 993 $this->_updateMatosBelongingToCurrentUserAndInSameGroup($matos_id, true, $this->USER_IS_RESP());
991 994 $m = $this->Materiels->get($matos_id);
... ... @@ -1253,11 +1256,24 @@ class General extends TestCase {
1253 1256 // 1) Assert redirect
1254 1257 //$this->assertRedirect(['controller' => 'Users', 'action' => 'login']);
1255 1258 //$this->assertRedirect(['controller' => 'Pages', 'action' => 'home']);
  1259 + // OK
1256 1260 //$this->assertResponseSuccess();
1257 1261 $this->assertResponseEmpty();
1258 1262 //if (!in_array($action,['add_by_copy'])) $this->assertResponseEmpty();
1259 1263 //if ($getpost == 'get') $this->assertRedirect('/');
  1264 + // MARCHE PAS !!!
  1265 + //$this->disableErrorHandlerMiddleware();
  1266 + // OK
  1267 + //$this->assertResponseCode(302);
  1268 +
  1269 + // VOIR LE CONTENU DE LA REPONSE HTML
  1270 + //debug($this->_response); // materiels/view/2
  1271 +
1260 1272 if (!in_array($action,['edit','delete'])) $this->assertRedirect('/');
  1273 + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/materiels/view/2');
  1274 + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/pages/home');
  1275 + //if (!in_array($action,['edit','delete'])) $this->assertRedirect('/pages/display');
  1276 + //var_dump($this->headers['Location']); exit;
1261 1277  
1262 1278 // 2) Assert Flash error message (flash message in the 'flash' key)
1263 1279 // Assert a flash messages uses the error element
... ... @@ -1265,6 +1281,7 @@ class General extends TestCase {
1265 1281 $expected_flash_message = "Désolé, vous n'êtes pas autorisé à accéder à cette zone.";
1266 1282 //var_dump($flash_message);
1267 1283 // Test message complet
  1284 + //$this->assertFlashMessage($expected_flash_message);
1268 1285 $this->assertFlashMessage($expected_flash_message, 'flash');
1269 1286 $this->assertSession($expected_flash_message, 'Flash.flash.0.message');
1270 1287 $flash_message = $_SESSION['Flash']['flash'][0]['message'];
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -519,13 +519,22 @@ class MaterielsControllerTest extends General {
519 519 // Seul admin+ peut voir les materiels archivés et a accès à des filtres par statut + bouton exporter + cases à cocher
520 520 //if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) {
521 521 if ($this->USER_IS_ADMIN_AT_LEAST()) {
  522 +
522 523 $this->assertResponseContains('Liste des matériels (7)', 'Le profil '.$role.' devrait voir les matériels archivés.');
523   - $this->assertResponseContains("A valider", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
524   - $this->assertResponseContains("A sortir", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
  524 + //$this->assertResponseContains("A valider", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
  525 + $this->assertResponseContains("VALIDÉS", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.', true);
  526 + $this->assertResponseContains("ARCHIVÉS", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.', true);
  527 + //debug($this->Materiels->getNiceStatus('VALIDATED'));
  528 + //$this->assertResponseContains($this->Materiels->getNiceStatus('VALIDATED'), 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
  529 +
  530 + //$this->assertResponseContains("A sortir", 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
  531 + //$this->assertResponseContains($this->Materiels->getNiceStatus('TOBEARCHIVED'), 'Le profil '.$role.' devrait avoir accès à des filtres par statut.');
525 532 }
526 533 else {
527 534 $this->assertResponseContains("Liste des matériels (6)", 'Le profil '.$role.' ne devrait PAS voir les matériels archivés.');
528   - $this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.');
  535 + //$this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.');
  536 + //$this->assertResponseNotContains($this->Materiels->getNiceStatus('CREATED'), 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.');
  537 + $this->assertResponseNotContains("VALIDÉS", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.', true);
529 538 }
530 539 $this->assertResponseContainsIf($role, ($this->getUserRole() != 'Utilisateur'), ["Exporter la liste complète"=>"un bouton Exporter"]);
531 540  
... ...