Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 194 → Rev 195

/trunk/services/tests/0.2/ServicePhpUnit.php
New file
0,0 → 1,163
<?php
// declare(encoding='UTF-8');
/**
* Classe contenant des méthodes :
* - d'intialisation des tests,
* - refactorisant le code des tests,
* - facilitant les tests.
*
* @category php 5.3
* @package Tests/Services
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version $Id$
*/
abstract class ServicePhpUnit extends PHPUnit_Framework_TestCase {
 
protected static $projet = '';
protected $service = '';
protected $classeTestee = '';
protected $baseUrl = 'http://localhost/service:eflore:0.1/';
protected $serviceBaseUrl = '';
//+------------------------------------------------------------------------------------------------------+
// Intialisation
 
public static function setUpBeforeClass() {
error_reporting(E_ALL);
 
self::chargerFramework();
 
// Enregistrement en première position des autoload de la méthode gérant les classes des services
spl_autoload_register(array(get_class($this), 'chargerClasseAuto'));
}
 
public static function chargerClasseAuto($classe) {
if (class_exists($classe)) {
return null;
}
$cheminBase = realpath(__DIR__.'/../../modules/0.2').'/';
$cheminProjet = $cheminBase.self::$projet.'/';
$cheminBibliotheque = realpath(__DIR__.'/../../bibliotheque').'/';
$cheminBiblioNom = $cheminBibliotheque.'nom/';
$cheminBiblioNomDeco = $cheminBiblioNom.'decorateurs/';
$cheminsTests = __DIR__.'/';
$chemins = array($cheminBase, $cheminProjet, $cheminBibliotheque, $cheminsTests, $cheminBiblioNom,
$cheminBiblioNomDeco);
foreach ($chemins as $chemin) {
$chemin = $chemin.$classe.'.php';
if (file_exists($chemin)) {
require_once $chemin;
}
}
}
 
private static function chargerFramework() {
$cheminRacine = realpath(dirname(__FILE__).'/../..').'/';
$framework = $cheminRacine.'framework.php';
if (!file_exists($framework)) {
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once $framework;
 
// Ajout d'information concernant cette application
Framework::setCheminAppli($cheminRacine);// Obligatoire
}
}
 
//+------------------------------------------------------------------------------------------------------+
// Refactorisation
protected function consulterJson($ressources, $parametres) {
$retourJson = $this->consulterBrut($ressources, $parametres);
$retour = json_decode($retourJson, true);
$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
return $retour;
}
 
protected function consulterBrut($ressources, $parametres) {
array_unshift($ressources, $this->service);
array_unshift($ressources, self::$projet);
$Bdd = new Bdd();
$Ressources = new Ressources($ressources);
$Parametres = new Parametres($parametres, $Bdd);
$objetService = new $this->classeTestee($Ressources, $Parametres, $Bdd);
$this->initialiserService($objetService);
$retourJson = $objetService->consulter();
return $retourJson;
}
 
protected function creerUrl($ressources, $parametres) {
$version = '';
$ressourcesUrl = array();
foreach ($ressources as $ressource) {
$ressourcesUrl[] = $ressource;
}
$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
 
$parametresUrl = '';
if (count($parametres) > 0) {
foreach ($parametres as $cle => $valeur) {
$parametresUrl[] = $cle.'='.rawurlencode($valeur);
}
$parametresUrl = '?'.implode('&', $parametresUrl);
}
$url = $this->baseUrl.self::$projet.'/'.$version.$this->service.$ressourcesUrl.$parametresUrl;
return $url;
}
 
//+------------------------------------------------------------------------------------------------------+
// Méthodes facilitant les tests
 
/**
* Récupère un bouchon de classe abstraite.
* Comment l'utiliser :
* $classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2'));
* $foo = $classeAstraite->methodeConcretePublique();
*
* @param String $classeNom Le nom de la classe
* @param Array $parametres Les paramètres à passer au constructeur.
* @return Object Le bouchon de la classe abstraite
*/
public function getClasseAbstraite($classeNom, Array $parametres) {
$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres);
return $efloreScript;
}
 
/**
* Récupère une méthode privée d'une classe pour tester/documenter.
* Comment l'utiliser :
* MyClass->foo():
* $cls = new MyClass();
* $foo = self::getPrivateMethode($cls, 'foo');
* $foo->invoke($cls, $...);
*
* @param object $objet Une instance de votre classe
* @param string $methode Le nom de la méthode private
* @return ReflectionMethod La méthode demandée
*/
public static function getMethodePrivee($objet, $nomMethode) {
$classe = new ReflectionClass($objet);
$methode = $classe->getMethod($nomMethode);
$methode->setAccessible(true);
return $methode;
}
 
/**
* Récupère une méthode protégée d'une classe pour tester/documenter.
* Comment l'utiliser :
* MyClass->foo():
* $cls = new MyClass();
* $foo = self::getProtectedMethode($cls, 'foo');
* $foo->invoke($cls, $...);
* @param object $objet Une instance de votre classe
* @param string $methode Le nom de la méthode protected
* @return ReflectionMethod La méthode demandée
*/
public static function getMethodeProtegee($objet, $nomMethode) {
return self::getMethodePrivee($objet, $nomMethode);
}
}
?>
/trunk/services/tests/0.2/fournier/NomDetailsTest.php
New file
0,0 → 1,68
<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
 
class NomDetailsFournierTest extends ServicePhpUnit {
 
private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.1/fournier/noms/%s';
private $ontologieHrefTpl = 'http://localhost/service:eflore:0.1/bdnt/ontologies/rangTaxo:%s';
private $champsProjet = array(
'nom_scientifique' => 'nom_scientifique',
'auteur_origine' => 'auteur_origine',
'nom_vernaculaire' => 'nom_vernaculaire',
'page' => 'page',
'code_taxon' => 'code_taxon',
'milieu' => 'milieu',
'floraison' => 'floraison',
'type' => 'type',
'sol' => 'sol',
'rarete_region_alt' => 'rarete_region_alt',
'region_bota_monde' => 'region_bota_monde',
'etymologie' => 'etymologie',
'taille' => 'taille',
'formule_hybridite' => 'formule_hybridite',
'culture' => 'culture');
 
public function __construct() {
self::$projet = 'fournier';
$this->service = 'noms';
$this->classeTestee = 'NomDetails';
}
 
public function initialiserService(NomsListe $service) {
$service->setDetailsHrefTpl($this->nomDetailSqueletteUrl);
$service->setOntologieHrefTpl($this->ontologieHrefTpl);
$service->setChampsProjets($this->champsProjet);
}
 
public function testSansParametres() {
$ressources = array('85');
$parametres = array();
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertTrue(is_array($retour), 'Retour est un tableau');
$this->assertArrayHasKey('id', $retour, 'Présence champ id');
$this->assertSame(85, $retour['id'], 'Valeur champ id = 85');
$this->assertArrayHasKey('nom_sci', $retour, 'Présence champ nom_sci');
$this->assertSame('Hymenophyllum peltatum', $retour['nom_sci'], 'Valeur champ nom_sci = Hymenophyllum peltatum');
$this->assertArrayHasKey('nom_retenu.id', $retour, 'Présence champ nom_retenu.id');
$this->assertSame(84, $retour['nom_retenu.id'], 'Valeur champ nom_sci = 84');
$this->assertArrayHasKey('nom_retenu', $retour, 'Présence champ nom_retenu');
$this->assertSame('Hymenophyllum unilaterale', $retour['nom_retenu'], 'Valeur champ nom_sci = 84');
$this->assertArrayHasKey('nom_retenu.href', $retour, 'Présence champ nom_retenu.href');
$urlNomRetenuHrefAttendue = sprintf($this->nomDetailSqueletteUrl, 84);
$this->assertSame($urlNomRetenuHrefAttendue, $retour['nom_retenu.href'], "Valeur champ nom_retenu.href = $urlNomRetenuHrefAttendue");
 
$this->assertArrayHasKey('rang.code', $retour, 'Présence champ rang.code');
$this->assertSame('bdnt.rangTaxo:290', $retour['rang.code'], 'Valeur champ rang.code = bdnt.rangTaxo:290');
$this->assertArrayHasKey('rang', $retour, 'Présence champ rang');
$this->assertSame('Espèce', $retour['rang'], 'Valeur champ rang = Espèce');
 
$this->assertArrayHasKey('rang.href', $retour, 'Présence champ rang.href');
$hrefAttendue =sprintf($this->ontologieHrefTpl, 290);
$this->assertSame($hrefAttendue, $retour['rang.href'], "Valeur champ rang.href = $hrefAttendue");
 
}
 
}
?>
/trunk/services/tests/0.2/fournier/NomsListeFournierTest.php
New file
0,0 → 1,202
<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
 
class NomsListeFournierTest extends ServicePhpUnit {
 
private $listeUrl = 'http://localhost/service:eflore:0.1/fournier/noms';
private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.1/fournier/noms/%s';
private $nbreNom = 168;
 
public function __construct() {
self::$projet = 'fournier';
$this->service = 'noms';
$this->classeTestee = 'NomsListe';
}
public function initialiserService(NomsListe $service) {
$service->setDetailsHrefTpl($this->nomDetailSqueletteUrl);
$service->setListeUrl($this->listeUrl);
}
 
public function testSansParametres() {
$ressources = array();
$parametres = array();
 
$retour = $this->consulterBrut($ressources, $parametres);
$this->assertArrayHasKey('entete', $retour, 'Présence champ entete');
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEmpty($retour['entete']['masque'], 'Valeur champ entete>masque = vide');
$this->assertArrayHasKey('depart', $retour['entete'], 'Présence champ entete>depart');
$this->assertSame(0, $retour['entete']['depart'], 'Valeur champ entete>depart = 0');
$this->assertArrayHasKey('limite', $retour['entete'], 'Présence champ entete>limite');
$this->assertSame(100, $retour['entete']['limite'], 'Valeur champ entete>limite = 100');
$this->assertArrayHasKey('total', $retour['entete'], 'Présence champ entete>total');
$this->assertNotEquals(0, $retour['entete']['total'], 'Valeur champ entete>total != 0');
$this->assertSame($this->nbreNom, $retour['entete']['total'], 'Valeur champ entete>total = 168');
$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ entete>href.precedent");
$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ entete>href.suivant");
$url = $this->listeUrl.'?navigation.depart=100&navigation.limite=100';
$this->assertEquals($url, $retour['entete']['href.suivant'], "Valeur champ entete>href.suivant = $url");
 
$this->assertArrayHasKey('resultats', $retour, 'Valeur champ resultats');
$this->assertCount(100, $retour['resultats'], 'Nombre de valeurs dans resultats = 100');
$this->assertArrayNotHasKey('1', $retour['resultats'], 'Abscence champ resultats>1 car trie sur nom_sci ASC');
$this->assertArrayHasKey('2', $retour['resultats'], 'Présence champ resultats>2');
$this->assertArrayHasKey('nom_sci', $retour['resultats']['2'], 'Présence champ resultats>2>nom_sci');
$this->assertCount(3, $retour['resultats']['2'], 'Nombre de valeurs dans resultats>2 = 3');
$this->assertEquals('Cryptogames', $retour['resultats']['2']['nom_sci'], 'Test valeur champ resultats>2>nom_sci = Plantae');
$this->assertArrayHasKey('retenu', $retour['resultats']['2'], 'Présence champ resultats>2>retenu');
$this->assertTrue($retour['resultats']['2']['retenu'], 'Valeur champ resultats>2>retenu = true');
$this->assertArrayHasKey('href', $retour['resultats']['2'], 'Présence champ resultats>2>href');
$url = sprintf($this->nomDetailSqueletteUrl, '2');
$this->assertEquals($url, $retour['resultats']['2']['href'], "Valeur champ resultats>2>nom_sci = $url");
}
 
public function testParametreNavigationDepart100() {
$ressources = array();
$parametres = array('navigation.depart' => 100);
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('depart', $retour['entete'], 'Présence champ entete>depart');
$this->assertSame(100, $retour['entete']['depart'], 'Valeur champ entete>depart = 100');
$this->assertArrayHasKey('limite', $retour['entete'], 'Présence champ entete>limite');
$this->assertSame(100, $retour['entete']['limite'], 'Valeur champ entete>limite = 100');
$this->assertSame($this->nbreNom, $retour['entete']['total'], 'Valeur champ entete>total = 168');
$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ entete>href.suivant");
$this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ entete>href.precedent");
$url = $this->listeUrl.'?navigation.depart=0&navigation.limite=100';
$this->assertEquals($url, $retour['entete']['href.precedent'], "Valeur champ entete>href.precedent = $url");
}
 
public function testRechercheDefautMasque() {
$ressources = array();
$parametres = array('masque' => 'Lycopodium');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_sci=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium"');
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1');
$this->assertEquals('Lycopodium', $retour['resultats']['5']['nom_sci'], 'Test valeur champ resultats>5>nom_sci = Lycopodium');
}
 
public function testRechercheStricteMasque() {
$ressources = array();
$parametres = array('masque' => 'Lycopodium', 'recherche' => 'stricte');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_sci=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium"');
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1');
$this->assertEquals('Lycopodium', $retour['resultats']['5']['nom_sci'], 'Test valeur champ resultats>5>nom_sci = Lycopodium');
}
 
public function testerRechercheEtendueMasque() {
$ressources = array();
$parametres = array('masque' => 'Lycopodium', 'recherche' => 'etendue');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_sci=Lycopodium%', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium%"');
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 10');
foreach ($retour['resultats'] as $nom) {
$this->assertContains('Lycopodium', $nom['nom_sci'], 'Test valeur champ resultats>...>nom_sci contient Lycopodium');
}
}
 
public function testerRechercheFloueMasque() {
$ressources = array();
$parametres = array('masque' => 'Licopodium', 'recherche' => 'floue');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_sci=Licopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Licopodium"');
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1');
$this->assertContains('Lycopodium', $retour['resultats'][5]['nom_sci'], 'Test valeur champ resultats>5>nom_sci contient Lycopodium');
}
 
public function testRechercheDefautMasqueSg() {
$ressources = array();
$parametres = array('masque.sg' => 'Lycopodiaceae');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_supra_generique=Lycopodiaceae', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodiaceae"');
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1');
$this->assertEquals('Lycopodiaceae', $retour['resultats']['4']['nom_sci'], 'Test valeur champ resultats>4>nom_sci = Lycopodiaceae');
}
 
public function testRechercheDefautMasqueGen() {
$ressources = array();
$parametres = array('masque.gen' => 'Lycopodium');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('genre=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "genre=Lycopodium"');
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 11');
foreach ($retour['resultats'] as $id => $info) {
$this->assertContains('Lycopodium', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient Lycopodium");
}
}
 
public function testRechercheDefautMasqueSp() {
$ressources = array();
$parametres = array('masque.sp' => 'alpinum');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('epithete_sp=alpinum', $retour['entete']['masque'], 'Valeur champ entete>masque = "epithete_sp=alpinum"');
$this->assertCount(2, $retour['resultats'], 'Nombre de valeurs dans resultats = 2');
foreach ($retour['resultats'] as $id => $info) {
$this->assertContains('alpinum', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient alpinum");
}
}
 
public function testRechercheEtendueMasqueSg() {
$ressources = array();
$parametres = array('masque.sg' => 'Lycopodiaceae', 'recherche' => 'etendue');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('nom_supra_generique=Lycopodiaceae%', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodiaceae"');
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1');
$this->assertEquals('Lycopodiaceae', $retour['resultats']['4']['nom_sci'], 'Test valeur champ resultats>4>nom_sci = Lycopodiaceae');
}
 
public function testRechercheEtendueMasqueGen() {
$ressources = array();
$parametres = array('masque.gen' => 'Lycopodium', 'recherche' => 'etendue');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('genre=Lycopodium%', $retour['entete']['masque'], 'Valeur champ entete>masque = "genre=Lycopodium"');
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 11');
foreach ($retour['resultats'] as $id => $info) {
$this->assertContains('Lycopodium', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient Lycopodium");
}
}
 
public function testRechercheEtendueMasqueSp() {
$ressources = array();
$parametres = array('masque.sp' => 'alpinum', 'recherche' => 'etendue');
 
$retour = $this->consulterBrut($ressources, $parametres);
 
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque');
$this->assertEquals('epithete_sp=alpinum%', $retour['entete']['masque'], 'Valeur champ entete>masque = "epithete_sp=alpinum"');
$this->assertCount(2, $retour['resultats'], 'Nombre de valeurs dans resultats = 2');
foreach ($retour['resultats'] as $id => $info) {
$this->assertContains('alpinum', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient alpinum");
}
}
 
}
?>