'CREATED', 'date_acquisition' ]; private $newMaterielWithAllMandatoryFields = [ //'id' => 16, 'designation' => 'Test 15', 'sur_categorie_id' => 1, 'categorie_id' => 1, 'materiel_administratif' => 0, 'materiel_technique' => 1, //'status' => 'CREATED', 'date_acquisition' => '19-04-2016', /* 'nom_responsable' => 'Jacques Utilisateur', 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu' 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', */ ]; /* FONCTIONS UTILITAIRES UTILISÉES PAR LES TESTS */ /** * setUp method * * @return void */ public function setUp() { parent::setUp(); $config = TableRegistry::exists('Materiels') ? [] : [ 'className' => 'App\Model\Table\MaterielsTable' ]; $this->Materiels = TableRegistry::get('Materiels', $config); $config = TableRegistry::exists('Suivis') ? [] : [ 'className' => 'App\Model\Table\SuivisTable' ]; $this->Suivis = TableRegistry::get('Suivis', $config); $this->ControllerMateriels = new MaterielsController(); } /** * tearDown method * * @return void */ public function tearDown() { unset($this->Materiels); unset($this->Suivis); unset($this->ControllerMateriels); parent::tearDown(); } /* * Tests organisés par (CONTROLEUR puis par) ACTION * * Ici, on teste les ACTIONS du controleur MaterielsController * Voir https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit#heading=h.bxuswhw2zzwt * * Chaque test d'une ACTION doit tester l'appel de cette action pour chaque ROLE * */ /* * ***************************************************************************** * Basic ACL testing ($easyACL array rules) * ***************************************************************************** */ public function testEasyACL() { $role = 'USER_from_ldap'; $this->authAs($role); $roleLong = (new AppController())->getUserRole(); $matCont = new MaterielsController(); $this->_testEasyACL('N', $matCont, $roleLong, 'autre1'); $this->_testEasyACL('Y', $matCont, $roleLong, 'autre2'); $this->_testEasyACL('Y', $matCont, $roleLong, 'autre3'); $this->_testEasyACL('N', $matCont, $roleLong, 'autre4'); $this->_testEasyACL('Y', $matCont, $roleLong, 'unknown'); $this->_testEasyACL('Y', $matCont, $roleLong, 'add'); $this->_testEasyACL('(status == CREATED || status == VALIDATED) && (is_creator || is_user)', $matCont, $roleLong, 'edit'); /* $action='autre4'; $rule = $matCont->isAuthorizedAction($matCont, $roleLong, $action); $this->assertEquals('N', $rule, $roleLong.' do '.$action); */ } private function _testEasyACL($expectedRule, AppController $controller, $roleLong, $action) { $rule = $controller->isAuthorizedAction($controller, $roleLong, $action); $this->assertEquals($expectedRule, $rule, $roleLong.' do '.$action); } /* * ***************************************************************************** * ACTION READ * (1) READ ALL (index) : Voir la liste des matériels * ***************************************************************************** */ /** * Test index method * * @return void */ // test INDEX action /* public function testMat20ReadAll() { foreach ($this->ROLES as $role) $this->_testMatReadAllAs($role); } */ public function testMat20ReadAllAsUserFromLdap() { $this->_testMatReadAllAs('USER_from_ldap'); } public function testMat20ReadAllAsUserFromTable() { $this->_testMatReadAllAs('USER'); } public function testMat20ReadAllAsResp() { $this->_testMatReadAllAs('RESP'); } public function testMat20ReadAllAsAdmin() { $this->_testMatReadAllAs('ADMIN'); } public function testMat20ReadAllAsAdminP() { $this->_testMatReadAllAs('ADMINP'); } public function testMat20ReadAllAsSuperAdmin() { $this->_testMatReadAllAs('SUPER'); } private function _testMatReadAllAs($role) { //$this->setUp(); // On doit pouvoir accéder à la page une fois authentifié $this->authAs($role); $this->get('/materiels/index'); $this->assertNoRedirect("Authentifié mais redirection vers /users/login."); // 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.'); } 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->assertResponseContainsIf($role, ($this->getUserRole() != 'Utilisateur'), ["Exporter la liste complete"=>"un bouton Exporter"]); $this->get('/materiels/index/CREATED'); //TODO: il faudrait remplacer "false" par "true" dans ce test $this->assertResponseContainsIf( $role, //in_array($role,['ADMIN','ADMINP','SUPER']), $this->USER_IS_ADMIN_AT_LEAST(), [ "checkbox" => "à des checkboxes", "Exporter la liste des matériels cochés" => "au bouton d'exportation de liste", "Valider les matériels cochés" => "au bouton de validation de liste" ], false ); /* if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { $this->assertResponseContains('checkbox', 'Le profil '.$role.' devrait avoir accès à des checkboxes'); $this->assertResponseContains("Exporter la liste des matériels cochés", 'Le profil '.$role.' devrait avoir accès au bouton d\'exportation de liste'); $this->assertResponseContains("Valider les matériels cochés", 'Le profil '.$role.' devrait avoir accès au bouton de validation de liste'); } else { } */ //$this->tearDown(); } public function testMat21ReadAllAsAnonymous() { // test INDEX action // On ne doit pas avoir accès sans authentification $this->get('/materiels/index'); // $this->assertRedirect('/users/login', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); // Le changement est dû au changement de version de cakephp 3.2 vers 3.4 $this->assertRedirect('/users/login?redirect=%2Fmateriels%2Findex', 'Problème : Accès à materiels/index SANS AUTHENTIFICATION'); } /* * ***************************************************************************** * ACTION READ * (2) READ ONE (view/id) : Voir le détail d'un matériel * ***************************************************************************** */ /** * Test view method * * @group failing * @return void */ /* public function testMat10ReadOne() { // test VIEW action foreach ($this->ROLES as $role) $this->_testMatReadOneAs($role); } */ // test VIEW action public function testMat10ReadOneAsUserFromLdap() { $this->_testMatReadOneAs('USER_from_ldap'); } public function testMat10ReadOneAsUserFromTable() { $this->_testMatReadOneAs('USER'); } public function testMat10ReadOneAsResp() { $this->_testMatReadOneAs('RESP'); } public function testMat10ReadOneAsAdmin() { $this->_testMatReadOneAs('ADMIN'); } public function testMat10ReadOneAsAdminPlus() { $this->_testMatReadOneAs('ADMINP'); } public function testMat10ReadOneAsSuperAdmin() { $this->_testMatReadOneAs('SUPER'); } private function _testMatReadOneAs($role) { //$this->setUp(); //$this->authSuperAdmin(); $this->authAs($role); /* $myrole = $this->getUserRole(); $this->assertEquals('Super Administrateur', $myrole); */ $this->get('/materiels/view/3'); $this->assertResponseContains("Test 3", "Le matériel retourné n'est pas celui demandé."); $this->assertResponseContains('alt="QrCode', "Le QRCode n'est pas sur la vue matériel."); $this->assertResponseContains("Suivi(s) du matériel (1)", "Le nb de suivis liés au matériel est incorrect."); $this->assertResponseContains("Emprunt(s) du matériel (1)", "Le nb d'emprunts liés au matériel est incorrect."); $this->assertResponseContains("Fichier(s) lié(s) au matériel (1)", "Le nb de fichiers liés au matériel est incorrect."); // Only admin+ see admin section: //if ( in_array($role, ['ADMIN','ADMINP','SUPER']) ) { if ($this->USER_IS_ADMIN_AT_LEAST()) { $this->assertResponseContains("Informations administratives"); $this->assertResponseContains("CentreFinancier/EOTP"); } else $this->assertResponseNotContains("Informations administratives"); //$this->tearDown(); } /* * ***************************************************************************** * ACTION CREATE (add) : Créer un matériel * ***************************************************************************** */ /** * Test testMat30AccessCreateForm * * @return void */ /* public function testMat30AccessCreateForm() { foreach ($this->ROLES as $role) $this->_testMatAccessCreateFormAs($role); } */ public function testMat30AccessCreateFormAsUserFromLdap() { $this->_testMatAccessCreateFormAs('USER_from_ldap'); } public function testMat30AccessCreateFormAsUser() { $this->_testMatAccessCreateFormAs('USER'); } public function testMat30AccessCreateFormAsResp() { $this->_testMatAccessCreateFormAs('RESP'); } public function testMat30AccessCreateFormAsAdmin() { $this->_testMatAccessCreateFormAs('ADMIN'); } public function testMat30AccessCreateFormAsAdminPlus() { $this->_testMatAccessCreateFormAs('ADMINP'); } public function testMat30AccessCreateFormAsSuperAdmin() { $this->_testMatAccessCreateFormAs('SUPER'); } private function _testMatAccessCreateFormAs($role) { //$this->setUp(); // On doit pouvoir accéder à la page une fois authentifié $this->authAs($role); $this->get('/materiels/add'); $this->assertResponseContains('Ajouter', 'La page n\'existe pas'); $this->assertResponseContainsIf( $role, //in_array($role,['ADMIN', 'ADMINP', 'SUPER']), $this->USER_IS_ADMIN_AT_LEAST(), ["EOTP" => "à la partie administrative sur le formulaire add"] ); /* $this->assertResponseNotContains('EOTP', 'Le profil utilisateur a accès à la partie administrative sur le formulaire add.'); $this->assertResponseContains('EOTP', 'Le profil admin+ n\'a pas accès à la partie administrative sur le formulaire add.'); */ //$this->tearDown(); } /** * Test testMat31Create * * @return void */ public function testMat31CreateAsSuper() { $this->_testMatCreateAs('SUPER'); } public function testMat31CreateAsAdminp() { $this->_testMatCreateAs('ADMINP'); } public function testMat31CreateAsAdmin() { $this->_testMatCreateAs('ADMIN'); } public function testMat31CreateAsResp() { $this->_testMatCreateAs('RESP'); } public function testMat31CreateAsUser() { $this->_testMatCreateAs('USER'); } public function testMat31CreateAsUserFromLdap() { $this->_testMatCreateAs('USER_from_ldap'); } public function testMat32CreateAdministratifOrTechnicalAsSuper() { $this->_testMatCreateAdministratifOrTechnicalAs('SUPER'); } private function _testMatCreateAdministratifOrTechnicalAs($role) { $newMateriel = $this->newMaterielWithAllMandatoryFields; $fields = ['materiel_administratif','materiel_technique']; // test with materiel_administratif and materiel_technique, all combinations from (0,0) to (1,1) //for ($i=0,$j=0; $i<=1,$j<=1 ; $i++,$j++) { for ($i=0; $i<=1 ; $i++) { for ($j=0; $j<=1 ; $j++) { $newMateriel["$fields[0]"] = $i; $newMateriel["$fields[1]"] = $j; $combination = [$i,$j]; if ($combination == [0,0]) $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); if ($combination == [0,1]) { // cree un nouveau materiel $this->_testMatCreateAs($role, $newMateriel, implode(',',$combination)); // supprimer un materiel pour avoir toujours le meme nombre //TODO: impossible de supprimer le matos 1, why ??? //$this->post('/materiels/delete/1'); $this->post('/materiels/delete/11'); $this->get('/materiels/index'); $nbmat = $this->USER_IS_ADMIN_AT_LEAST() ? 7 : 6; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $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] if ($combination == [1,0]) { //if ($i == 1) { // prix null => fails $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); // prix < 800 => fails $newMateriel['prix_ht'] = 799; $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination)); // prix >= 800 => ok $newMateriel['prix_ht'] = 800; $this->_testMatCreateAs($role, $newMateriel, implode(',',$combination)); /* // supprimer un materiel pour avoir toujours le meme nombre //TODO: impossible de supprimer le matos 1, why ??? //$this->post('/materiels/delete/1'); $this->post('/materiels/delete/2'); $this->get('/materiels/index'); $nbmat = $this->USER_IS_ADMIN_AT_LEAST($role) ? 7 : 6; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.implode($combination)); */ } } } } private function _testMatCreateAs($role, $materiel=null) { $materiel = $materiel ? $this->newMaterielWithAllMandatoryFields : $materiel; //$this->setUp(); // On doit pouvoir accéder à la page une fois authentifié $this->authAs($role); $this->get('/materiels/index'); $nbmat = $this->USER_IS_ADMIN_AT_LEAST() ? 7 : 6; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role); $this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); $this->get('/materiels/index'); $nbmat++; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role." Le matériel ne s'ajoute pas correctement"); $this->assertResponseContains("Test 15", "Le matériel ne s'ajoute pas correctement."); $this->assertResponseContains("TEST-2016-0015", "La génération du n°de labo n'est pas bonne."); //$this->tearDown(); } /* public function testValueNeccessaryNotEmpty() { $this->authSuperAdmin(); $data = [ 'id' => 16, 'designation' => 'Test 16', 'sur_categorie_id' => '', 'categorie_id' => '', 'materiel_administratif' => 0, 'materiel_technique' => 1, 'status' => 'CREATED', 'date_acquisition' => '19-04-2016', 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu' ]; $this->post('/materiels/add', $data); $this->get('/materiels/index'); $this->assertResponseContains("Liste des matériels (7)", "Le matériel s'ajoute alors que les champs obligatoires ne sont pas rempli."); } */ /** * Test testMat32CreateFails * * @return void */ public function testMat33CreateFailsAsSuper() { $this->_testMatCreateFailsAs('SUPER'); } public function testMat33CreateFailsAsUser() { $this->_testMatCreateFailsAs('USER'); } public function testMat33CreateFailsAsUserFromLdap() { $this->_testMatCreateFailsAs('USER_from_ldap'); } private function _testMatCreateFailsAs($role) { // test with each mandatory field except materiel_administratif and materiel_technique foreach (self::mandatoryFieldsForCreation as $mandatoryField) { $newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; $newMaterielWithMissingMandatoryFields[$mandatoryField] = null; $this->_testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, $mandatoryField); } // test with missing materiel_administratif AND materiel_technique null (equivalent to 0,0) $newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; $fields = ['materiel_administratif','materiel_technique']; foreach ($fields as $f) $newMaterielWithMissingMandatoryFields["$f"] = null; $this->_testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, implode(',',$fields)); } private function _testMatCreate1FailsAs($role, $newMaterielWithMissingMandatoryFields, $mandatoryField) { $this->setUp(); //$newMaterielWithMissingMandatoryFields = $this->newMaterielWithAllMandatoryFields; //$newMaterielWithMissingMandatoryFields['sur_categorie_id'] = null; /* Mandatory fields : 'id' => 15, 'designation' => 'Test 15', 'sur_categorie_id' => 1, 'categorie_id' => 1, 'materiel_administratif' => 0, 'materiel_technique' => 1, //'status' => 'CREATED', 'date_acquisition' => '19-04-2016', */ //$this->setUp(); // On doit pouvoir accéder à la page une fois authentifié $this->authAs($role); $this->get('/materiels/index'); $nbmat = $this->userHasRoleAtLeast('Administration') ? 7 : 6; $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role.','.$mandatoryField); $this->post('/materiels/add', $newMaterielWithMissingMandatoryFields); $this->get('/materiels/index'); $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role." Le matériel s'ajoute alors que le champ obligatoire ".$mandatoryField." n'est pas rempli"); $this->tearDown(); } /* * III - ACTION UPDATE * ACTION "materiels/edit/id" : Editer un matériel */ /** * Test edit method * * @return void */ // ACTION 'edit' /* public function testUpdate() { // ACTION 'edit' foreach ($this->ROLES as $role) { $this->authAs($role); if ($role=='USER') continue; $this->_testUpdates($role); } // foreach } */ //TODO: test as USER //public function testUpdateAsUser() { $this->_testUpdatesAs('USER'); } public function testUpdateAsResp() { $this->_testUpdatesAs('RESP'); } public function testUpdateAsAdmin() { $this->_testUpdatesAs('ADMIN'); } public function testUpdateAsAdminPlus() { $this->_testUpdatesAs('ADMINP'); } public function testUpdateAsSuperAdmin() { $this->_testUpdatesAs('SUPER'); } private function _testUpdatesAs($role) { $this->authAs($role); // 1) Test qu'on peut modifier un materiel CREATED // Toutes les donnees passees sont modifiees $data = [ 'designation' => 'Matos Test 2 CREATED modified', //'sur_categorie_id' => 1, //'categorie_id' => 1, 'materiel_administratif' => 0, //'materiel_technique' => 1, //'status' => 'CREATED', 'date_acquisition' => '19-04-2016', 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', 'fournisseur_id' => 2 ]; $this->post('/materiels/edit/2', $data); $this->get('/materiels/index'); $this->assertResponseContains("Matos Test 2 CREATED modified", "Le matériel CREATED édité n'a pas pu etre enregistré"); // 2) Passe le status à VALIDATED $data = [ 'designation' => 'Matos Test 2 VALIDATED', //'sur_categorie_id' => 1, //'categorie_id' => 1, //'materiel_administratif' => 0, //'materiel_technique' => 1, 'status' => 'VALIDATED', //'date_acquisition' => '19-04-2016', //'nom_createur' => 'Pallier Etienne', //'nom_modificateur' => 'Jean Administration', //'nom_responsable' => 'Jacques Utilisateur', //'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', //'fournisseur_id' => 2 ]; $this->post('/materiels/edit/2', $data); $this->get('/materiels/index'); $this->assertResponseContains("Matos Test 2 VALIDATED", "Le matériel CREATED édité n'a pas pu etre passé à VALIDATED"); // 3) Test qu'on peut modifier un materiel VALIDATED (certains champs, a completer TODO:) $data = [ 'designation' => 'Matos Test 2 VALIDATED updated', //'sur_categorie_id' => 1, //'categorie_id' => 1, //'materiel_administratif' => 0, //'materiel_technique' => 1, //'status' => 'VALIDATED', //'date_acquisition' => '19-04-2016', //'nom_createur' => 'Pallier Etienne', //'nom_modificateur' => 'Jean Administration', //'nom_responsable' => 'Jacques Utilisateur', //'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', //'fournisseur_id' => 2 ]; $this->post('/materiels/edit/2', $data); $this->get('/materiels/index'); $this->assertResponseContains("Matos Test 2 VALIDATED updated", "Le matériel VALIDATED édité n'a pas pu etre enregistré"); // 4) Test que un edit anormal ne fonctionne pas (erreur sur champ status) $data = [ 'designation' => 'Matos Test 9', /* 'sur_categorie_id' => 1, 'categorie_id' => 1, 'materiel_administratif' => 0, 'materiel_technique' => 1, */ 'status' => 'xxx', /* 'date_acquisition' => '19-04-2016', 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', */ ]; $this->post('/materiels/edit/2', $data); $this->get('/materiels/index'); $this->assertResponseNotContains("Matos Test 9", "Le matériel édité a pu etre enregistré alors que le statut n'est pas valide"); } /* * ACTION "materiels/delete" : (D) Supprimer un materiel */ /* * IV - ACTION Delete */ /** * Test delete method * * @return void */ public function testDelete() { $this->authSuperAdmin(); //TODO: impossible de supprimer le matos 1, why ??? //$this->post('/materiels/delete/1'); $this->post('/materiels/delete/2'); $this->get('/materiels/index'); $this->assertResponseContains("Liste des matériels (6)", "Le matériel n'as pas été supprimé."); $this->assertResponseNotContains("Test 2", "Le matériel n'as pas été supprimé."); //$this->assertResponseNotContains("matos 1 USER", "Le matériel n'as pas été supprimé."); } /* * V - OTHER ACTIONS */ /** * Test find method * * @return void */ public function testFind() { $this->authSuperAdmin(); $dataSearch = [ 's_designation' => 'Test', 's_matostype' => '', 's_sur_categorie_id' => '', 's_categorie_id' => '', 's_sous_categorie_id' => '', 's_status' => '', 's_groupes_metier_id' => '', 's_groupes_thematique_id' => '', 's_numero_commande' => '', 's_numero_laboratoire' => '', 's_organisme_id' => '', 's_nom_responsable' => '', 's_numero_inventaire_organisme' => '', 's_numero_inventaire_old' => '', 's_date_acquisition' => '', 's_periode_acquisition1' => '', 's_periode_acquisition2' => '', 's_prix_ht' => '', 's_prix_ht_sup' => '', 's_prix_ht_inf' => '', 's_fournisseur_id' => '', 's_salle' => '' ]; // Test sans aucun champ $this->get('/materiels/find'); $this->assertResponseContains("Aucun résultats pour cette recherche.", "Le contenu de la recherche devrait être vide."); // Test champ générale formulaire $this->post('/materiels/find', [ 's_all' => 'TEST-2016-0002' ]); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte."); // Test champ générale menu latéral $this->post('/materiels/find', [ 's_all_2' => 'TEST-2016-0002' ]); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche général du menu latéral est incorrecte."); // Test champ designation $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrecte."); // Test champ numero_laboratoire $dataSearch['s_designation'] = ''; $dataSearch['s_numero_laboratoire'] = 'TEST-2016-0003'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par numero de laboratoire est incorrecte."); // Test champ status $dataSearch['s_numero_laboratoire'] = ''; $dataSearch['s_status'] = 'CREATED'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par statut est incorrecte."); // Test champ date_acquisition $dataSearch['s_status'] = ''; $dataSearch['s_date_acquisition'] = '2016-05-11'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (5)", "Le nb de materiels pour la recherche par date d'acquisition est incorrecte."); /* * //Test champ fournisseur_id * $dataSearch['s_fournisseur_id'] = 1; * $this->post('/materiels/find', $dataSearch); * $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte."); * //Test champ salle * $dataSearch['s_salle'] = 'I203'; * $this->post('/materiels/find', $dataSearch); * $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par detaille lieu est incorrecte."); */ // Test champ periode_acquisition1 (debut) $dataSearch['s_date_acquisition'] = ''; $dataSearch['s_periode_acquisition1'] = '2015-01-01'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrecte."); // Test champ periode_acquisition1 (debut) && champ periode_acquisition2 (fin) $dataSearch['s_periode_acquisition2'] = '2016-01-01'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrecte."); // Test champ periode_acquisition2 (fin) $dataSearch['s_periode_acquisition1'] = ''; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrecte."); // Test champ prix_ht $dataSearch['s_periode_acquisition2'] = ''; $dataSearch['s_prix_ht'] = '50'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte."); // Test champ prix_ht_sup $dataSearch['s_prix_ht'] = ''; $dataSearch['s_prix_ht_sup'] = '30'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht superieur est incorrecte."); // Test champ prix_ht_inf $dataSearch['s_prix_ht_sup'] = ''; $dataSearch['s_prix_ht_inf'] = '70'; $this->post('/materiels/find', $dataSearch); $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par prix ht inferieur est incorrecte."); } /** * Test addReadSuivisMateriel * * @return void */ public function testAddReadSuivisMateriel() { $this->authSuperAdmin(); $dataSuivi1 = [ 'materiel_id' => 1, 'date_controle' => '2016-04-19', 'date_prochain_controle' => '2016-04-19', 'type_suivi_id' => 1, 'groupes_metier_id' => 1, 'groupes_thematique_id' => 1, 'organisme' => 'Lorem ipsum dolor sit amet', 'frequence' => 1, 'type_frequence' => '/ Jours', 'commentaire' => 'Lorem ipsum dolor sit amet', 'nom_createur' => 'Lorem ipsum dolor sit amet', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:28', 'modified' => '2016-04-19 09:09:28' ]; $dataSuivi2 = [ 'materiel_id' => 1, 'date_controle' => '2016-04-19', 'date_prochain_controle' => '2016-04-19', 'type_suivi_id' => 1, 'groupes_metier_id' => 1, 'groupes_thematique_id' => 1, 'organisme' => 'Lorem ipsum dolor sit amet', 'frequence' => 1, 'type_frequence' => '/ Jours', 'commentaire' => 'Lorem ipsum dolor sit amet', 'nom_createur' => 'Lorem ipsum dolor sit amet', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:28', 'modified' => '2016-04-19 09:09:28' ]; $this->post('/suivis/add/1', $dataSuivi1); $this->post('/suivis/add/1', $dataSuivi2); $this->get('/materiels/view/1'); $this->assertResponseContains("Suivi(s) du matériel (3)", "Le nb de suivi renvoyé pour ce matériel est incorrect."); } /** * Test addReadEmpruntsMateriel * * @return void */ public function testAddReadEmpruntsMateriel() { $this->authSuperAdmin(); $dataEmprunt1 = [ 'materiel_id' => 1, 'date_emprunt' => '2016-04-19', 'date_retour_emprunt' => '2016-04-19', 'emprunt_interne' => 1, 'laboratoire' => 'Lorem ipsum dolor sit amet', 'site_id' => 1, 'e_lieu_detail' => 'Lorem ipsum dolor sit amet', 'nom_emprunteur' => 'Lorem ipsum dolor sit amet', 'email_emprunteur' => 'Lorem ipsum dolor sit amet', 'tel' => 'Lorem ipsum dolor ', 'commentaire' => 'Lorem ipsum dolor sit amet', 'nom_createur' => 'Lorem ipsum dolor sit amet', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:26', 'modified' => '2016-04-19 09:09:26' ]; $dataEmprunt2 = [ 'materiel_id' => 1, 'date_emprunt' => '2016-04-19', 'date_retour_emprunt' => '2016-04-19', 'emprunt_interne' => 0, 'laboratoire' => 'Lorem ipsum dolor sit amet', 'site_id' => 1, 'e_lieu_detail' => 'Lorem ipsum dolor sit amet', 'nom_emprunteur' => 'Lorem ipsum dolor sit amet', 'email_emprunteur' => 'Lorem ipsum dolor sit amet', 'tel' => 'Lorem ipsum dolor ', 'commentaire' => 'Lorem ipsum dolor sit amet', 'nom_createur' => 'Lorem ipsum dolor sit amet', 'nom_modificateur' => 'Lorem ipsum dolor sit amet', 'created' => '2016-04-19 09:09:26', 'modified' => '2016-04-19 09:09:26' ]; $this->post('/emprunts/add/1', $dataEmprunt1); $this->post('/emprunts/add/1', $dataEmprunt2); $this->get('/materiels/view/1'); $this->assertResponseContains("Emprunt(s) du matériel (3)", "Le nb d'emprunt renvoyé pour ce matériel est incorrect."); } /** * NE FONCTIONNE PAS * Test addCopieMateriel * * @return void public function testAddCopieMateriel() { * $this->authUser(); * $data = [ * 'designation' => 'Test 14', * 'sur_categorie_id' => 1, * 'categorie_id' => 1, * 'materiel_administratif' => 0, * 'materiel_technique' => 1, * 'status' => 'CREATED', * 'date_acquisition' => '2016-04-16']; * $this->post('/materiels/add/13', $data); * $this->get('/materiels/view/14'); * $this->assertResponseContains("Jesus", "La copie du materiel ne se fait pas correctement."); * $this->assertResponseContains("TEST COPIE MATERIEL", "La copie du materiel ne se fait pas correctement."); * } */ /** * Test updateStatutCreated * * @return void */ public function testUpdateStatutCreated() { $this->authSuperAdmin(); $this->post('/materiels/status-validated/11'); $this->get('/materiels/view/11'); $this->assertResponseContains('VALIDATED', "La validation du materiel ne se fait pas correctement."); } /** * Test updateStatutValidated * * @return void */ public function testUpdateStatutValidated() { $this->authSuperAdmin(); $this->post('/materiels/status-to-be-archived/12'); $this->get('/materiels/view/12'); $this->assertResponseContains('TOBEARCHIVED', "La demande d'archivage du materiel ne se fait pas correctement."); } /** * Test updateStatutToBeArchived * * @return void */ public function testUpdateStatutToBeArchived() { $this->authAdmin(); $this->post('/materiels/status-archived/13'); $this->get('/materiels/view/13'); $this->assertResponseNotContains('TOBEARCHIVED', "L'archivage du materiel ne se fait pas correctement."); } /** * Test UpdatePlaceEtiquetteMateriel * * @return void */ public function testUpdatePlaceEtiquetteMateriel() { $this->authSuperAdmin(); $this->post('/materiels/set-label-is-placed/11/view'); $this->get('/materiels/view/11'); $this->assertResponseContains('Etiquette posée Oui', "Le placement de l'étiquette sur le materiel ne se fait pas correctement."); } /** * Test UpdateNotPlaceEtiquetteMateriel * * @return void */ public function testUpdateNotPlaceEtiquetteMateriel() { $this->authSuperAdmin(); $this->post('/materiels/set-label-is-not-placed/12/view'); $this->get('/materiels/view/12'); $this->assertResponseContains('Etiquette posée Non', "L'enlevement de l'étiquette sur le materiel ne se fait pas correctement."); } /** * Test UpdateStatusSelectedMateriel * * @return void */ public function testUpdateStatusSelectedMateriels() { $this->authSuperAdmin(); //$this->authAdmin(); $this->post('/materiels/execActions', ['updateSelectedStatus' => 'true', 'what' => 'CREATED', 11 => '1', 12 => '1', 13 => '1']); $this->get('/materiels/view/11'); $this->assertResponseContains('VALIDATED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('CREATED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('TOBEARCHIVED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('ARCHIVED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->get('/materiels/view/12'); $this->assertResponseContains('VALIDATED', "(12) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('CREATED', "(12) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->get('/materiels/view/13'); $this->assertResponseContains('VALIDATED', "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('CREATED', "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); } /** * Test ACLEditUtilisateur * * @return void */ public function testACLEditUtilisateur() { // $this->authAdmin(); $this->authUtilisateur(); // $this->get('/materiels/edit/12'); // $this->assertResponseNotContains('Test 12', 'Le profil utilisateur a accès au formulaire edit, alors que le matériel ne lui appartient pas.'); // $this->assertResponseContains('Test 12', 'Le profil utilisateur a accès au formulaire edit, alors que le matériel ne lui appartient pas.'); $this->get('/materiels/view/11'); $this->assertResponseContains('Informations', 'La page view n\'existe pas'); $this->get('/materiels/edit/11'); $this->assertResponseContains('Editer', 'La page edit n\'existe pas'); $this->assertResponseContains('Test 11', 'Le profil utilisateur n\'a pas accès au formulaire edit, alors que le matériel lui appartient.'); $this->assertResponseNotContains('EOTP', 'Le profil utilisateur a accès à la partie administrative sur le formulaire edit.'); } /** * Test ACLEditAdmin * * @return void */ public function testACLEditAdmin() { $this->authAdmin(); $this->get('/materiels/edit/12'); $this->assertResponseContains('EOTP', 'Le profil admin+ n\'a pas accès à la partie administrative sur le formulaire edit.'); } /** * Test ACLDeleteUtilisateur * * @return void */ public function testACLDeleteUtilisateur() { $this->authUtilisateur(); $this->post('/materiels/delete/2'); $this->get('/materiels/index'); $this->assertResponseContains('Liste des matériels (6)', 'Le profil utilisateur a accès à la suppression, alors que le matériel ne lui appartient pas.'); $this->post('/materiels/delete/11'); $this->get('/materiels/index'); $this->assertResponseContains('Liste des matériels (5)', 'Le profil utilisateur n\'a pas accès à la suppression, alors que le matériel lui appartient.'); } /** * Test ACLDeleteAdmin * * @return void */ public function testACLDeleteAdmin() { $this->authAdmin(); $this->post('/materiels/delete/13'); $this->get('/materiels/index'); $this->assertResponseContains('Liste des matériels (7)', 'Le profil admin+ a accès à la suppression alors que le statut est TOBEARCHIVED.'); $this->post('/materiels/delete/2'); $this->get('/materiels/index'); $this->assertResponseContains('Liste des matériels (6)', 'Le profil admin+ n\'a pas accès à la suppression.'); } /** * Test ACLChangeStatutUtilisateur * * @return void */ public function testACLChangeStatutUtilisateur() { $this->authUtilisateur(); $this->post('/materiels/status-validated/11'); $this->get('/materiels/view/11'); $this->assertResponseContains('CREATED', "La validation du materiel se fait avec un profil utilisateur."); $this->post('/materiels/status-to-be-archived/12'); $this->get('/materiels/view/12'); $this->assertResponseContains('VALIDATED', "La demande d'archivage du materiel se fait avec un profil utilisateur."); $this->post('/materiels/status-archived/13'); $this->get('/materiels/view/13'); $this->assertResponseContains('TOBEARCHIVED', "L'archivage du materiel se fait avec un profil utilisateur."); } /** * Test ACLChangeStatutAdmin * * @return void */ public function testACLChangeStatutAdmin() { $this->authAdmin(); $this->post('/materiels/status-validated/11'); $this->get('/materiels/view/11'); $this->assertResponseContains('VALIDATED', "La validation du materiel ne se fait pas correctement avec un profil admin+."); $this->post('/materiels/status-to-be-archived/12'); $this->get('/materiels/view/12'); $this->assertResponseContains('TOBEARCHIVED', "La demande d'archivage du materiel ne se fait pas correctement avec un profil admin+."); $this->post('/materiels/status-archived/13'); $this->get('/materiels/view/13'); $this->assertResponseContains('ARCHIVED', "L'archivage du materiel ne se fait pas correctement avec un profil admin+."); } /** * Test ACLIndexResponsable * * @return void */ public function testACLIndexResponsable() { $this->authResponsable(); $this->get('/materiels/index?GM=1'); $this->assertResponseContains('Liste des matériels (6)', "La liste des materiels selon le groupe métier ne s'affiche pas correctement."); $this->get('/materiels/index?GMV=1'); $this->assertResponseContains('Liste des matériels (3)', "La liste des materiels selon le groupe métier et CREATED ne s'affiche pas correctement."); } /** * Test MaterielPanne * * @return void */ public function testMaterielPanne() { $this->authSuperAdmin(); $this->get('/materiels/view/2'); $this->assertResponseNotContains("(HORS SERVICE)", "Le matériel est hors-service par défaut."); $data = [ 'designation' => 'Test 6', 'sur_categorie_id' => 1, 'categorie_id' => 1, 'materiel_administratif' => 0, 'materiel_technique' => 1, 'status' => 'CREATED', 'date_acquisition' => '19-04-2016', 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', 'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu', 'hors_service' => 1 ]; $this->post('/materiels/edit/2', $data); $this->get('/materiels/view/2'); $this->assertResponseContains("(HORS SERVICE)", "Le matériel n'est pas hors-service comme demandé."); } /** * TEST IMPOSSIBLE CAR FONCTION DU CONTROLLER FINI PAR EXIT() * Test exportFind * * @return void public function testExportFind() { * $this->authUser(); * $csv = 'id;Designation;Sur-categorie;Categorie;Sous-categorie;"Numero interne";Description;Organisme;"Mat. administratif";"Mat. technique";Statut;"Date d\'acquisition";"Date de reception";Fournisseur;"Prix HT";EOTP;"Numero de commande";"Code comptable";"Numero de serie";"Grp. thematique";"Grp. metier";"Numero inventaire organisme";"Ancien Numero inventaire";"Site stockage";"Nom responsable";"Email responsable" * 12;"Test 12";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";TEST-2016-0012;"Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.";"Lorem ipsum dolor sit amet";1;1;VALIDATED;11/05/2016;19/04/2016;"Lorem ipsum dolor sit amet";75;"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet-Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet";"Lorem ipsum dolor sit amet"'; * $materiel = $this->Materiels->get('12'); * $data = [ 'result' => [$materiel]]; * $this->session($data); * $this->put('/materiels/export/search'); * //$this->assertTextContains(, $csv); * $this->assertResponseContains($csv, 'L\'export CSV de la recherche ne fonctionne pas correctement'); * } * /** TEST IMPOSSIBLE CAR FONCTION DU CONTROLLER FINI PAR EXIT() * Test exportAll * @return void public function testExportAll() { * $this->authUser(); * $this->>post('materiels/export', ['exportAll' => 'test']); * $this->assertResponseContains("fdsf"); * } * /** TEST IMPOSSIBLE CAR FONCTION DU CONTROLLER FINI PAR EXIT() * Test generateRubanMateriel * @return void public function testGenerateRubanMateriel() { * $this->authUser(); * } */ }