Commit 0ea75a7957b3adbf4b7345b870b7499af62a3fa4
1 parent
80b8cb03
Exists in
master
and in
1 other branch
bugfix et réécriture des actions documents /admission, /sortie, /fiche
(v3.7.9.51) => désormais, on passe l'id du matos associé et non pas son numero d'inventaire !!! (mauvais raccourci) => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !!
Showing
5 changed files
with
94 additions
and
40 deletions
Show diff stats
README.md
... | ... | @@ -54,12 +54,12 @@ Logiciel testé et validé sur les configurations suivantes : |
54 | 54 | VERSION ACTUELLE |
55 | 55 | |
56 | 56 | Date: 29/06/2020 |
57 | -Version: 3.7.9.50 | |
57 | +Version: 3.7.9.51 | |
58 | 58 | Author: EP |
59 | -Commentaire: | |
60 | - - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED) | |
61 | - - bugfix (en cours) des actions documents/admission et documents/sortie qui ne marchent plus car on ne leur passe pas un id mais un nom de doc... | |
62 | - - Nombreuses refactorisations dans les tests | |
59 | +Commentaire: | |
60 | + - bugfix et réécriture des actions documents/admission, sortie, fiche !!! (pas d'id) | |
61 | + => désormais, on passe l'id du matos associé et non pas son numero d'inventaire !!! (mauvais raccourci) | |
62 | + => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !! | |
63 | 63 | |
64 | 64 | - Amélioration page /pages/acls |
65 | 65 | |
... | ... | @@ -104,6 +104,11 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi |
104 | 104 | |
105 | 105 | ----------------------------------------------------------------------------------------------------------- |
106 | 106 | |
107 | +29/06/2020 v3.7.9.50 (EP) | |
108 | + - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED) | |
109 | + - bugfix (en cours) des actions documents/admission et documents/sortie qui ne marchent plus car on ne leur passe pas un id mais un nom de doc... | |
110 | + - Nombreuses refactorisations dans les tests | |
111 | + | |
107 | 112 | 26/06/2020 v3.7.9.48-49 (EP) |
108 | 113 | - TEST3 : Ajout d'un 3ème (et DERNIER) gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues pour TOUS les materiels de la BD de test (fixture), aussi bien dans la vue index globale que dans CHAQUE vue détaillée de chaque matériel (et surtout en vérifiant aussi la liste des entités associées (suivis,emprunts,documents). |
109 | 114 | - bugfix autorisations d'affichage des boutons d'action sur documents dans materiels/view/ | ... | ... |
src/Controller/DocumentsController.php
... | ... | @@ -58,9 +58,11 @@ class DocumentsController extends AppController |
58 | 58 | $this->setAuthorizationsForAction('admission', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]); |
59 | 59 | // Action 'admissionPdf' |
60 | 60 | $this->setAuthorizationsForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]); |
61 | + //$this->setAuthorizationsForAction('admissionPdf', 0); | |
61 | 62 | // Action 'sortie' |
62 | 63 | $this->setAuthorizationsForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]); |
63 | 64 | $this->setAuthorizationsForAction('sortiePdf', 'sortie', ['user'=>-1, 'resp'=>-1]); |
65 | + $this->setAuthorizationsForAction('sortiePdf', 0); | |
64 | 66 | |
65 | 67 | } // setAuthorizations |
66 | 68 | |
... | ... | @@ -90,7 +92,7 @@ class DocumentsController extends AppController |
90 | 92 | return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID); // $user, $userCname |
91 | 93 | */ |
92 | 94 | $related_matos_id = null; |
93 | - if (in_array($action,['add','admission','sortie'])) { | |
95 | + if (in_array($action,['add','admission','admissionPdf','fiche','fichePdf','sortie','sortiePdf'])) { | |
94 | 96 | // Aucune de ces actions n'est autorisée sans préciser (à l'avance, dans l'url) le matériel concerné |
95 | 97 | // => access denied |
96 | 98 | if (!$id) return false; |
... | ... | @@ -99,7 +101,7 @@ class DocumentsController extends AppController |
99 | 101 | $id=null; |
100 | 102 | } |
101 | 103 | |
102 | - return $this->isAuthorizedAction($action, $id, $related_matos_id); // $user, $userCname | |
104 | + return $this->isAuthorizedActionForCurrentUser($action, $id, $related_matos_id); // $user, $userCname | |
103 | 105 | |
104 | 106 | // LA SUITE EST A VIRER |
105 | 107 | |
... | ... | @@ -569,7 +571,8 @@ class DocumentsController extends AppController |
569 | 571 | } |
570 | 572 | |
571 | 573 | //public function sortiePdf($filename) { |
572 | - public function sortiePdf() { | |
574 | + //public function sortiePdf() { | |
575 | + public function sortiePdf($matos_id) { | |
573 | 576 | $this->viewBuilder() |
574 | 577 | ->className('Dompdf.Pdf') |
575 | 578 | ->layout('Dompdf.default') |
... | ... | @@ -588,28 +591,35 @@ class DocumentsController extends AppController |
588 | 591 | */ |
589 | 592 | ]]); |
590 | 593 | } |
591 | - public function sortie($labNumber) | |
592 | - { | |
594 | + //public function sortie($labNumber) | |
595 | + public function sortie($matos_id) { | |
593 | 596 | $this->set('fpdf', new FPDF('P', 'mm', 'A4')); |
594 | 597 | //$this->set('fpdf', new FPDF()); |
595 | 598 | //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); |
596 | 599 | } |
597 | 600 | |
598 | 601 | |
599 | - public function admission($labNumber, $pdfEngine="fpdf") | |
602 | + //public function admission($labNumber, $pdfEngine="fpdf") | |
603 | + public function admission($matos_id, $pdfEngine="fpdf") | |
600 | 604 | { |
605 | + //debug($matos_id); | |
601 | 606 | // only for FPDF |
602 | 607 | if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); |
603 | 608 | //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); |
604 | 609 | |
605 | 610 | // Find the related materiel |
606 | - $materiel = TableRegistry::get('Materiels')->find('all', [ | |
611 | + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ | |
612 | + 'contain' => ['Fournisseurs', 'Organismes'] | |
613 | + ]); | |
614 | + /* | |
615 | + //$materiel = TableRegistry::get('Materiels')->find('all', [ | |
616 | + $materiel = TableRegistry::getTableLocator()->get('Materiels')->find('all', [ | |
607 | 617 | 'conditions' => [ |
608 | 618 | 'numero_laboratoire' => $labNumber |
609 | 619 | ], |
610 | 620 | 'contain' => ['Fournisseurs', 'Organismes'] |
611 | 621 | ])->first(); |
612 | - // End find | |
622 | + */ | |
613 | 623 | |
614 | 624 | // Get the administration user name |
615 | 625 | $userName = $this->LdapAuth->user('username'); |
... | ... | @@ -649,8 +659,10 @@ class DocumentsController extends AppController |
649 | 659 | $this->set('data', $TDoc); |
650 | 660 | } // admission() |
651 | 661 | |
652 | - public function admissionPdf($labNumber) { | |
653 | - $this->admission($labNumber, "dompdf"); | |
662 | + //public function admissionPdf($labNumber) { | |
663 | + public function admissionPdf($matos_id) { | |
664 | + //$this->admission($labNumber, "dompdf"); | |
665 | + $this->admission($matos_id, "dompdf"); | |
654 | 666 | $this->viewBuilder() |
655 | 667 | ->className('Dompdf.Pdf') |
656 | 668 | ->layout('Dompdf.default') |
... | ... | @@ -671,8 +683,10 @@ class DocumentsController extends AppController |
671 | 683 | } |
672 | 684 | |
673 | 685 | |
674 | - public function ficheMaterielPdf($labNumber) { | |
675 | - $this->ficheMateriel($labNumber, "dompdf"); | |
686 | + //public function ficheMaterielPdf($labNumber) { | |
687 | + public function ficheMaterielPdf($matos_id) { | |
688 | + //$this->ficheMateriel($labNumber, "dompdf"); | |
689 | + $this->ficheMateriel($matos_id, "dompdf"); | |
676 | 690 | |
677 | 691 | $this->viewBuilder() |
678 | 692 | ->className('Dompdf.Pdf') |
... | ... | @@ -694,10 +708,14 @@ class DocumentsController extends AppController |
694 | 708 | } |
695 | 709 | |
696 | 710 | //public function ficheMateriel($labNumber) |
697 | - public function ficheMateriel($labNumber, $pdfEngine="fpdf") | |
711 | + //public function ficheMateriel($labNumber, $pdfEngine="fpdf") | |
712 | + public function ficheMateriel($matos_id, $pdfEngine="fpdf") | |
698 | 713 | { |
699 | 714 | |
700 | - // Find the concerned materiel | |
715 | + // Find the related materiel | |
716 | + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ | |
717 | + 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes'] | |
718 | + ]); | |
701 | 719 | /* |
702 | 720 | $materiel = TableRegistry::get('Materiels')->find('all', [ |
703 | 721 | 'conditions' => [ |
... | ... | @@ -705,6 +723,7 @@ class DocumentsController extends AppController |
705 | 723 | ] |
706 | 724 | ])->first(); |
707 | 725 | */ |
726 | + /* | |
708 | 727 | $materiel = TableRegistry::get('Materiels')->find('all', [ |
709 | 728 | 'conditions' => [ |
710 | 729 | 'numero_laboratoire' => $labNumber |
... | ... | @@ -712,7 +731,7 @@ class DocumentsController extends AppController |
712 | 731 | 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes'] |
713 | 732 | ] |
714 | 733 | )->first(); |
715 | - // End find | |
734 | + */ | |
716 | 735 | |
717 | 736 | /* |
718 | 737 | if ($materiel->sur_categorie_id !== null) | ... | ... |
src/Template/Materiels/view.ctp
... | ... | @@ -348,34 +348,43 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
348 | 348 | if ($PDF_ENGINE == "FPDF") { |
349 | 349 | // FPDF |
350 | 350 | $action = 'admission'; |
351 | - $data = $entity->numero_laboratoire; | |
351 | + ///$data = $entity->numero_laboratoire; | |
352 | + $id = $entity->id; | |
352 | 353 | } |
353 | 354 | else { |
354 | 355 | // DOMPDF |
355 | 356 | $action = 'admission_pdf'; |
356 | - $data = $entity->numero_laboratoire . ".pdf"; | |
357 | + // Il faut ajouter '.pdf' à la suite de l'argument pour que le template | |
358 | + // soit cherché dans Documents/pdf/ et non pas Documents/ !!! | |
359 | + ///$data = $entity->numero_laboratoire . ".pdf"; | |
360 | + $id = $entity->id . '.pdf'; | |
357 | 361 | } |
358 | 362 | // if (($entity->status == 'VALIDATED') || ($entity->status == 'CREATED')) { |
359 | - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission"); | |
363 | + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission"); | |
364 | + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $id, [], "Voir le document d'admission"); | |
360 | 365 | //} |
361 | 366 | } |
362 | 367 | // doc sortie |
363 | - if ($CAN_EDIT_DOC_SORTIE) { | |
368 | + if (true) { | |
369 | + //if ($CAN_EDIT_DOC_SORTIE) { | |
364 | 370 | |
365 | 371 | // Doc sortie (admin only) |
366 | 372 | //else if ($IS_ARCHIVED || $IS_TOBEARCHIVED) { |
367 | 373 | if ($PDF_ENGINE == "FPDF") { |
368 | 374 | // FPDF |
369 | 375 | $action = 'sortie'; |
370 | - $data = $entity->numero_laboratoire; | |
376 | + $id = $entity->id; | |
377 | + //$data = $entity->numero_laboratoire; | |
371 | 378 | } |
372 | 379 | else { |
373 | 380 | // DOMPDF |
374 | 381 | $action = 'sortie_pdf'; |
375 | - $data = $entity->numero_laboratoire . ".pdf"; | |
382 | + $id = $entity->id . '.pdf'; | |
383 | + //$data = $entity->numero_laboratoire . ".pdf"; | |
376 | 384 | } |
377 | 385 | // else if (($entity->status == 'ARCHIVED') || ($entity->status == 'TOBEARCHIVED')) { |
378 | - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie"); | |
386 | + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $id, [], "Voir le document de sortie"); | |
387 | + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie"); | |
379 | 388 | //} |
380 | 389 | |
381 | 390 | } // Doc sortie |
... | ... | @@ -488,14 +497,17 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
488 | 497 | if ($PDF_ENGINE == "FPDF") { |
489 | 498 | // FPDF |
490 | 499 | $action = 'ficheMateriel'; |
491 | - $data = $entity->numero_laboratoire; | |
500 | + $id = $entity->id; | |
501 | + //$data = $entity->numero_laboratoire; | |
492 | 502 | } |
493 | 503 | else { |
494 | 504 | // DOMPDF |
495 | 505 | $action = 'fiche_materiel_pdf'; |
496 | - $data = $entity->numero_laboratoire.'.pdf'; | |
506 | + $id = $entity->id . '.pdf'; | |
507 | + //$data = $entity->numero_laboratoire.'.pdf'; | |
497 | 508 | } |
498 | - $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [], | |
509 | + //$echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [], | |
510 | + $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $id, [], | |
499 | 511 | "Voir la fiche du materiel" |
500 | 512 | ); |
501 | 513 | ... | ... |
tests/TestCase/Controller/General.php
... | ... | @@ -721,6 +721,9 @@ class General extends TestCase { |
721 | 721 | |
722 | 722 | |
723 | 723 | /** |
724 | + * | |
725 | + * (EP 20200620) | |
726 | + * | |
724 | 727 | * Test (automatique) de (presque) TOUTES les actions d'un controleur |
725 | 728 | * |
726 | 729 | * Appelé par chaque test de controleur en passant en paramètre $entities_name (et le reste par DataProvider) | ... | ... |
tests/TestCase/Controller/MaterielsControllerTest.php
... | ... | @@ -1909,6 +1909,8 @@ class MaterielsControllerTest extends General { |
1909 | 1909 | */ |
1910 | 1910 | |
1911 | 1911 | /** |
1912 | + * (EP 20200625) | |
1913 | + * | |
1912 | 1914 | * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S) |
1913 | 1915 | * ET tous les materiels de la BD de test (fixture) |
1914 | 1916 | * |
... | ... | @@ -1992,6 +1994,8 @@ class MaterielsControllerTest extends General { |
1992 | 1994 | |
1993 | 1995 | |
1994 | 1996 | /** |
1997 | + * (EP 20200625) | |
1998 | + * | |
1995 | 1999 | * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S) |
1996 | 2000 | * ET avec tous les statuts de matériel (C,V,T,A) |
1997 | 2001 | * (avec un seul matériel de test qui est modifié à volonté) |
... | ... | @@ -2358,17 +2362,8 @@ class MaterielsControllerTest extends General { |
2358 | 2362 | $this->_testAuthorizationsForAllControllerActions($action, $role_short, $role_long); |
2359 | 2363 | } |
2360 | 2364 | |
2361 | - | |
2362 | 2365 | |
2363 | - | |
2364 | - /** | |
2365 | - * @dataProvider dataProviderRoles4 | |
2366 | - */ | |
2367 | - public function OFF_testActionDeleteMateriel($role) { | |
2368 | - $this->_testActionDeleteEntity($role); | |
2369 | - } | |
2370 | - | |
2371 | - | |
2366 | + // (EP 20200629) | |
2372 | 2367 | private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { |
2373 | 2368 | $expected_flash_message = 'Le matériel a bien été '; |
2374 | 2369 | switch($action) { |
... | ... | @@ -2420,6 +2415,7 @@ class MaterielsControllerTest extends General { |
2420 | 2415 | } |
2421 | 2416 | } |
2422 | 2417 | |
2418 | + // (EP 20200629) | |
2423 | 2419 | private function _doActionAndCheckResult($action, $id=null, $SUCCESS=true, $data=[], $controller=null) { |
2424 | 2420 | $action_link = Inflector::dasherize($action); // statusValidated => status-validated |
2425 | 2421 | //$this->post("/materiels/$action_link/$id"); |
... | ... | @@ -2435,11 +2431,13 @@ class MaterielsControllerTest extends General { |
2435 | 2431 | $this->_assertFlashMessageIsAsExpectedForAction($action, $SUCCESS); |
2436 | 2432 | } |
2437 | 2433 | |
2434 | + // (EP 20200629) | |
2438 | 2435 | private function _checkMaterielStatusChangedTo($id,$new_status) { |
2439 | 2436 | $m = $this->Materiels->get($id); |
2440 | 2437 | $this->assertSame($m->status, $new_status); |
2441 | 2438 | } |
2442 | 2439 | |
2440 | + // (EP 20200629) | |
2443 | 2441 | private function _testMaterielCannotBeModifiedAnymoreExceptIfDevalidated($id) { |
2444 | 2442 | |
2445 | 2443 | // On sauve le statut courant |
... | ... | @@ -2483,12 +2481,16 @@ class MaterielsControllerTest extends General { |
2483 | 2481 | } |
2484 | 2482 | |
2485 | 2483 | /** |
2484 | + * (EP 20200629) | |
2485 | + * | |
2486 | 2486 | * Test du cycle de vie complet d'un matériel |
2487 | 2487 | * |
2488 | 2488 | * On teste les états-transitions d'un matériel, le passage progressif d'un état à un autre : |
2489 | 2489 | * CREATED => VALIDATED => TBA => ARCHIVED |
2490 | 2490 | * (on teste aussi toutes les actions qui sont possibles ou pas à chaque état) |
2491 | 2491 | * |
2492 | + * Ce test vérifie le diagramme UML etats-transitions webroot/doc/diagrams/materiel_state_diagram.txt | |
2493 | + * | |
2492 | 2494 | */ |
2493 | 2495 | public function testMaterielLifeCycle() { |
2494 | 2496 | |
... | ... | @@ -2597,4 +2599,17 @@ class MaterielsControllerTest extends General { |
2597 | 2599 | |
2598 | 2600 | |
2599 | 2601 | |
2602 | + | |
2603 | + | |
2604 | + /** | |
2605 | + * @dataProvider dataProviderRoles4 | |
2606 | + */ | |
2607 | + public function OFF_testActionDeleteMateriel($role) { | |
2608 | + $this->_testActionDeleteEntity($role); | |
2609 | + } | |
2610 | + | |
2611 | + | |
2612 | + | |
2613 | + | |
2614 | + | |
2600 | 2615 | } // class MaterielsControllerTest |
2601 | 2616 | \ No newline at end of file | ... | ... |