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 BdtfxNomsTest 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
 
65
	public function testResultatChamps() {
66
		$ressources = array('v1.01');
67
		$parametres = array(
68
						'recherche' => 'stricte',
69
						'masque.nn' => '182');
70
		$url = $this->creerUrl($ressources, $parametres);
71
 
72
		$noms = new Noms(array());
73
		$retourJson = $noms->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
 
77
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
78
		$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url");
79
		$this->assertArrayHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url");
80
		$this->assertEquals('182', $retour['resultat']['182']['id'], "Le tableau du résultat 182 doit contenir un champ 'id' avec pour valeur '182'. Voir : $url");
81
		$this->assertArrayHasKey('retenu', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url");
82
		$this->assertEquals('true', $retour['resultat']['182']['retenu'], "Le tableau du résultat 182 doit contenir un champ 'retenu' avec pour valeur 'true'. Voir : $url");
83
		$this->assertArrayHasKey('nom_sci', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci'. Voir : $url");
84
		$this->assertEquals('Acer monspessulanum', $retour['resultat']['182']['nom_sci'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url");
85
	}
86
 
87
	public function testMasqueSg() {
88
		$ressources = array('v1.01');
89
		$parametres = array(
90
				'recherche' => 'stricte',
91
				'masque.sg' => 'Asteraceae');
92
		$url = $this->creerUrl($ressources, $parametres);
93
 
94
		$noms = new Noms(array());
95
		$retourJson = $noms->consulter($ressources, $parametres);
96
		$retour = json_decode($retourJson, true);
97
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
98
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
99
		$this->assertEquals('nom_supra_generique=Asteraceae', $retour['entete']['masque'], "L'attribut 'masque' de l'entête devrait valoir 'nom_supra_generique=Asteraceae'. Voir : $url");
100
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
101
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
102
		$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url");
103
	}
104
 
105
	public function testMasqueGenSpSspAuAn() {
106
		$ressources = array('v1.01');
107
		$parametres = array(
108
			'recherche' => 'stricte',
109
			'masque.gen' => 'Allium',
110
			'masque.sp' => 'carinatum',
111
			'masque.ssp' => 'consimile',
112
			'masque.au' => 'Gren.',
113
			'masque.an' => '1855');
114
		$url = $this->creerUrl($ressources, $parametres);
115
 
116
		$noms = new Noms(array());
117
		$retourJson = $noms->consulter($ressources, $parametres);
118
		$retour = json_decode($retourJson, true);
119
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
120
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
121
 
122
		$masque = 'genre=Allium&epithete_sp=carinatum&epithete_infra_sp=consimile&auteur=Gren.&annee=1855';
123
		$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
124
		$this->assertEquals($masque, $retour['entete']['masque'], $message);
125
 
126
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
127
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
128
		$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url");
129
	}
130
 
131
	public function testMasqueNn() {
132
		$ressources = array('v1.01');
133
		$parametres = array(
134
				'recherche' => 'stricte',
135
				'masque.nn' => '182');
136
		$url = $this->creerUrl($ressources, $parametres);
137
 
138
		$noms = new Noms(array());
139
		$retourJson = $noms->consulter($ressources, $parametres);
140
		$retour = json_decode($retourJson, true);
141
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
142
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
143
		$masque = 'num_nom=182';
144
		$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
145
		$this->assertEquals($masque, $retour['entete']['masque'], $message);
146
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
147
 
148
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
149
		$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url");
150
		$this->assertArrayHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url");
151
		$this->assertEquals('182', $retour['resultat']['182']['id'], "Le tableau du résultat 182 doit contenir un champ 'id' avec pour valeur '182'. Voir : $url");
152
	}
153
 
154
	public function testMasqueRg() {
155
		$ressources = array('v1.01');
156
		$parametres = array(
157
					'recherche' => 'stricte',
158
					'masque.rg' => '180');
159
		$url = $this->creerUrl($ressources, $parametres);
160
 
161
		$noms = new Noms(array());
162
		$retourJson = $noms->consulter($ressources, $parametres);
163
		$retour = json_decode($retourJson, true);
164
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
165
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
166
		$masque = 'rang=180';
167
		$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
168
		$this->assertEquals($masque, $retour['entete']['masque'], $message);
169
		$this->assertEquals('210', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 210. Voir : $url");
170
	}
171
 
172
	public function testNsStructureTxt() {
173
		$ressources = array('v1.01');
174
		$parametres = array(
175
			'recherche' => 'stricte',
176
			'masque.nn' => '182',
177
			'ns.format' => 'txt',
178
			'ns.structure' => 'au,an,bib,ad');
179
		$url = $this->creerUrl($ressources, $parametres);
180
 
181
		$noms = new Noms(array());
182
		$retourJson = $noms->consulter($ressources, $parametres);
183
		$retour = json_decode($retourJson, true);
184
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
185
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
186
		$masque = 'num_nom=182';
187
		$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
188
		$this->assertEquals($masque, $retour['entete']['masque'], $message);
189
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
190
 
191
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
192
		$this->assertEquals('Acer monspessulanum L. [1753, Sp. Pl., éd. 1 : 1056]', $retour['resultat']['182']['nom_sci'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url");
193
	}
194
 
195
	public function testNsStructureHtml() {
196
		$ressources = array('v1.01');
197
		$parametres = array(
198
				'recherche' => 'stricte',
199
				'masque.nn' => '182',
200
				'ns.format' => 'htm',
201
				'ns.structure' => 'au,an,bib,ad');
202
		$url = $this->creerUrl($ressources, $parametres);
203
 
204
		$noms = new Noms(array());
205
		$retourJson = $noms->consulter($ressources, $parametres);
206
		$retour = json_decode($retourJson, true);
207
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
208
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
209
		$masque = 'num_nom=182';
210
		$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url";
211
		$this->assertEquals($masque, $retour['entete']['masque'], $message);
212
		$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url");
213
 
214
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat.\nVoir : $url");
215
		$attendu = '<span class=sci><span class="gen">Acer</span> <span class="sp">monspessulanum</span></span> <span class="auteur">L.</span> [<span class="annee">1753</span>, <span class="biblio">Sp. Pl., éd. 1 : 1056</span>]';
216
		$message = "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur '$attendu'. Voir : $url";
217
		$this->assertEquals($attendu, $retour['resultat']['182']['nom_sci'], $message);
218
	}
219
*/
220
	//+------------------------------------------------------------------------------------------------------+
221
	// Refactorisation
222
	private function consulterJson($ressources, $parametres) {
223
		$retourJson = $this->consulterBrut($ressources, $parametres);
224
		$retour = json_decode($retourJson, true);
225
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
226
		return $retour;
227
	}
228
 
229
	private function consulterBrut($ressources, $parametres) {
230
		array_unshift($ressources, 'noms');
231
		array_unshift($ressources, 'bdtfx');
232
		$projets = new Projets();
233
		$retourJson = $projets->consulter($ressources, $parametres);
234
		return $retourJson;
235
	}
236
 
237
	private function creerUrl($ressources, $parametres) {
238
		$version = '';
239
		$ressourcesUrl = array();
240
		foreach ($ressources as $ressource) {
241
			if (preg_match('/^(v[0-9]+\.[0-9]+|[*+])$/', $ressource)) {
242
				$version = $ressource.'/';
243
			} else {
244
				$ressourcesUrl[] = $ressource;
245
			}
246
		}
247
		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
248
 
249
		$parametresUrl = '';
250
		if (count($parametres) > 0) {
251
			foreach ($parametres as $cle => $valeur) {
252
				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
253
			}
254
			$parametresUrl = '?'.implode('&', $parametresUrl);
255
		}
256
		$url = Config::get('url_service').'/'.$version.'noms'.$ressourcesUrl.$parametresUrl;
257
		return $url;
258
	}
259
}
260
?>