Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 520 | Rev 786 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';

class GraphiquesBaseflorTest extends ServiceEflorePhpUnit {
        
        private $svg;
        
        public function __construct() {
                $this->projet = 'baseflor';
                $this->service = 'graphiques';
        }
        
        //++ ------------------------------------Test des ressources -----------------------------++
        
        public function testRessourceTypeGraphiqueInexistante() {
                $ressources = array('','bdtfx.nn:73256');
                $parametres = array();
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu =  "Erreur dans l'url de votre requête :".
                                "</br> precisez le graphique -> \"sol\" ou \"climat\".";
                $this->assertEquals($messageAttendu, $retour,
                                "Il faut indiquer l'absence de la ressource 'sol' ou 'climat'.");
        }
        
        public function testRessourceReferentielNnInexistante() {
                $ressources = array('sol','');
                $parametres = array();
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = 
                  "Erreur dans l'url de votre requête : précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}.";
                $this->assertEquals($messageAttendu, $retour,
                                        "Il faut indiquer l'absence de la ressource {bdnt}.nn:{nn}.");
        }

        public function testRessourceReferentielTypeGraphiqueErronee() {
                $ressources = array('humdite','bdtfx.nn:73256');
                $parametres = array();
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = "Erreur dans l'url de votre requête :".
                                "</br> precisez le graphique -> \"sol\" ou \"climat\".";
                $this->assertEquals($messageAttendu, $retour,
                                                "Il faut indiquer si la ressource type de graphique  n'est ni sol' ni 'climat'.");
        }
        
        public function testRessourceReferentielNnEronne() {
                $ressources = array('sol','gnnyh');
                $parametres = array();
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu =
                "Erreur dans l'url de votre requête : précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}.";
                $this->assertEquals($messageAttendu, $retour,
                                                "Il faut indiquer si la ressource {bdnt}.nn:{nn} est erronée.");
        }
        
        public function testRessourceReferentielInconnu() {
                $ressources = array('climat','btdjv.nn:73256');
                $parametres = array();
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = "Le référentiel btdjv n'existe pas.";
                $this->assertEquals($messageAttendu, $retour,
                                                        "Il faut indiquer si le référentiel est inconnu.");
        }
        
        public function testRessourceNNInconnu() {
                $ressources = array('sol','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() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('paramatre' => 'image/jpeg');
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = "Erreur : Le paramètre paramatre est inconnu.";
                $this->assertEquals($messageAttendu, $retour,
                                                                                "Il faut indiquer si un paramètre  est inconnu.");
        }
        
        public function testParametreRetourInconnu() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('retour' => 'image/jpeg');
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu =
                        "Erreur : valeur inconnue. Choisissez le format de retour pour le paramètre retour : image/svg%2Bxml ou image/png.";
                $this->assertEquals($messageAttendu, $retour,
                                                                        "Il faut indiquer si la valeur du  paramètre retour est inconnue.");
        }
        
        public function testParametreRetourAbsent() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('retour' => '');
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu =
                        "Erreur : valeur inconnue. Choisissez le format de retour pour le paramètre retour : image/svg%2Bxml ou image/png.";
                $this->assertEquals($messageAttendu, $retour,
                                                                                "Il faut indiquer si la valeur du  paramètre retour est absente.");
        }
        
        public function testParametreRetourFormatAbsent() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('retour.format' => '');
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = "Erreur : valeur inconnue. Entrez la largeur voulue (en pixels) pour le paramètre retour.format.";
                $this->assertEquals($messageAttendu, $retour,
                                                "Il faut indiquer si la valeur du  paramètre retour.format est absente.");
        }
        
        public function testParametreRetourFormatInconnu() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('retour.format' => 'dhgkg22');
                $retour = $this->consulterBrut($ressources, $parametres);
                $messageAttendu = "Erreur : valeur inconnue. Entrez la largeur voulue (en pixels) pour le paramètre retour.format.";
                $this->assertEquals($messageAttendu, $retour,
                                        "Il faut indiquer si la valeur du  paramètre retour.format est inconnue.");
        }
        
        public function testParametreVersionProjetInconnu() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('version.projet' => 'dhgkg22');
                $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.");
        }
        
        public function testParametreVersionProjetAbsent() {
                $ressources = array('sol','bdtfx.nn:73256');
                $parametres = array('version.projet' => '');
                $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 absente.");
        }
        
        //++------------------------------------------test des fichiers -------------------------++
        
        public function testRetourEstUnSVG(){
                $ressourcesListe = array(
                        array('sol','bdtfx.nn:73256'),
                        array('climat','bdtfx.nn:73256'),
                        array('climat','bdtfx.nn:101128'),
                        array('sol','bdtfx.nn:101128')
                        );
                $parametresListe = array(
                        array('retour' => 'image/svg+xml'), 
                        array()
                        );
                foreach ($ressourcesListe as $ressources) {
                        foreach ($parametresListe as $parametres) {
                                $retour = $this->consulterBrut($ressources, $parametres);
                                $this->chargerXml($retour);
                                $this->etreSvg($retour);
                        }
                }
        }
        
        public function testSVGPresenceValeursEcolo_baseflor(){
                $ressourcesListe = array(
                        array('sol','bdtfx.nn:73256'),
                        array('climat','bdtfx.nn:73256'),
                );
                $parametresListe = array();
                foreach ($ressourcesListe as $ressources) {
                                $retour = $this->consulterBrut($ressources, $parametres);
                                $this->chargerXml($retour);
                                $this->etreSvg($retour);
                                $test = false;
                                $curseurs = $this->svg->getElementsByTagName('circle');
                                foreach ($curseurs as $curseur){
                                        $classe = $curseur->getAttribute('class');
                                        if ($classe == 'curseur') {
                                                $test = true;
                                                break;
                                        }
                                }
                }
                $this->assertTrue($test,"Le graphique renvoyé par $retour est vide de données écologiques.");
        }
        
        public function testSVGPresenceValeursEcolo_rangSup(){
                $ressourcesListe = array(
                        array('climat','bdtfx.nn:101128'),
                        array('sol','bdtfx.nn:101128')
                );
                $parametresListe = array();
                foreach ($ressourcesListe as $ressources) {
                        
                                $retour = $this->consulterBrut($ressources, $parametres);
                                $this->chargerXml($retour);
                                $this->etreSvg($retour);
                                $test = false;
                                
                                
                                $cases = $this->svg->getElementsByTagName('rect');
                                // ne fonctionne pas :
                                /*$dompath = new DOMXPath($this->svg);
                                $dompath->registerNamespace("svg", "http://www.w3.org/2000/svg");
                                $cases = $dompath->query('svg:rect[@fill and not(@id="fond" or @id="cache")]');*/
                                
                                foreach ($cases as $case){
                                        $classe = $case->getAttribute('class');
                                        if ($classe != 'fond' and $classe  != 'cache' and $case->getAttribute('fill') != 'none') {
                                                $test = true;
                                                break;
                                        }
                                }
                }
                $this->assertTrue($test,"Le graphique renvoyé par $retour est vide de données écologiques.");
        }
        
        public function testExistenceDesSvgDeBase(){
                        $this->assertFileExists(config::get('chemin')."sol.svg","le svg de base sol.svg n'existe pas.");
                        $this->assertFileExists(config::get('chemin')."climat.svg","le svg de base climat.svg n'existe pas.");
                        $this->assertFileExists(config::get('chemin')."sol_min_max.svg","le svg de base sol_min_max.svg n'existe pas.");
                        $this->assertFileExists(config::get('chemin')."climat_min_max.svg","le svg de base climat_min_max.svg n'existe pas.");

        }
        
        
        
        public function testCreationSvgEtPngDansCache(){
                $convertisseur = config::get('convertisseur');
                if ($convertisseur == 'rsvg') {
                        $ressourcesListe = array(
                        array('sol','bdtfx.nn:73256'),
                        array('climat','bdtfx.nn:73256'),
                        array('climat','bdtfx.nn:101128'),
                        array('sol','bdtfx.nn:101128'));
                        $parametresListe = array('retour' => 'image/png');
                        foreach ($ressourcesListe as $ressources) {
                                $this->consulterBrut($ressources, $parametres);
                                $fichier = config::get('cache.stockageChemin')."".$this->getFichier($ressources);
                                $this->assertFileExists($fichier.".svg"," {$fichier}.svg n'existe pas.");
                                $this->assertFileExists($fichier.".png"," {$fichier}.png n'existe pas.");
                        }
                }
        }
        
        //++------------------------------------------fonctions utiles-------------------------++
        
        private function chargerXml($retour) {
                $this->svg = new DOMDocument();
                $chargement = $this->svg->loadXML($retour);
                
                $this->assertTrue($chargement,"le fichier ne s'est pas chargé.");
        }
        
        
        private function etreSvg($retour) {
                $racineElement = $this->svg->documentElement;
                $this->assertEquals('svg', $racineElement->tagName,"$retour ne renvoie pas un svg." );
        }
        
        private function getFichier($ressources) {
                        $idfichier = str_replace(".","-",$ressources[1]);
                        $idfichier = str_replace(':','-',$idfichier);
                        $idfichier .= "-".$ressources[0];
                        return $idfichier;
        }
}

?>