Commit 94fb1e94c81468286096049a69517ba828128eab
1 parent
4e94b523
Exists in
master
and in
1 other branch
Début de bugfix des tests...
Showing
9 changed files
with
90 additions
and
20 deletions
Show diff stats
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
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 | ... | ... |