base_url = 'http://localhost/'.BASE_PATH_URL; // Instancie la timezone date_default_timezone_set('Europe/Paris'); echo ' = '.get_class().'.'.str_replace('test_', '', $this->getName())."\r\n"; // Instance de la classe Utils require_once '../obj/utils.class.php'; @session_start(); $_SESSION['collectivite'] = 2; $_SESSION['login'] = 'admin'; $_SERVER['REQUEST_URI'] = ''; if($this->f === null) { $this->f = new utils('nohtml'); } // Activation du paramètre d'activation du sig $this->f->db->autoExecute( DB_PREFIXE."om_parametre", array('valeur' => 'sig_externe'), DB_AUTOQUERY_UPDATE, "libelle = 'option_sig' AND om_collectivite IN (1, 2)" ); } public function onNotSuccessfulTest(Exception $e){ echo 'Line '.$e->getLine().' : '.$e->getMessage()."\r\n"; parent::onNotSuccessfulTest($e); } /** * Méthode lancée en fin de traitement */ public function tearDown() { // Désactivation du paramètre d'activation du sig $this->f->db->autoExecute( DB_PREFIXE."om_parametre", array('valeur' => 'aucun'), DB_AUTOQUERY_UPDATE, "libelle = 'option_sig' AND om_collectivite IN (1, 2)" ); } /** * Initialisation pour session cURL * @param string $url Lien * @param string $request Mode de requête * @param array $postfields Données à envoyer * @return mixed Session cURL */ private function init_cURL($url, $request, $postfields) { // Initialisation session cURL $curl = curl_init(); // Url de la page à récupérer curl_setopt($curl, CURLOPT_URL, $url); // Permet de récupérer le résultat au lieu de l'afficher curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Démarrer un nouveau cookie de session curl_setopt($curl, CURLOPT_COOKIESESSION, true); // Requête REST à envoyer (par défaut à GET) switch ($request) { case 'POST': curl_setopt($curl, CURLOPT_POST, true); break; case 'PUT': curl_setopt($curl, CURLOPT_PUT, true); break; } // Si il y a des paramètres à envoyer if ($postfields != '') { // Informations à envoyer $postfields = $this->preparePostFields($curl, $postfields, $request); } // Retour de la session cURL $return = curl_exec($curl); // Ferme la session cURL curl_close($curl); // Message retourné par REST $message = $this->getReturnMessage($return, $request); // Retourne le message return $message; } /** * Prépare les paramètres à envoyer en cURL * @param mixed $curl Session cURL * @param array $array Tableau des paramètres * @param string $request Méthode utilisée (POST/PUT) */ private function preparePostFields($curl, $array, $request) { // Si c'est une requête POST if ($request == 'POST') { // Génère une chaîne de requête en encodage URL $return = http_build_query($array); // Données passées en POST curl_setopt($curl, CURLOPT_POSTFIELDS, $return); // Sinon c'est une requête PUT } else { // Encode le tableau en json $return = json_encode($array); // Crée un fichier temporaire $putData = tmpfile(); // Ecrit la chaîne dans le fichier temporaire fwrite($putData, $return); // Place le curseur au début du fichier fseek($putData, 0); // Permet de retourner des données binaires curl_setopt($curl, CURLOPT_BINARYTRANSFER, true); // Le fichier lu par le transfert lors du chargement curl_setopt($curl, CURLOPT_INFILE, $putData); // Taille du fichier en octet attendue curl_setopt($curl, CURLOPT_INFILESIZE, strlen($return)); } } /** * Retourne seulement le message du retour REST * @param string $return Retour du REST * @return string Message du retour */ private function getReturnMessage($return, $request) { // Si c'est une requête GET if ($request == 'GET') { // Retraite la chaîne $return = substr($return,1,-1); $return = trim($return); $return = preg_replace("(\r\n|\n|\r)",'',$return); // On retourne directement le return return $return; } // Decode du json et crée un objet $return = json_decode($return); // Retourne le message du retour REST return $return->message; } /** * Test le module consultation de maintenance */ public function testMaintenanceConsultation() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'consultation', 'data' => 'NA', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, '2 consultations mise(s) à jour.'); //Deuxième jet pour autre message // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Aucune mise a jour.'); } /** * Test le module instruction de maintenance */ public function testMaintenanceInstruction() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'instruction', 'data' => 'NA', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, '1 dossier(s) mis à jour.'); } /** * Test le module d'import sans l'option de numérisation activée. * * @return void */ public function test_maintenance_import_without_option_activated() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'import', 'data' => array( 'Todo' => '../var/digitalization/Todo', 'Done' => '../var/digitalization/Done' ), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'L\'option de numérisation des dossiers n\'est pas activée'); } /** * Test le module de purge sans l'option de numérisation activée. * * @return void */ public function test_maintenance_purge_without_option_activated() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'purge', 'data' => array( 'dossier' => '../var/digitalization/Done', 'nombre_de_jour' => "20" ), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'L\'option de numérisation des dossiers n\'est pas activée'); } /** * Active l'option de numérisation. * * @return void */ public function test_activate_option_digitalization_folder() { // Ajoute les options nécessaires à la numérisation chmod('../dyn/config.inc.php', 0777); $config = file_get_contents('../dyn/config.inc.php'); $pattern = '\?>'; $replace = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>'; $output = preg_replace("/".$pattern."/", $replace, $config); $new_config = file_put_contents('../dyn/config.inc.php', $output); // $this->assertNotEquals(false, $new_config); } /** * Test de non régression concernant une sur consomation de mémoire lors de * l'import des documents numérisés. * * XXX Si ce test sort avec erreur : Trying to get property of non-object * c'est la consomation de mémoire qui explose */ public function test_tnr_run_import_out_of_memory() { // Nom de dossier $pathSrc = "../var/digitalization/Todo/PA0130551200001"; //Nom dossier destination $pathDes = "../var/digitalization/Done/PA0130551200001"; exec("(dd if=/dev/zero of=binary_files/20101106AUTPCP.pdf bs=15485760 count=1) > /dev/null 2>&1"); mkdir($pathSrc); chmod($pathSrc, 0777); mkdir($pathDes); chmod($pathDes, 0777); // Récupération du document for ($i=0; $i < 100; $i++) { copy( 'binary_files/20101106AUTPCP.pdf', $pathSrc.'/20101106AUTPCP-'.$i.'.pdf' ); } // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'import', 'data' => array( 'Todo' => '../var/digitalization/Todo', 'Done' => '../var/digitalization/Done' ), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Tous les documents ont été traités'); //Deuxième jet pour autre message // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Aucun document à traiter'); // Suppression des fichiers importés for ($i=0; $i < 100; $i++) { // Suppression des documents créé unlink($pathDes.'/20101106AUTPCP-'.$i.'.pdf'); } // Suppression du dossier PC0130551200005.P0 rmdir($pathSrc); rmdir($pathDes); } /** * Test le module import de maintenance */ public function testMaintenanceImport() { // Création du dossier PC0130551200001.P0 dans le dossier de // numérisation mkdir('../var/digitalization/Todo/PC0130551200001.P0/'); chmod('../var/digitalization/Todo/PC0130551200001.P0/', 0777); // Récupération du document copy('binary_files/20091106AUTPCP.pdf', '../var/digitalization/Todo/PC0130551200001.P0/20091106AUTPCP.pdf'); // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'import', 'data' => array( 'Todo' => '../var/digitalization/Todo', 'Done' => '../var/digitalization/Done' ), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Tous les documents ont été traités'); //Deuxième jet pour autre message // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Aucun document à traiter'); } /** * Test le module purge de maintenance */ public function testMaintenancePurge() { mkdir('../var/digitalization/Done/PC0130551200002.P0'); touch('../var/digitalization/Done/PC0130551200002.P0/test.pdf'); touch('../var/digitalization/Done/PC0130551200001.P0/20091106AUTPCP.pdf',strtotime('-1 month')); // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/maintenance'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'module' => 'purge', 'data' => array( 'dossier' => '../var/digitalization/Done', 'nombre_de_jour' => "20" ), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, '1 fichier(s) purgé(s) sur 2 dossier(s) traité(s)'); // Supprime les dossiers créent pour les tests testMaintenanceImport() // et testMaintenancePurge() unlink ('../var/digitalization/Done/PC0130551200002.P0/test.pdf'); rmdir('../var/digitalization/Todo/PC0130551200001.P0'); rmdir('../var/digitalization/Done/PC0130551200002.P0'); } /** * Désactive l'option de numérisation. * * @return void */ public function test_desactivate_option_digitalization_folder() { // Supprime les options nécessaires à la numérisation chmod('../dyn/config.inc.php', 0777); $config = file_get_contents('../dyn/config.inc.php'); $search = '$config["digitalization_folder_path"] = "../var/digitalization/";$config["option_digitalization_folder"] = true;?>'; $replace = "?>"; $output = str_replace($search, $replace, $config); $new_config = file_put_contents('../dyn/config.inc.php', $output); // $this->assertNotEquals(false, $new_config); } /** * Test le retour d'avis d'une consultation sans fichier de consultation */ public function testConsultationSansFichier() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/consultations/3'; // Mode de la requête $request = 'PUT'; // Données à envoyer $postfields = array( 'date_retour' => '15/01/2013', 'avis' => 'Favorable', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'L\'avis de la consultation 3 a été pris en compte'); //Deuxième jet pour autre message // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Un retour d\'avis a déjà été rendu pour la consultation \'3\'.'); } /** * Test le retour d'avis d'une consultation avec fichier de consultation */ public function testConsultationAvecFichier() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/consultations/4'; // Mode de la requête $request = 'PUT'; // Données à envoyer $postfields = array( 'date_retour' => '15/03/2013', 'avis' => 'Favorable', 'fichier_base64' => 'JVBERi0xLjQKJcOkw7zDtsOfCjIgM', 'nom_fichier' => 'plop.pdf', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'L\'avis de la consultation 4 a été pris en compte'); //Deuxième jet pour autre message // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Un retour d\'avis a déjà été rendu pour la consultation \'4\'.'); } /** * Test le retour de message */ public function testMessage() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/messages'; // Mode de la requête $request = 'POST'; // Données à envoyer $postfields = array( 'type' => 'Mise à jour de complétude ERP ACC', 'date' => '16/06/2014 14:12', 'emetteur' => 'John Doe', 'dossier_instruction' => 'PC0130551200001P0', 'contenu' => array( 'Complétude ERP ACC' => 'non', 'Motivation Complétude ERP ACC' => 'Lorem ipsum dolor sit amet...'), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Insertion du message \'Mise à jour de complétude ERP ACC\' OK.'); // On change les postfields $postfields = array( 'type' => 'Mise à jour de complétude ERP SECU', 'date' => '16/06/2014 14:12', 'emetteur' => 'John Doe', 'dossier_instruction' => 'PC0130551200001P0', 'contenu' => array( 'Complétude ERP SECU' => 'oui', 'Motivation Complétude ERP SECU' => 'Lorem ipsum dolor sit amet...'), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Insertion du message \'Mise à jour de complétude ERP SECU\' OK.'); // On change les postfields $postfields = array( 'type' => 'Mise à jour de qualification', 'date' => '16/06/2014 14:12', 'emetteur' => 'John Doe', 'dossier_instruction' => 'PC0130551200001P0', 'contenu' => array( 'Confirmation ERP' => 'oui', 'Type de dossier ERP' => 'Lorem ipsum dolor sit amet...', 'Catégorie de dossier ERP' => 'Lorem ipsum dolor sit amet...'), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Insertion du message \'Mise à jour de qualification\' OK.'); // On change les postfields $postfields = array( 'type' => 'Dossier à enjeux ERP', 'date' => '16/06/2014 14:12', 'emetteur' => 'John Doe', 'dossier_instruction' => 'PC0130551200001P0', 'contenu' => array( 'Dossier à enjeux ERP' => 'oui',), ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Insertion du message \'Dossier à enjeux ERP\' OK.'); } /** * Test la mise à jour de dossier d'autorisation */ public function testDossierAutorisationMAJERP() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/dossier_autorisations/PC0130551200001'; // Mode de la requête $request = 'PUT'; // Données à envoyer $postfields = array( 'numero_erp' => '12345', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Numero ERP du batiment etait assigne au dossier d\'autorisation PC0130551200001'); } /** * Test l'ERP ouvert */ public function testDossierAutorisationERPOuvert() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/dossier_autorisations/PC0130551200001'; // Mode de la requête $request = 'PUT'; // Données à envoyer $postfields = array( 'erp_ouvert' => 'oui', 'date_arrete' => '20/04/2013', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals($message, 'Signature de l\'ouverture ERP au publique etait enregistre pour le dossier d\'autorisation PC0130551200001'); } /** * Test l'arrêté d'un dossier DAT effectué */ public function testDossierAutorisationDATArrete() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/dossier_autorisations/PC0130551200001'; // Mode de la requête $request = 'PUT'; // Données à envoyer $postfields = array( 'arrete_effectue' => 'oui', 'date_arrete' => '04/06/2014', ); // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); /// On vérifie le retour de la session cURL $this->assertEquals($message, 'Signature de l\'ouverture ERP etait enregistre pour le dossier d\'autorisation PC0130551200001'); } /** * Test la méthode GET sur un dossier d'autorisation */ public function testDossierAutorisationGET() { // Lien à envoyer $url = $this->base_url.'services/rest_entry.php/dossier_autorisations/PC0130551200001'; // Mode de la requête $request = 'GET'; // Données à envoyer $postfields = ''; // Initialisation cURL $message = $this->init_cURL($url, $request, $postfields); // On vérifie le retour de la session cURL $this->assertEquals('"dossier_autorisation": "PC0130551200001", "dossier_autorisation_type_detaille": "1", "exercice": "", "insee": "01234", "terrain_references_cadastrales": "", "terrain_adresse_voie_numero": "", "terrain_adresse_voie": "", "terrain_adresse_lieu_dit": "", "terrain_adresse_localite": "", "terrain_adresse_code_postal": "", "terrain_adresse_bp": "", "terrain_adresse_cedex": "", "terrain_superficie": "", "arrondissement": "", "depot_initial": "2012-12-17", "erp_numero_batiment": "12345", "erp_ouvert": "f", "erp_date_ouverture": "2013-04-20", "erp_arrete_decision": "f", "erp_date_arrete_decision": "2014-06-04", "numero_version": "0", "etat_dossier_autorisation": "1", "date_depot": "", "date_decision": "", "date_validite": "", "date_chantier": "", "date_achevement": "", "avis_decision": "", "etat_dernier_dossier_instruction_accepte": "", "dossier_autorisation_libelle": "PC 013055 12 00001", "om_collectivite": "2", "cle_acces_citoyen": ""',$message); } /* * Test de la complétude et la clôture d'un dossier d'instruction * ERP -> ADS */ public function testDossierInstructionPut(){ //{{{On essaye de mettre à jour un dossier qui n'existe pas // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/LOREM"); // Formatage des données à envoyer $data = array( "message" => "complet", "date" => date("d/m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Ce dossier n'existe pas")); //}}} //{{{On essaye de mettre à jour un dossier qui existe mais n'est pas un AT // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/PC0130551200001P0"); // Formatage des données à envoyer $data = array( "message" => "complet", "date" => date("d/m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Ce dossier n'est pas un dossier de type AT")); //}}} //{{{On essaye de mettre à jour un dossier AT en cours d'instruction // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "complet", "date" => date("d/m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals(_("Mise a jour des donnees realisees avec succes"), $messageSenderRest->getResponse()); //}}} //{{{On essaye de mettre à jour un dossier sans message // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "", "date" => date("d/m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Aucun message fourni")); //}}} //{{{On essaye de mettre à jour un dossier avec un message qui existe pas // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "test", "date" => date("d/m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Message fourni incorrect")); //}}} //{{{On essaye de mettre à jour un dossier sans date // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "complet", "date" => null ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Aucune date fournie")); //}}} //{{{On essaye de mettre à jour un dossier avec une date mal formatée // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "complet", "date" => date("m/Y") ); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Date fournie au mauvais format")); //}}} //{{{On ne fourni pas de numéro de dossier d'instruction // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/"); // Envoi de la requête $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Aucun identifiant fourni pour la ressource")); //}}} //{{{On essaye de mettre à jour un dossier AT déjà clos // Initialisation de la classe d'envoi de requête REST $messageSenderRest = new MessageSenderRest($this->base_url. "services/rest_entry.php/dossier_instructions/AT0130551300001P0"); // Formatage des données à envoyer $data = array( "message" => "clos", "date" => date("d/m/Y") ); // Envoi de la requête pour clôturé le dossier $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Mise a jour des donnees realisees avec succes")); // Envoi de la requête pour tester que l'on ne peut pas clôturer une //seconde fois un dossier d'instruction $messageSenderRest->execute("PUT", "application/json", json_encode($data)); // Vérification de la réponse $this->assertEquals($messageSenderRest->getResponse(), _("Ce dossier est deja clos")); //}}} } } ?>