Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

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

class BdtfxNomsTest extends ServiceEflorePhpUnit {

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

        public function testVersionPrecise() {
                $ressources = array();
                $parametres = array('version.projet' => '1.01');
                $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('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
        }

        public function testNomsIdVersionMultiple() {
                $ressources = array('71711');
                $parametres = array('version.projet' => '*');
                $url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01.\nVoir : $url");
                // $this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02.\nVoir : $url");
                $this->assertArrayHasKey('bdtfx_v2_00', $retour, "Le json ne contient pas d'attribut : bdtfx_v2_00.\nVoir : $url");

                $this->assertEquals('71711', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '71711'");
                // $this->assertEquals('71711', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '71711'");
                $this->assertEquals('71711', $retour['bdtfx_v2_00']['id'], "'bdtfx_v2_00' doit contenir un attribut 'id' avec la valeur '71711'");
        }

        public function testNomsVersionMultiple() {
                $ressources = array();
                $parametres = array('version.projet' => '*');
                $url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);

                $attendu = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id";
                $message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu";
                $this->assertEquals($attendu, $retour, $message);
        }

        public function testVersionInexistante() {
                $ressources = array();
                $parametres = array('version.projet' => '99.00');
                $url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);

                $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);

                $attendu = 'La requête SQL formée comporte une erreur!';
                $message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu";
                $this->assertEquals($attendu, $retour, $message);
        }

        public function testRechercheStricte() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque' => 'Acer');
                $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('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
                $this->assertCount(1, $retour['resultat'], "Le résultat devrait contenir une seule donnée. Voir : $url");
        }

        public function testResultatChamps() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.nn' => '182');
                $url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);

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

                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertCount(1, $retour['resultat'], "Le résultat devrait contenir une seule donnée. Voir : $url");
                $this->assertArrayNotHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 ne doit pas contenir un champ 'id'. Voir : $url");
                $this->assertArrayHasKey('retenu', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url");
                $this->assertEquals('true', $retour['resultat']['182']['retenu'], "Le tableau du résultat 182 doit contenir un champ 'retenu' avec pour valeur 'true'. Voir : $url");
                $this->assertArrayHasKey('nom_sci', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci'. Voir : $url");
                $this->assertEquals('Acer monspessulanum', $retour['resultat']['182']['nom_sci'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url");
        }

        public function testMasqueSg() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.sg' => 'Asteraceae');
                $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->assertEquals('nom_supra_generique=Asteraceae', $retour['entete']['masque'], "L'attribut 'masque' de l'entête devrait valoir 'nom_supra_generique=Asteraceae'. Voir : $url");
                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
                $this->assertCount(1, $retour['resultat'], "Le résultat devrait contenir une seule donnée. Voir : $url");
        }

        public function testMasqueGenSpSspAuAn() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.gen' => 'Allium',
                        'masque.sp' => 'carinatum',
                        'masque.ssp' => 'consimile',
                        'masque.au' => 'Gren.',
                        'masque.an' => '1855');
                $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");

                $masque = 'genre=Allium&epithete_sp=carinatum&epithete_infra_sp=consimile&auteur=Gren.&annee=1855';
                $message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
                $this->assertEquals($masque, $retour['entete']['masque'], $message);

                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
                $this->assertCount(1, $retour['resultat'], "Le résultat devrait contenir une seule donnée. Voir : $url");
        }

        public function testMasqueNn() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.nn' => '182');
                $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");
                $masque = 'num_nom=182';
                $message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
                $this->assertEquals($masque, $retour['entete']['masque'], $message);
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");

                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertCount(1, $retour['resultat'], "Le résultat devrait contenir une seule donnée. Voir : $url");
                $this->assertArrayNotHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url");
        }

        public function testMasqueRg() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.rg' => '180');
                $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");
                $masque = 'rang=180';
                $message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
                $this->assertEquals($masque, $retour['entete']['masque'], $message);
                $this->assertEquals('210', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 210. Voir : $url");
        }

        public function testNsStructureTxt() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.nn' => '182',
                        'ns.format' => 'txt',
                        'ns.structure' => 'au,an,bib,ad');
                $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");
                $masque = 'num_nom=182';
                $message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
                $this->assertEquals($masque, $retour['entete']['masque'], $message);
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");

                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
                $this->assertEquals('Acer monspessulanum L. [1753, Sp. Pl., éd. 1 : 1056]', $retour['resultat']['182']['nom_sci_complet'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url");
        }

        public function testNsStructureHtml() {
                $ressources = array();
                $parametres = array(
                        'version.projet' => '1.01',
                        'recherche' => 'stricte',
                        'masque.nn' => '182',
                        'ns.format' => 'htm',
                        'ns.structure' => 'au,an,bib,ad');
                $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");
                $masque = 'num_nom=182';
                $message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
                $this->assertEquals($masque, $retour['entete']['masque'], $message);
                $this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");

                $this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat.\nVoir : $url");
                $attendu = '<span class="sci"><span class="gen">Acer</span> <span class="sp">monspessulanum</span></span> <span class="auteur">L.</span> [<span class="annee">1753</span>, <span class="biblio">Sp. Pl., éd. 1 : 1056</span>]';
                $message = "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur '$attendu'. Voir : $url";
                $this->assertEquals($attendu, $retour['resultat']['182']['nom_sci_complet'], $message);
        }

        public function testListeNomsAvecParametreRetourChamps() {
                $ressources = array();
                $parametres = array('version.projet' => '1.01',
                        'masque' => 'acer',
                        'retour.champs' => 'auteur,nom_retenu.*');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('auteur', $retour['resultat']['83587']);
                $this->assertArrayHasKey('nom_retenu.id', $retour['resultat']['83587']);
                $this->assertArrayHasKey('nom_retenu.href', $retour['resultat']['83587']);
                $this->assertArrayNotHasKey('nom_retenu', $retour['resultat']['83587']);
        }

        public function testNomsIdAvecParametreRetourChamps() {
                $ressources = array(1);
                $parametres = array('version.projet' => '1.01',
                                'retour.champs' => 'nom_retenu.*');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('nom_retenu.id', $retour);
                $this->assertArrayHasKey('nom_retenu.href', $retour);
                $this->assertArrayNotHasKey('nom_retenu', $retour);
                $this->assertArrayNotHasKey('auteur', $retour);
        }

        public function testListeNomAvecParametreNsStructureAuAnBibAd() {
                $ressources = array();
                $parametres = array('version.projet' => '1.01',
                        'masque.nn' => '39607',
                        'ns.structure' => 'au,an,bib,ad');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('resultat', $retour);
                $this->assertArrayHasKey('39607', $retour['resultat']);
                $this->assertArrayHasKey('nom_sci', $retour['resultat']['39607']);
                $nomSciTxt = 'Lolium annuum Gilib. [1792, Exercit. Phytol., 2 : 520] [nom. invalid.]';
                $this->assertEquals($nomSciTxt, $retour['resultat']['39607']['nom_sci_complet']);
        }

        public function testListeNomAvecParametreNsStructureAuAnBibAdEtNsFormatHtm() {
                $ressources = array();
                $parametres = array('version.projet' => '1.01',
                        'masque.nn' => '39607',
                        'ns.structure' => 'au,an,bib,ad',
                        'ns.format' => 'htm');

                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('entete', $retour);
                $this->assertArrayHasKey('masque', $retour['entete']);
                $this->assertEquals('num_nom=39607', $retour['entete']['masque']);

                $this->assertArrayHasKey('resultat', $retour);
                $this->assertArrayHasKey('39607', $retour['resultat']);
                $this->assertArrayHasKey('nom_sci', $retour['resultat']['39607']);
                $nomSciHtml = "<span class=\"sci\"><span class=\"gen\">Lolium</span> <span class=\"sp\">annuum</span></span> <span class=\"auteur\">Gilib.</span> [<span class=\"annee\">1792</span>, <span class=\"biblio\">Exercit. Phytol., 2 : 520</span>] [<span class=\"adendum\">nom. invalid.</span>]";
                $this->assertEquals($nomSciHtml, $retour['resultat']['39607']['nom_sci_complet']);
        }
        
        public function testListeNomAvecParametreRetourChamps() {
                $ressources = array();
                $parametres = array('version.projet' => '1.01',
                                'masque.nn' => '39607',
                                'retour.champs' => 'rang,auteur');

                $url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres);        
                $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
                $this->assertArrayHasKey('entete', $retour);
                $this->assertArrayHasKey('masque', $retour['entete']);
                $this->assertEquals('num_nom=39607', $retour['entete']['masque']);
        
                $this->assertArrayHasKey('resultat', $retour);
                $this->assertArrayHasKey('39607', $retour['resultat']);
                $this->assertArrayHasKey('rang.libelle', $retour['resultat']['39607']);
                // peut advenir en cas d'échec de la requête (HTTP ou SQL) sur les ontologies
                // vérifier la présence de la table ainsi que la valeur "bdd_table_ontologies" dans "config_bdtfx.ini"
                $this->assertEquals('Espèce', $retour['resultat']['39607']['rang.libelle'], "Erreur champ 'Espèce': Voir $url");
                $this->assertArrayHasKey('auteur', $retour['resultat']['39607']);
                $this->assertEquals('Gilib.', $retour['resultat']['39607']['auteur']);
        }
}
?>