Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 7 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 jpm 1
<?php
2
class BdtfxTaxonsTest extends PHPUnit_Framework_TestCase {
3
 
4
	public function testVersionPrecise() {
5
		$ressources = array('v1.01');
6
		$parametres = array();
7
		$url = $this->creerUrl($ressources, $parametres);
8
		$retour = $this->consulterJson($ressources, $parametres);
9
 
10
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
11
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
12
	}
13
 
14
	public function testNomsIdVersionMultiple() {
15
		$ressources = array('*', '182');
16
		$parametres = array();
17
		$url = $this->creerUrl($ressources, $parametres);
18
 
19
		$retour = $this->consulterJson($ressources, $parametres);
20
		$this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01.\nVoir : $url");
21
		$this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02.\nVoir : $url");
22
		$this->assertEquals('182', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '182'");
23
		$this->assertEquals('182', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '182'");
24
	}
25
 
26
	public function testNomsVersionMultiple() {
27
		$ressources = array('*');
28
		$parametres = array();
29
		$url = $this->creerUrl($ressources, $parametres);
30
 
31
		$retour = $this->consulterBrut($ressources, $parametres);
32
 
33
		$attendu = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id";
34
		$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu";
35
		$this->assertEquals($attendu, $retour, $message);
36
	}
37
 
38
	public function testVersionInexistante() {
39
		$ressources = array('v99.00');
40
		$parametres = array();
41
		$url = $this->creerUrl($ressources, $parametres);
42
 
43
		$retour = $this->consulterBrut($ressources, $parametres);
44
 
45
		$attendu = 'La requête SQL formée comporte une erreur!';
46
		$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu";
47
		$this->assertEquals($attendu, $retour, $message);
48
	}
49
 
50
	public function testRechercheStricte() {
51
		$ressources = array('v1.01');
52
		$parametres = array(
53
					'recherche' => 'stricte',
54
					'masque' => 'Acer');
55
		$url = $this->creerUrl($ressources, $parametres);
56
 
57
		$retour = $this->consulterJson($ressources, $parametres);
58
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
59
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
60
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
61
		$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url");
62
	}
63
	/*
64
	public function testRechercheEtendue() {
65
		$url = Config::get('url_service').'/v1.01/taxons?recherche=etendue&masque=Acer';
66
 
67
		$ressources = array('v1.01');
68
		$parametres = array(
69
				'recherche' => 'etendue',
70
				'masque' => 'Acer');
71
 
72
		$taxons = new Taxons(array());
73
		$retourJson = $taxons->consulter($ressources, $parametres);
74
		$retour = json_decode($retourJson, true);
75
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
76
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
77
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
78
		$this->assertEquals('50', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 50. Voir : $url");
79
		$this->assertEquals(50, count($retour['resultat']), "Le résultat devrait contenir 50 données. Voir : $url");
80
	}
81
 
82
	public function testRechercheFloue() {
83
		$url = Config::get('url_service').'/v1.01/taxons?recherche=floue&masque=Acer';
84
 
85
		$ressources = array('v1.01');
86
		$parametres = array(
87
					'recherche' => 'floue',
88
					'masque' => 'Acer');
89
 
90
		$taxons = new Taxons(array());
91
		$retourJson = $taxons->consulter($ressources, $parametres);
92
		$retour = json_decode($retourJson, true);
93
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
94
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
95
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
96
		$this->assertEquals('4', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 4. Voir : $url");
97
		$this->assertEquals(4, count($retour['resultat']), "Le résultat devrait contenir 4 données. Voir : $url");
98
	}
99
*/
100
	//+------------------------------------------------------------------------------------------------------+
101
	// Refactorisation
102
	private function consulterJson($ressources, $parametres) {
103
		$retourJson = $this->consulterBrut($ressources, $parametres);
104
		$retour = json_decode($retourJson, true);
105
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
106
		return $retour;
107
	}
108
 
109
	private function consulterBrut($ressources, $parametres) {
110
		array_unshift($ressources, 'taxons');
111
		array_unshift($ressources, 'bdtfx');
112
		$projets = new Projets();
113
		$retourJson = $projets->consulter($ressources, $parametres);
114
		return $retourJson;
115
	}
116
 
117
	private function creerUrl($ressources, $parametres) {
118
		$version = '';
119
		$ressourcesUrl = array();
120
		foreach ($ressources as $ressource) {
121
			if (preg_match('/^(v[0-9]+\.[0-9]+|[*+])$/', $ressource)) {
122
				$version = $ressource.'/';
123
			} else {
124
				$ressourcesUrl[] = $ressource;
125
			}
126
		}
127
		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
128
 
129
		$parametresUrl = '';
130
		if (count($parametres) > 0) {
131
			foreach ($parametres as $cle => $valeur) {
132
				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
133
			}
134
			$parametresUrl = '?'.implode('&', $parametresUrl);
135
		}
136
		$url = Config::get('url_service').'/'.$version.'noms'.$ressourcesUrl.$parametresUrl;
137
		return $url;
138
	}
139
}
140
?>