Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

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

class CelImagesTest extends ServiceEflorePhpUnit {

        public function __construct() {
                $this->projet = 'cel';
                $this->service = 'images';
        }

        public function testParametreMasqueNnInexistant() {
                $ressources = array();
                $parametres = array('retour'=>'image/jpeg', 'retour.format'=>'M');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $messageAttendu = "Le paramètre masque.nn est obligatoire.";
                $this->assertEquals($messageAttendu, $retour,
                        "Le service doit renvoyer un message pour un masque non renseigné");
        }

        public function testParametreMasqueNnMultiple() {
                $ressources = array();
                $parametres = array('masque.nn' => 'bdftf:6218,182','retour'=>'image/jpeg');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $messageAttendu = "Le paramètre masque.nn peut contenir une seule valeur numérique pour l'instant pour le format de retour image/jpeg.";
                $this->assertEquals($messageAttendu, $retour,
                        "Le service doit renvoyer un message car le paramètre masque.nn n'est pas complétement implémenté.");
        }

        public function testParametreRetourFormatInexistant() {
                $ressources = array();
                $parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $image = imagecreatefromstring($retour);
                $largeur = imagesx($image);
                $hauteur = imagesy($image);
                $this->assertLessThanOrEqual(450, $largeur,
                        "Le service doit renvoyer une image de taille M (largeur < 450px) par défaut (h:$hauteur x l:$largeur)");
                $this->assertLessThanOrEqual(450, $hauteur,
                        "Le service doit renvoyer une image de taille M (hauteur < 600px) par défaut (h:$hauteur x  l:$largeur)");
                if ($hauteur != 450) {
                        $this->assertSame(450, $largeur,
                                "Le service doit renvoyer une image de taille M : largeur == 450px pour une hauteur infèrieure à 600px (h:$hauteur x l:$largeur)");
                }
                if ($largeur != 450) {
                        $this->assertSame(450, $hauteur,
                                "Le service doit renvoyer une image de taille M : hauteur == 600px pour une largeur infèrieure à 450px (h:$hauteur x l:$largeur)");
                }
        }

        public function testValeurParametreRetourFormatInexistante() {
                $ressources = array();
                $parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg', 'retour.format'=>'X53L');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $messageAttendu = "Le type de format 'X53L' n'est pas supporté";
                $this->assertEquals($messageAttendu, $retour,
                        "Le service doit renvoyer un message pour un format de retour inexistant");
        }

        public function testValeurParametreRetourInexistante() {
                $ressources = array();
                $parametres = array('masque.nn' => '6218','retour'=>'image/jpog');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $messageAttendu = "Le type de retour 'image/jpog' n'est pas supporté";
                $this->assertEquals($messageAttendu, $retour,
                        "Le service doit renvoyer un message d'erreur 400 sur une type de retour incorrect");
        }

        public function testTaxonSansImage() {
                $ressources = array();
                $parametres = array('masque.nn' => '6218','retour' => 'image/jpeg');

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
                $messageAttendu = "Aucune image ne correspond au numéro numenclatural bdtfx:'6218'";
                $this->assertEquals($messageAttendu, $retour,
                        "Le service doit renvoyer un message pour un taxon ne possédant pas d'images");
        }

        public function testListeImagesJsonMasqueNnSimple() {
                $ressources = array();
                $parametres = array('masque.nn' => '182','retour' => 'application/json', 'retour.format' => 'CRX2S');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);

                $this->verifierEnteteChampsObligatoires($retour);
                $this->assertEquals('nn=182', $retour['entete']['masque'], 'Valeur entete > masque = "nn=182"');
                $this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
                $this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
                $this->assertSame(62, $retour['entete']['total'], 'Valeur entete > total = 62');
                $this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Absence champ : entete > href.suivant");
                $this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Absence champ : entete > href.precedent");

                $this->verifierResultatsChampsObligatoires($retour);
                $this->verifierResultatsValeursGenerique($retour);
                $this->assertCount(62, $retour['resultats'], 'Nbre resultats = 62');
                foreach ($retour['resultats'] as $id => $resultat) {
                        $this->assertRegExp("/CRX2S/", $resultat['binaire.href']);
                }
        }

        public function testListeImagesJsonMasqueNnMultiple() {
                $ressources = array();
                $parametres = array('masque.nn' => '62018,182,141','retour' => 'application/json');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);

                $this->verifierEnteteChampsObligatoires($retour);
                $this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
                $this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
                $this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
                $this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');
                $this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ : entete > href.suivant");
                $urlHrefSuivantAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=100&navigation.limite=100&masque.nn=62018,182,141';
                $this->assertEquals($urlHrefSuivantAttendue, $retour['entete']['href.suivant'], "Valeur entete > href.suivant = '$urlHrefSuivantAttendue'");
                $this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ : entete > href.precedent");

                $this->verifierResultatsChampsObligatoires($retour);
                $this->verifierResultatsValeursGenerique($retour);
                $this->assertCount(100, $retour['resultats'], 'Nbre resultats = 134');
                $this->assertArrayHasKey('6114', $retour['resultats'], "Présence champ : resultats > 6114");
        }

        public function testListeImagesJsonNavigation() {
                $ressources = array();
                $parametres = array('masque.nn' => '62018,182,141', 'retour' => 'application/json',
                        'navigation.depart' => 100, 'navigation.limite' => 100);

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);

                $this->verifierEnteteChampsObligatoires($retour);
                $this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
                $this->assertSame((int)$parametres['navigation.depart'], $retour['entete']['depart'], "Valeur entete > depart = {$parametres['navigation.depart']}");
                $this->assertSame((int)$parametres['navigation.limite'], $retour['entete']['limite'], "Valeur entete > limite = {$parametres['navigation.limite']}");
                $this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');

                $this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ : entete > href.precedent");
                $urlHrefPrecedentAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=0&navigation.limite=100&masque.nn=62018,182,141';
                $this->assertEquals($urlHrefPrecedentAttendue, $retour['entete']['href.precedent'], "Valeur entete > href.precedent = '$urlHrefPrecedentAttendue'");
                $this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ : entete > href.suivant");

                $this->verifierResultatsChampsObligatoires($retour);
                $this->verifierResultatsValeursGenerique($retour);
        }

        private function verifierEnteteChampsObligatoires($retour) {
                $this->assertArrayHasKey('entete', $retour, "Présence champ : entete");
                $this->assertArrayHasKey('masque', $retour['entete'], "Présence champ : entete > masque");
                $this->assertArrayHasKey('depart', $retour['entete'], "Présence champ : entete > depart");
                $this->assertArrayHasKey('limite', $retour['entete'], "Présence champ : entete > limite");
                $this->assertArrayHasKey('total', $retour['entete'], "Présence champ : entete > total");
        }

        private function verifierResultatsChampsObligatoires($retour) {
                $this->assertArrayHasKey('resultats', $retour, "Présence champ : resultats");
                foreach ($retour['resultats'] as $id => $resultat) {
                        $this->assertTrue(is_int($id), "id = nbre entier : $id");
                        $this->assertArrayHasKey('date', $resultat, "Présence champ : resultats > $id > date");
                        $this->assertArrayHasKey('mime', $resultat, "Présence champ : resultats > $id > mime");
                        $this->assertArrayHasKey('binaire.href', $resultat, "Présence champ : resultats > $id > binaire.href");
                        $this->assertArrayHasKey('determination', $resultat, "Présence champ : resultats > $id > determination");
                        $this->assertArrayHasKey('determination.nom_sci', $resultat, "Présence champ : resultats > $id > determination.nom_sci");
                        $this->assertArrayHasKey('determination.nom_sci.code', $resultat, "Présence champ : resultats > $id > determination.nom_sci.code");
                        $this->assertArrayHasKey('station', $resultat, "Présence champ : resultats > $id > station");
                        $this->assertArrayHasKey('auteur', $resultat, "Présence champ : resultats > $id > auteur");
                }
        }

        private function verifierResultatsValeursGenerique($retour) {
                foreach ($retour['resultats'] as $id => $resultat) {
                        $this->assertRegExp("/$id/", $resultat['binaire.href']);
                }
        }
}
?>