/trunk/services/tests/ServicesTestsOutils.php |
---|
File deleted |
\ No newline at end of file |
/trunk/services/tests/prepare.php |
---|
File deleted |
\ No newline at end of file |
/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); |
} |
} |
?> |
/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"); |