Rev 958 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phprequire_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);$this->assertEquals("Données introuvables dans la base", $retour, "Il faut renvoyer \"données introuvables\" en cas de référentiel inconnu.");}public function testRessourceInconnue() {$ressources = array('inconnue');$parametres = array();$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);$this->assertEquals("Données introuvables dans la base", $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);$retour = $this->consulterJson($this->service, $this->projet, $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, $ressources, $parametres);}private function verifierJsonEnteteBienFormeInformations($retour, $ressources, $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 = ServiceEflorePhpUnit::creerUrl($this->service, $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 = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);$retour = $this->consulterJson($this->service, $this->projet, $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();$parametres = array();$parametresList = array('navigation.depart' => 10, 'navigation.limite' => 15 );$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);$retour = $this->consulterJson($this->service, $this->projet, $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($this->service, $this->projet, $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(Outils::recupererTableauConfig('Paramètres.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() {$retour = $this->consulterJson($this->service, $this->projet, ['bdtfx.nn:73256'], ['retour.format' => 'max', 'categorie' => 'description']);$this->verifierParametresDescription_max($retour);$retour = $this->consulterJson($this->service, $this->projet, ['bdtfx.nn:73256'], ['retour.format' => 'max', 'categorie' => 'ecologie']);$this->verifierParametresEcologie_max($retour, 'baseflor');}public function testJsonInformationsNNRangSup_max() {$ressources = array('bdtfx.nn:101128');$parametres = array('retour.format' => 'max' , 'categorie' => 'ecologie');$retour = $this->consulterJson($this->service, $this->projet, $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(Outils::recupererTableauConfig('Paramètres.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($this->service, $this->projet, $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] . ");}}public function testRelationsCatminat() {$ressources = array('bdtfx.nn:5641', 'relations', 'catminat');$parametres = array();$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);// valeurs standards$this->assertArrayHasKey('cle',$retour, "Le champ 'cle' doit être présent.");$this->assertEquals('1693',$retour['cle'], "Le champ 'cle' est erroné.");$this->assertArrayHasKey('num_nomen',$retour, "Le champ 'num_nomen' doit être présent.");$this->assertEquals('5641',$retour['num_nomen'], "Le champ 'num_nomen' est erroné.");$this->assertArrayHasKey('bdnt',$retour, "Le champ 'bdnt' doit être présent.");$this->assertEquals('bdtfx',$retour['bdnt'], "Le champ 'bdnt' est erroné.");// valeurs écologiques, test libelle$this->assertArrayHasKey('ve_texture_sol_min.libelle',$retour, "Le champ 've_texture_sol_min.libelle' doit être présent.");$this->assertEquals('intermédiaire',$retour['ve_texture_sol_min.libelle'], "Le champ 've_texture_sol_min.libelle' est erroné.");$this->assertArrayHasKey('ve_humidite_atmos_min.code',$retour, "Le champ 've_humidite_atmos_min.code' doit être présent.");$this->assertEquals('8',$retour['ve_humidite_atmos_min.code'], "Le champ 've_texture_sol_min.libelle' est erroné.");// climat$this->assertArrayHasKey('graphique_climat',$retour, "Le champ 'graphique_climat' doit être présent.");$this->assertArrayHasKey('libelle',$retour['graphique_climat'], "Le champ 'graphique_climat > libelle' doit être présent.");$this->assertArrayHasKey('href',$retour['graphique_climat'], "Le champ 'graphique_climat > href' doit être présent.");$this->assertEquals('climat',$retour['graphique_climat']['libelle'], "Le champ 'graphique_climat > href' doit être présent.");}// TODO = ajouter un test pour Informations/id/Relations/catminat?navigation.limite=500&navigation.depart=0}?>