Rev 783 | Rev 790 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phprequire_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';/* TO DO = ajouter un test pour Informations/id/Relations/catminat */class InformationsBaseflorTest extends ServiceEflorePhpUnit {public function __construct() {$this->projet = 'baseflor';$this->service = 'informations';}//++ ------------------------------------Test des ressources -----------------------------++public function testRessourceReferentielInconnu() {$ressources = array('dgoju.nn:73256');$parametres = array();$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu ="Erreur dans l'url de votre requête :"." </br> Le référentiel \" dgoju \" n'existe pas.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer un référentiel inconnu.");}public function testRessourceInconnue() {$ressources = array('inconnue');$parametres = array();$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu ="Erreur dans l'url de votre requête : </br> La ressource demandée n'existe pas.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si une ressource est eronnée.");}public function testRessourceNNInconnu() {$ressources = array('bdtfx.nn:3');$parametres = array();$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Les données recherchées sont introuvables.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si une requête ne renvoie pas de résultats.");}//++ ------------------------------------Test des paramètres -----------------------------++public function testParametreInconnu() {$ressourcesList = array(array('bdtfx.nn:73256'),array('bdtfx.nn:101128'));$parametres = array('paramatre' => 'image/jpeg');foreach ($ressourcesList as $ressources) {$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Erreur dans les parametres de votre requête :"." </br> Le paramètre \" paramatre \" n'existe pas.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si un paramètre est inconnu.");}}public function testParametreCategorieInconnue() {$ressourcesList = array(array('bdtfx.nn:73256'),array('bdtfx.nn:101128'));$parametres = array('categorie' => 'inventé');foreach ($ressourcesList as $ressources) {$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Valeur de paramètre inconnue pour 'categorie'. Ce paramètre n'est pas autorisé";$this->assertContains($messageAttendu, $retour,"Il faut indiquer si la valeur du paramètre categorie est inconnue pour (" . implode(',', $ressources) . ").");}}public function testParametreNavigationDepartSansLimite() {$ressources = array();$parametres = array('navigation.depart' => 10);$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "indiquez également la valeur pour le paramètre navigation.limite.";$this->assertEquals($messageAttendu, $retour,"Navigation.depart doit être accompagné de navigation.limite ensemble.");}public function testParametreDepartSuperieurTotalResultats() {$ressources = array();$parametres = array('navigation.depart' => 20000, 'navigation.limite' => 10 );$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu ="Erreur : la valeur pour le paramètre navigation.départ est supérieure"." au nombre total de résultats.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si la valeur de départ est supérieure au nombre de résultats.");}public function testParametreNavigationErrone() {$ressources = array();$parametresList = array(array('navigation.depart' => -5, 'navigation.limite' => 10 ),array('navigation.depart' => 0, 'navigation.limite' => abc ));$cles = array('navigation.depart','navigation.limite');$i = 0 ;foreach ($parametresList as $parametres) {$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Erreur : valeur erronnée pour le paramètre {$cles[$i]}.";$this->assertEquals($messageAttendu, $retour,"il faut indiquer lorsque qu'un des paramètres de navigation a une valeur impossible.");$i++;}}public function testParametreRetourFormatErrone() {$ressourcesList = array(array('bdtfx.nn:73256'),array('bdtfx.nn:101128'));$parametres = array('retour.format' => 'pdf');foreach ($ressourcesList as $ressources) {$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Valeur de paramètre inconnue pour 'retour.format'. Ce paramètre n'est pas autorisé";$this->assertContains($messageAttendu, $retour,"il faut indiquer lorsque que le paramètre retour.format a une valeur impossible.");}}public function testParametreVersionProjetInconnu() {$ressourcesList = array(array('bdtfx.nn:73256'),array('bdtfx.nn:101128'));$parametres = array('version.projet' => 'dhgkg22');foreach ($ressourcesList as $ressources){$retour = $this->consulterBrut($ressources, $parametres);$messageAttendu = "Erreur : La version est inconnue.";$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si la valeur du paramètre version.projet est inconnue.");}}//++ ------------------------------------Test du retour json correct -----------------------------++//++ ---Informations ----++public function testJsonBienFormeInformations() {$ressources = array();$parametres = array('navigation.depart' => 10, 'navigation.limite' => 15);$url = $this->creerUrl($ressources, $parametres);$retour = $this->consulterJson($ressources, $parametres);$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");$this->assertArrayHasKey('resultats', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");$this->verifierJsonEnteteBienFormeInformations($retour, $parametres);}private function verifierJsonEnteteBienFormeInformations($retour, $parametres) {//depart$this->assertArrayHasKey('depart', $retour['entete'],"L'en-tête ne contient pas d'attribut : depart ");$this->assertEquals($retour['entete']['depart'], $parametres['navigation.depart'],"La valeur de départ est incorrecte dans l'en-tête.");//limite$this->assertArrayHasKey('limite', $retour['entete'],"L'en-tête ne contient pas d'attribut : limite");$this->assertEquals($retour['entete']['limite'], $parametres['navigation.limite'],"La valeur de limite est incorrecte dans l'en-tête.");//total$this->assertArrayHasKey('total', $retour['entete'],"L'en-tête ne contient pas d'attribut : total ");$this->assertNotEquals('', $retour['entete']['total'],"La valeur de total est vide dans l'en-tête.");//href$this->assertArrayHasKey('href.suivant', $retour['entete'],"L'en-tête ne contient pas d'attribut : href.suivant ");$this->assertArrayHasKey('href.precedent', $retour['entete'],"L'en-tête ne contient pas d'attribut : href.precedent ");$parametres_url =array('navigation.depart' => ($retour['entete']['limite']+$retour['entete']['depart']),'navigation.limite' => $retour['entete']['limite'] );$urlsuivant = $this->creerUrl($ressources, $parametres_url);$this->assertEquals($urlsuivant, $retour['entete']['href.suivant'],"L' url $urlsuivant de l'entete est incorrecte.");}public function testJsonResultatsHrefInformations() {$ressources = array();$parametres = array('navigation.depart' => 370, 'navigation.limite' => 5);$url = $this->creerUrl($ressources, $parametres);$retour = $this->consulterJson($ressources, $parametres);foreach ($retour['resultats'] as $id => $valeurs) {if (!$valeurs['num_nomen']) {$this->assertArrayNotHasKey('href', $valeurs,"Il ne doit pas avoir de lien s'il n'y a pas de numéro nomenclatural (=0). Voir $url ");}}}public function testJsonNombreLimiteDemande() {$ressources = array();$parametresList = array('navigation.depart' => 10, 'navigation.limite' => 15 );$url = $this->creerUrl($ressources, $parametres);$retour = $this->consulterJson($ressources, $parametres);$this->assertLessThanOrEqual(15, count($retour),"Le json renvoie un nombre de résultats trop important : entete. Voir : $url");}//++ ---Informations.nn ----++public function testJsonInformationsNN_min() {$ressourcesList = array(array('bdtfx.nn:73256'),array('bdtfx.nn:101128'));$parametres = array('retour.format' => 'min' );foreach ($ressourcesList as $ressources) {$retour = $this->consulterJson($ressources, $parametres);$this->assertArrayNotHasKey('type_bio.code',$retour,"Le champs 'type_bio.code' ne doit pas être présent si retour.format=min. ");$this->assertArrayNotHasKey('type_bio.libelle',$retour,"Le champs 'type_bio.libelle' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey('type_bio.detail',$retour,"Le champs 'type_bio.detail' ne doit pas être présent si retour.format=min.");$champs = array_keys(config::get('champs_ontologiques'));foreach ($champs as $chps) {$this->assertArrayNotHasKey($chps.'.libelle', $retour,"Le champs '{$chps}.libelle' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'.code', $retour,"Le champs '{$chps}.code' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'.href', $retour,"Le champs '{$chps}.href' ne doit pas être présent si retour.format=min.");}foreach ($champs as $chps) {$this->assertArrayNotHasKey($chps.'_min.libelle', $retour,"Le champs '{$chps}_min.libelle' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'_min.code', $retour,"Le champs '{$chps}_min.code' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'_min.href', $retour,"Le champs '{$chps}_min.href' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'_max.libelle', $retour,"Le champs '{$chps}_max.libelle' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'_max.code', $retour,"Le champs '{$chps}_max.code' ne doit pas être présent si retour.format=min.");$this->assertArrayNotHasKey($chps.'_max.href', $retour,"Le champs '{$chps}_max.href' ne doit pas être présent si retour.format=min.");}}}public function testJsonInformationsNNBasefor_max() {$ressources = array('bdtfx.nn:73256');$parametresList = array(array('retour.format' => 'max', 'categorie' => 'description'),array('retour.format' => 'max' , 'categorie' => 'ecologie'));foreach ($parametresList as $parametres) {$retour = $this->consulterJson($ressources, $parametres);if ($parametres['categorie'] == 'description') {$this->verifierParametresDescription_max($retour);} else {$this->verifierParametresEcologie_max($retour, 'baseflor');}}}public function testJsonInformationsNNRangSup_max() {$ressources = array('bdtfx.nn:101128');$parametres = array('retour.format' => 'max' , 'categorie' => 'ecologie');$retour = $this->consulterJson($ressources, $parametres);if ($parametres['categorie'] == 'description') {$this->verifierParametresDescription_max();} else {$this->verifierParametresEcologie_max($retour, 'rangSup');}}private function verifierParametresDescription_max($retour) {$this->assertArrayHasKey('type_bio.code',$retour,"Le champs 'type_bio.code' doit être présent si retour.format=max. ");$this->assertArrayHasKey('type_bio.libelle',$retour,"Le champs 'type_bio.libelle' doit être présent si retour.format=max.");$this->assertArrayHasKey('type_bio.detail',$retour,"Le champs 'type_bio.detail' doit être présent si retour.format=max.");}private function verifierParametresEcologie_max($retour,$type) {$champs = array_keys(config::get('champs_ontologiques'));if ($type == 'baseflor') {foreach ($champs as $chps) {$this->assertArrayHasKey($chps.'.libelle', $retour,"Le champs '{$chps}.libelle' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'.code', $retour,"Le champs '{$chps}.code' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'.href', $retour,"Le champs '{$chps}.href' doit être présent si retour.format=max.");}} elseif ($type == 'rangSup') {foreach ($champs as $chps) {$this->assertArrayHasKey($chps.'_min.libelle', $retour,"Le champs '{$chps}_min.libelle' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'_min.code', $retour,"Le champs '{$chps}_min.code' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'_min.href', $retour,"Le champs '{$chps}_min.href' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'_max.libelle', $retour,"Le champs '{$chps}_max.libelle' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'_max.code', $retour,"Le champs '{$chps}_max.code' doit être présent si retour.format=max.");$this->assertArrayHasKey($chps.'_max.href', $retour,"Le champs '{$chps}_max.href' doit être présent si retour.format=max.");}}}//++ ------------------------------------Test du champs type biologique -----------------------------++//TEST sur différents cas typique de 'type_bio.libelle'public function testJsonTypeBioOntologies() {$ressourcesList = array(array("bdtfx.nn:73256"),array("bdtfx.nn:70441"),array("bdtfx.nn:62911"),array("bdtfx.nn:72496"),array("bdtfx.nn:6446"),array("bdtfx.nn:8373"), array("bdafx.nn:35574"), array("bdtfx.nn:62443"),array("bdtfx.nn:62442"));$parametres = array();$resultats_attendus = array ('Grhi-aqua' => 'Géophytes (>= 1m) à rhizome (plantes aquatiques) ' ,'test-aqua-car' => 'Thérophytes (< 1m) estivaux (plantes aquatiques, carnivores) ','grhi' => 'Géophytes (< 1m) à rhizome ','hsto(test)' => 'Hémicryptophytes (< 1m) stolonifères , Thérophytes (< 1m) estivaux ','Hsto-lia(Grhi-lia)' => 'Hémicryptophytes (>= 1m) stolonifères (lianes) , Géophytes (>= 1m) à rhizome (lianes) ','Cfru(b-cad)' => 'Chaméphytes (>= 1m) frutescents , Nanophanérophytes (2 à 4m) (caducifoliées) ','test-aqua(heri)' => 'Thérophytes (< 1m) estivaux (plantes aquatiques) , Hémicryptophytes (< 1m) érigé ','hbis(hsto,test)-suc' => 'Hémicryptophytes (< 1m) bisannuels (succulentes) , Hémicryptophytes (< 1m) stolonifères, Thérophytes (< 1m) estivaux ','hbis(hsto)-suc' => 'Hémicryptophytes (< 1m) bisannuels (succulentes) , Hémicryptophytes (< 1m) stolonifères ');foreach ($ressourcesList as $ressources) {$retour = $this->consulterJson($ressources, $parametres);$code = $retour['type_bio.code'];$this->assertEquals($resultats_attendus[$code], $retour['type_bio.libelle'],"le traitement de l'ontologie pour les types biologiques est erroné pour $ressources[0] . ");}}}?>