Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 139 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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