| 96 | jpm | 1 | <?php
 | 
        
           |  |  | 2 | // declare(encoding='UTF-8');
 | 
        
           |  |  | 3 | /**
 | 
        
           |  |  | 4 |  * Classe contenant des méthodes :
 | 
        
           |  |  | 5 |  *  - d'intialisation des tests,
 | 
        
           |  |  | 6 |  *  - refactorisant le code des tests,
 | 
        
           |  |  | 7 |  *  - facilitant les tests.
 | 
        
           |  |  | 8 |  *
 | 
        
           |  |  | 9 |  * @category	php 5.3
 | 
        
           |  |  | 10 |  * @package		Tests/Services
 | 
        
           |  |  | 11 |  * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 12 |  * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
 | 
        
           |  |  | 13 |  * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 | 
        
           |  |  | 14 |  * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 | 
        
           |  |  | 15 |  * @version		$Id$
 | 
        
           |  |  | 16 |  */
 | 
        
           |  |  | 17 | abstract class ServiceEflorePhpUnit extends PHPUnit_Framework_TestCase {
 | 
        
           |  |  | 18 |   | 
        
           |  |  | 19 | 	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
 | 
        
           |  |  | 20 | 	protected $projet = '';
 | 
        
           |  |  | 21 | 	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
 | 
        
           |  |  | 22 | 	protected $service = '';
 | 
        
           |  |  | 23 |   | 
        
           |  |  | 24 | 	//+------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 25 | 	// Intialisation
 | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 | 	public static function setUpBeforeClass() {
 | 
        
           |  |  | 28 | 		error_reporting(E_ALL);
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 | 		self::chargerFramework();
 | 
        
           |  |  | 31 |   | 
        
           |  |  | 32 | 		// Enregistrement en première position des autoload de la méthode gérant les classes des services
 | 
        
           |  |  | 33 | 		spl_autoload_register(array(get_class(), 'chargerClasseAuto'));
 | 
        
           |  |  | 34 | 	}
 | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 | 	public static function chargerClasseAuto($classe) {
 | 
        
           |  |  | 37 | 		if (class_exists($classe)) {
 | 
        
           |  |  | 38 | 			return null;
 | 
        
           |  |  | 39 | 		}
 | 
        
           | 195 | jpm | 40 | 		$cheminBase = realpath(__DIR__.'/../../modules/0.1').'/';
 | 
        
           | 96 | jpm | 41 | 		$cheminsTests = __DIR__.'/';
 | 
        
           |  |  | 42 | 		$chemins = array($cheminBase, $cheminsTests);
 | 
        
           |  |  | 43 | 		foreach ($chemins as $chemin) {
 | 
        
           |  |  | 44 | 			$chemin = $chemin.$classe.'.php';
 | 
        
           |  |  | 45 | 			if (file_exists($chemin)) {
 | 
        
           |  |  | 46 | 				require_once $chemin;
 | 
        
           |  |  | 47 | 			}
 | 
        
           |  |  | 48 | 		}
 | 
        
           |  |  | 49 | 	}
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 | 	private static function chargerFramework() {
 | 
        
           | 195 | jpm | 52 | 		$cheminRacine = realpath(dirname(__FILE__).'/../..').'/';
 | 
        
           | 96 | jpm | 53 | 		$framework =  $cheminRacine.'framework.php';
 | 
        
           |  |  | 54 | 		if (!file_exists($framework)) {
 | 
        
           |  |  | 55 | 			$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
 | 
        
           |  |  | 56 | 			trigger_error($e, E_USER_ERROR);
 | 
        
           |  |  | 57 | 		} else {
 | 
        
           |  |  | 58 | 			// Inclusion du Framework
 | 
        
           |  |  | 59 | 			require_once $framework;
 | 
        
           |  |  | 60 |   | 
        
           |  |  | 61 | 			// Ajout d'information concernant cette application
 | 
        
           |  |  | 62 | 			Framework::setCheminAppli($cheminRacine);// Obligatoire
 | 
        
           |  |  | 63 | 		}
 | 
        
           |  |  | 64 | 	}
 | 
        
           |  |  | 65 |   | 
        
           |  |  | 66 | 	//+------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 67 | 	// Refactorisation
 | 
        
           |  |  | 68 | 	protected function consulterJson($ressources, $parametres) {
 | 
        
           |  |  | 69 | 		$retourJson = $this->consulterBrut($ressources, $parametres);
 | 
        
           |  |  | 70 | 		$retour = json_decode($retourJson, true);
 | 
        
           | 137 | jpm | 71 | 		$url = $this->creerUrl($ressources, $parametres);
 | 
        
           |  |  | 72 | 		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url\n".print_r($retourJson, true));
 | 
        
           | 96 | jpm | 73 | 		return $retour;
 | 
        
           |  |  | 74 | 	}
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 | 	protected function consulterBrut($ressources, $parametres) {
 | 
        
           |  |  | 77 | 		array_unshift($ressources, $this->service);
 | 
        
           |  |  | 78 | 		array_unshift($ressources, $this->projet);
 | 
        
           |  |  | 79 | 		$projets = new Projets();
 | 
        
           |  |  | 80 | 		$retourJson = $projets->consulter($ressources, $parametres);
 | 
        
           |  |  | 81 | 		return $retourJson;
 | 
        
           |  |  | 82 | 	}
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 | 	protected function creerUrl($ressources, $parametres) {
 | 
        
           |  |  | 85 | 		$version = '';
 | 
        
           |  |  | 86 | 		$ressourcesUrl = array();
 | 
        
           |  |  | 87 | 		foreach ($ressources as $ressource) {
 | 
        
           |  |  | 88 | 			$ressourcesUrl[] = $ressource;
 | 
        
           |  |  | 89 | 		}
 | 
        
           |  |  | 90 | 		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
 | 
        
           |  |  | 91 |   | 
        
           |  |  | 92 | 		$parametresUrl = '';
 | 
        
           |  |  | 93 | 		if (count($parametres) > 0) {
 | 
        
           |  |  | 94 | 			foreach ($parametres as $cle => $valeur) {
 | 
        
           |  |  | 95 | 				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
 | 
        
           |  |  | 96 | 			}
 | 
        
           |  |  | 97 | 			$parametresUrl = '?'.implode('&', $parametresUrl);
 | 
        
           |  |  | 98 | 		}
 | 
        
           | 97 | jpm | 99 |   | 
        
           | 153 | delphine | 100 | 		$url = Config::get('url_service').'/'.$version.$this->service.$ressourcesUrl.$parametresUrl;
 | 
        
           | 96 | jpm | 101 | 		return $url;
 | 
        
           |  |  | 102 | 	}
 | 
        
           |  |  | 103 |   | 
        
           |  |  | 104 | 	//+------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 105 | 	// Méthodes facilitant les tests
 | 
        
           |  |  | 106 |   | 
        
           |  |  | 107 | 	/**
 | 
        
           |  |  | 108 | 	* Récupère un bouchon de classe abstraite.
 | 
        
           |  |  | 109 | 	* Comment l'utiliser :
 | 
        
           |  |  | 110 | 	* 	$classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2'));
 | 
        
           |  |  | 111 | 	*   $foo = $classeAstraite->methodeConcretePublique();
 | 
        
           |  |  | 112 | 	*
 | 
        
           |  |  | 113 | 	* @param String $classeNom Le nom de la classe
 | 
        
           |  |  | 114 | 	* @param Array $parametres Les paramètres à passer au constructeur.
 | 
        
           |  |  | 115 | 	* @return Object Le bouchon de la classe abstraite
 | 
        
           |  |  | 116 | 	*/
 | 
        
           |  |  | 117 | 	public function getClasseAbstraite($classeNom, Array $parametres) {
 | 
        
           |  |  | 118 | 		$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres);
 | 
        
           |  |  | 119 | 		return $efloreScript;
 | 
        
           |  |  | 120 | 	}
 | 
        
           |  |  | 121 |   | 
        
           |  |  | 122 | 	/**
 | 
        
           |  |  | 123 | 	 * Récupère une méthode privée d'une classe pour tester/documenter.
 | 
        
           |  |  | 124 | 	 * Comment l'utiliser :
 | 
        
           |  |  | 125 | 	 * 	MyClass->foo():
 | 
        
           |  |  | 126 | 	 *   $cls = new MyClass();
 | 
        
           |  |  | 127 | 	 *   $foo = self::getPrivateMethode($cls, 'foo');
 | 
        
           |  |  | 128 | 	 *   $foo->invoke($cls, $...);
 | 
        
           |  |  | 129 | 	 *
 | 
        
           |  |  | 130 | 	 * @param object $objet Une instance de votre classe
 | 
        
           |  |  | 131 | 	 * @param string $methode Le nom de la méthode private
 | 
        
           |  |  | 132 | 	 * @return ReflectionMethod La méthode demandée
 | 
        
           |  |  | 133 | 	 */
 | 
        
           |  |  | 134 | 	public static function getMethodePrivee($objet, $nomMethode) {
 | 
        
           |  |  | 135 | 		$classe = new ReflectionClass($objet);
 | 
        
           |  |  | 136 | 		$methode = $classe->getMethod($nomMethode);
 | 
        
           |  |  | 137 | 		$methode->setAccessible(true);
 | 
        
           |  |  | 138 | 		return $methode;
 | 
        
           |  |  | 139 | 	}
 | 
        
           |  |  | 140 |   | 
        
           |  |  | 141 | 	/**
 | 
        
           |  |  | 142 | 	* Récupère une méthode protégée d'une classe pour tester/documenter.
 | 
        
           |  |  | 143 | 	* Comment l'utiliser :
 | 
        
           |  |  | 144 | 	* 	MyClass->foo():
 | 
        
           |  |  | 145 | 	*   $cls = new MyClass();
 | 
        
           |  |  | 146 | 	*   $foo = self::getProtectedMethode($cls, 'foo');
 | 
        
           |  |  | 147 | 	*   $foo->invoke($cls, $...);
 | 
        
           |  |  | 148 | 	* @param object $objet Une instance de votre classe
 | 
        
           |  |  | 149 | 	* @param string $methode Le nom de la méthode protected
 | 
        
           |  |  | 150 | 	* @return ReflectionMethod La méthode demandée
 | 
        
           |  |  | 151 | 	*/
 | 
        
           |  |  | 152 | 	public static function getMethodeProtegee($objet, $nomMethode) {
 | 
        
           |  |  | 153 | 		return self::getMethodePrivee($objet, $nomMethode);
 | 
        
           |  |  | 154 | 	}
 | 
        
           |  |  | 155 | }
 | 
        
           |  |  | 156 | ?>
 |