Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 93 → Rev 96

/trunk/services/tests/prepare.php
File deleted
\ No newline at end of file
/trunk/services/tests/ServicesTestsOutils.php
File deleted
\ No newline at end of file
/trunk/services/tests/bdtfx/BdtfxNomsTest.php
1,6 → 1,8
<?php
class BdtfxNomsTest extends ServicesTestsOutils {
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';
 
class BdtfxNomsTest extends ServiceEflorePhpUnit {
 
public function __construct() {
$this->projet = 'bdtfx';
$this->service = 'noms';
7,8 → 9,8
}
 
public function testVersionPrecise() {
$ressources = array('v1.01');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '1.01');
$url = $this->creerUrl($ressources, $parametres);
$retour = $this->consulterJson($ressources, $parametres);
 
17,20 → 19,20
}
 
public function testNomsIdVersionMultiple() {
$ressources = array('*', '182');
$parametres = array();
$ressources = array('71711');
$parametres = array('version.projet' => '*');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($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->assertEquals('182', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '182'");
$this->assertEquals('182', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '182'");
$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'");
}
 
public function testNomsVersionMultiple() {
$ressources = array('*');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '*');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterBrut($ressources, $parametres);
41,8 → 43,8
}
 
public function testVersionInexistante() {
$ressources = array('v99.00');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '99.00');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterBrut($ressources, $parametres);
53,10 → 55,11
}
 
public function testRechercheStricte() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque' => 'Acer');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque' => 'Acer');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
67,10 → 70,11
}
 
public function testResultatChamps() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.nn' => '182');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.nn' => '182');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
86,10 → 90,11
}
 
public function testMasqueSg() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.sg' => 'Asteraceae');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.sg' => 'Asteraceae');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
101,14 → 106,15
}
 
public function testMasqueGenSpSspAuAn() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.gen' => 'Allium',
'masque.sp' => 'carinatum',
'masque.ssp' => 'consimile',
'masque.au' => 'Gren.',
'masque.an' => '1855');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.gen' => 'Allium',
'masque.sp' => 'carinatum',
'masque.ssp' => 'consimile',
'masque.au' => 'Gren.',
'masque.an' => '1855');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
125,10 → 131,11
}
 
public function testMasqueNn() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.nn' => '182');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.nn' => '182');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
145,10 → 152,11
}
 
public function testMasqueRg() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.rg' => '180');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.rg' => '180');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
160,8 → 168,9
}
 
public function testNsStructureTxt() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.nn' => '182',
'ns.format' => 'txt',
180,12 → 189,13
}
 
public function testNsStructureHtml() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque.nn' => '182',
'ns.format' => 'htm',
'ns.structure' => 'au,an,bib,ad');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque.nn' => '182',
'ns.format' => 'htm',
'ns.structure' => 'au,an,bib,ad');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
/trunk/services/tests/bdtfx/BdtfxTaxonsTest.php
1,6 → 1,8
<?php
class BdtfxTaxonsTest extends ServicesTestsOutils {
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';
 
class BdtfxTaxonsTest extends ServiceEflorePhpUnit {
 
public function __construct() {
$this->projet = 'bdtfx';
$this->service = 'taxons';
7,8 → 9,8
}
 
public function testVersionPrecise() {
$ressources = array('v1.01');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '1.01');
$url = $this->creerUrl($ressources, $parametres);
$retour = $this->consulterJson($ressources, $parametres);
 
17,8 → 19,8
}
 
public function testNomsIdVersionMultiple() {
$ressources = array('*', '182');
$parametres = array();
$ressources = array('182');
$parametres = array('version.projet' => '*');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
29,8 → 31,8
}
 
public function testNomsVersionMultiple() {
$ressources = array('*');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '*');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterBrut($ressources, $parametres);
41,8 → 43,8
}
 
public function testVersionInexistante() {
$ressources = array('v99.00');
$parametres = array();
$ressources = array();
$parametres = array('version.projet' => '99.00');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterBrut($ressources, $parametres);
53,10 → 55,11
}
 
public function testRechercheStricte() {
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'stricte',
'masque' => 'Acer');
'version.projet' => '1.01',
'recherche' => 'stricte',
'masque' => 'Acer');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
67,12 → 70,12
}
 
public function testRechercheEtendue() {
$url = Config::get('url_service').'/v1.01/taxons?recherche=etendue&masque=Acer';
 
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'etendue',
'masque' => 'Acer');
'version.projet' => '1.01',
'recherche' => 'etendue',
'masque' => 'Acer');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
82,12 → 85,12
}
 
public function testRechercheFloue() {
$url = Config::get('url_service').'/v1.01/taxons?recherche=floue&masque=Acer';
 
$ressources = array('v1.01');
$ressources = array();
$parametres = array(
'recherche' => 'floue',
'masque' => 'Acer');
'version.projet' => '1.01',
'recherche' => 'floue',
'masque' => 'Acer');
$url = $this->creerUrl($ressources, $parametres);
 
$retour = $this->consulterJson($ressources, $parametres);
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
/trunk/services/tests/iso-639-1/Iso6391LanguesTest.php
1,6 → 1,8
<?php
class Iso6391LanguesTest extends ServicesTestsOutils {
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';
 
class Iso6391LanguesTest extends ServiceEflorePhpUnit {
 
public function __construct() {
$this->projet = 'iso-639-1';
$this->service = 'langues';
11,7 → 13,7
$parametres = array();
$url = $this->creerUrl($ressources, $parametres);
$retour = $this->consulterJson($ressources, $parametres);
 
echo print_r($retour, true).'ici';
$this->assertArrayHasKey('id', $retour, "Le json ne contient pas d'attribut : id. Voir : $url");
$this->assertEquals('fr', $retour['id'], "L'attribut 'id' devrait avoir la valeur 'fr'. Voir : $url");
$this->assertArrayHasKey('nom.fr', $retour, "Le json ne contient pas d'attribut : nom.fr. Voir : $url");
/trunk/services/tests/ServiceEflorePhpUnit.php
New file
0,0 → 1,155
<?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 ServiceEflorePhpUnit extends PHPUnit_Framework_TestCase {
 
/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
protected $projet = '';
/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
protected $service = '';
 
//+------------------------------------------------------------------------------------------------------+
// 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(), 'chargerClasseAuto'));
}
 
public static function chargerClasseAuto($classe) {
if (class_exists($classe)) {
return null;
}
$cheminBase = realpath(__DIR__.'/../modules/0.1').'/';
$cheminsTests = __DIR__.'/';
$chemins = array($cheminBase, $cheminsTests);
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, $this->projet);
$projets = new Projets();
$retourJson = $projets->consulter($ressources, $parametres);
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);
}
echo Config::get('url_service');
$url = Config::get('url_service').'/'.$version.'noms'.$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);
}
}
?>