Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev Author Line No. Line
200 jpm 1
<?php
2
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
3
 
216 jpm 4
class NomsServiceBdtfxTest extends ServicePhpUnit {
200 jpm 5
 
216 jpm 6
	private $retour = '';
206 jpm 7
	private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.2/bdtfx/noms/%s';
8
	private $ontologieHrefTpl = 'http://localhost/service:eflore:0.2/bdnt/ontologies/rangTaxo:%s';
200 jpm 9
	private $champsProjet = array(
203 jpm 10
		'presence_Ga' => 'presence_Ga.code',
11
		'presence_Co' => 'presence_Co.code'
12
		);
200 jpm 13
 
14
	public function __construct() {
203 jpm 15
		$this->projet = 'bdtfx';
200 jpm 16
		$this->service = 'noms';
17
	}
18
 
19
	public function initialiserService(NomsListe $service) {
20
		$service->setDetailsHrefTpl($this->nomDetailSqueletteUrl);
21
		$service->setOntologieHrefTpl($this->ontologieHrefTpl);
203 jpm 22
		$service->setChampsProjet($this->champsProjet);
200 jpm 23
	}
24
 
216 jpm 25
	public function testVersionPrecise() {
26
		$ressources = array();
27
		$parametres = array('version.projet' => '1.01', 'recherche' => 'etendue', 'masque' => 'acer');
28
 
29
		$this->retour = $this->consulter($ressources, $parametres);
30
 
31
		$this->verifierStructureListe();
32
		$this->verifierMasque('nom_sci=acer%');
33
		$this->verifierTotal(156);
34
		$this->verifierNbreResultats(100);
35
	}
36
 
37
	public function testNomsVersionMultiple() {
38
		$ressources = array();
39
		$parametres = array('version.projet' => '*', 'recherche' => 'etendue', 'masque' => 'acer');
40
 
41
		$this->retour = $this->consulterBrut($ressources, $parametres);
42
 
43
		$this->verifierPresenceMessage("L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id");
44
	}
45
 
46
	public function testVersionInexistante() {
47
		$ressources = array();
48
		$parametres = array('version.projet' => '99.00');
49
 
50
		$this->retour = $this->consulterBrut($ressources, $parametres);
51
 
52
		$this->verifierPresenceMessage("La version '99.00' n'est pas disponible pour le projet 'bdtfx' !");
53
	}
54
 
55
	public function testAucunResultat() {
56
		$ressources = array();
57
		$parametres = array(
58
					'version.projet' => '1.01',
59
					'recherche' => 'stricte',
60
					'masque' => 'Axer');
61
 
62
		$this->retour = $this->consulterBrut($ressources, $parametres);
63
 
64
		$this->verifierPresenceMessage("Aucun résultat ne correspond a votre requête !");
65
	}
66
 
67
	public function testRechercheStricte() {
68
		$ressources = array();
69
		$parametres = array(
70
				'version.projet' => '1.01',
71
				'recherche' => 'stricte',
72
				'masque' => 'Acer');
73
 
74
		$this->retour = $this->consulter($ressources, $parametres);
75
 
76
		$this->verifierStructureListe();
77
		$this->verifierMasque('nom_sci=Acer');
78
		$this->verifierTotal(1);
79
		$this->verifierNbreResultats(1);
80
	}
81
 
82
	public function testResultatChamps() {
83
		$ressources = array();
84
		$parametres = array(
85
				'version.projet' => '1.01',
86
				'recherche' => 'stricte',
87
				'masque.nn' => '182');
88
 
89
		$this->retour = $this->consulter($ressources, $parametres);
90
 
91
		$this->verifierStructureListe();
92
		$this->verifierMasque('num_nom=182');
93
		$this->verifierTotal(1);
94
		$this->verifierNbreResultats(1);
95
		$this->verifierLigneResultatsStructure(182);
96
		$this->verifierResultatsLigneAttributValeur(182, 'retenu', true);
97
		$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', 'Acer monspessulanum');
98
	}
99
 
100
	public function testMasqueSg() {
101
		$ressources = array();
102
		$parametres = array(
103
				'version.projet' => '1.01',
104
				'recherche' => 'stricte',
105
				'masque.sg' => 'Asteraceae');
106
 
107
		$this->retour = $this->consulter($ressources, $parametres);
108
 
109
		$this->verifierStructureListe();
110
		$this->verifierMasque('nom_supra_generique=Asteraceae');
111
		$this->verifierTotal(1);
112
		$this->verifierNbreResultats(1);
113
	}
114
 
115
	public function testMasqueGenSpSspAuAn() {
116
		$ressources = array();
117
		$parametres = array(
118
				'version.projet' => '1.01',
119
				'recherche' => 'stricte',
120
				'masque.gen' => 'Allium',
121
				'masque.sp' => 'carinatum',
122
				'masque.ssp' => 'consimile',
123
				'masque.au' => 'Gren.',
124
				'masque.an' => '1855');
125
 
126
		$this->retour = $this->consulter($ressources, $parametres);
127
 
128
		$this->verifierStructureListe();
129
		$this->verifierMasque('genre=Allium&epithete_sp=carinatum&epithete_infra_sp=consimile&auteur=Gren.&annee=1855');
130
		$this->verifierTotal(1);
131
		$this->verifierNbreResultats(1);
132
	}
133
 
134
	public function testMasqueNn() {
135
		$ressources = array();
136
		$parametres = array(
137
				'version.projet' => '1.01',
138
				'recherche' => 'stricte',
139
				'masque.nn' => '182');
140
 
141
		$this->retour = $this->consulter($ressources, $parametres);
142
 
143
		$this->verifierStructureListe();
144
		$this->verifierMasque('num_nom=182');
145
		$this->verifierTotal(1);
146
		$this->verifierNbreResultats(1);
147
		$this->verifierLigneResultatsStructure(182);
148
	}
149
 
150
	public function testMasqueRg() {
151
		$ressources = array();
152
		$parametres = array(
153
				'version.projet' => '1.01',
154
				'recherche' => 'stricte',
155
				'masque.rg' => '180');
156
 
157
		$this->retour = $this->consulter($ressources, $parametres);
158
 
159
		$this->verifierStructureListe();
160
		$this->verifierMasque('rang=180');
161
		$this->verifierTotal(210);
162
	}
163
 
164
	// TODO : à implémenter!
165
	/*
166
	 public function testNomsIdVersionMultiple() {
167
	$ressources = array('71711');
168
	$parametres = array('version.projet' => '*');
169
 
170
	$retour = $this->consulter($ressources, $parametres);
171
	$this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01.");
172
	$this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02.");
173
	$this->assertEquals('71711', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '71711'");
174
	$this->assertEquals('71711', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '71711'");
175
	}*/
176
 
177
	// TODO : à implémenter
178
	/*
179
	public function testNsStructureTxt() {
180
		$ressources = array();
181
		$parametres = array(
182
				'version.projet' => '1.01',
183
				'recherche' => 'stricte',
184
				'masque.nn' => '182',
185
				'ns.format' => 'txt',
186
				'ns.structure' => 'au,an,bib,ad');
187
 
188
		$this->retour = $this->consulter($ressources, $parametres);
189
 
190
		$this->verifierStructureListe();
191
		$this->verifierMasque('num_nom=182');
192
		$this->verifierTotal(1);
193
		$this->verifierNbreResultats(1);
194
		$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', 'Acer monspessulanum L. [1753, Sp. Pl., éd. 1 : 1056]');
195
	}*/
196
 
197
	// TODO : à implémenter
198
	/*
199
	public function testNsStructureHtml() {
200
		$ressources = array();
201
		$parametres = array(
202
				'version.projet' => '1.01',
203
				'recherche' => 'stricte',
204
				'masque.nn' => '182',
205
				'ns.format' => 'htm',
206
				'ns.structure' => 'au,an,bib,ad');
207
 
208
		$this->retour = $this->consulter($ressources, $parametres);
209
 
210
		$this->verifierStructureListe();
211
		$this->verifierMasque('num_nom=182');
212
		$this->verifierTotal(1);
213
		$this->verifierNbreResultats(1);
214
		$nomSciAttendu = '<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>]';
215
		$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', $nomSciAttendu);
216
	}*/
217
 
217 jpm 218
	// TODO : à implémenter
219
	/*
216 jpm 220
	public function testListeNomsAvecParametreRetourChamps() {
221
		$ressources = array();
222
		$parametres = array('version.projet' => '1.01',
223
				'masque' => 'acer',
224
				'retour.champs' => 'auteur,nom_retenu.*');
225
 
226
		$this->retour = $this->consulter($ressources, $parametres);
227
 
228
		$this->verifierStructureListe();
229
		$this->presenceAttributDansResultat(83587, 'auteur');
230
		$this->presenceAttributDansResultat(83587, 'nom_retenu.id');
231
		$this->presenceAttributDansResultat(83587, 'nom_retenu.href');
232
		$this->abscenceAttributDansResultat(83587, 'nom_retenu');
217 jpm 233
	}*/
216 jpm 234
 
221 jpm 235
	// TODO : à implémenter
236
	/*
237
	public function testNomsIdAvecParametreRetourChamps() {
238
		$ressources = array('1');
239
		$parametres = array('version.projet' => '1.01',
240
			'retour.champs' => 'nom_retenu.*');
241
 
242
		$this->retour = $this->consulter($ressources, $parametres);
243
 
244
		$this->presenceAttribut('nom_retenu.id');
245
		$this->presenceAttribut('nom_retenu.href');
246
		$this->abscenceAttribut('nom_retenu');
247
		$this->abscenceAttribut('auteur');
248
	}*/
249
 
250
	// TODO : à implémenter
251
	/*
252
	public function testListeNomAvecParametreNsStructureAuAnBibAd() {
253
		$ressources = array();
254
		$parametres = array('version.projet' => '1.01',
255
			'masque.nn' => '39607',
256
			'ns.structure' => 'au,an,bib,ad');
257
 
258
		$this->retour = $this->consulter($ressources, $parametres);
259
 
260
		$this->verifierStructureListe();
261
		$this->presenceAttributDansResultat(39607, 'nom_sci');
262
 
263
		$nomSciTxt = 'Lolium annuum Gilib. [1792, Exercit. Phytol., 2 : 520] [nom. invalid.]';
264
		$this->verifierResultatsLigneAttributValeur(39607, 'nom_sci', $nomSciTxt);
265
	}*/
266
 
267
	// TODO : à implémenter
268
	/*
269
	public function testListeNomAvecParametreNsStructureAuAnBibAdEtNsFormatHtm() {
270
		$ressources = array();
271
		$parametres = array('version.projet' => '1.01',
272
			'masque.nn' => '39607',
273
			'ns.structure' => 'au,an,bib,ad',
274
			'ns.format' => 'htm');
275
 
276
		$this->retour = $this->consulter($ressources, $parametres);
277
 
278
		$this->verifierStructureListe();
279
		$this->verifierMasque('num_nom=39607');
280
 
281
		$this->presenceAttributDansResultat(39607, 'nom_sci');
282
 
283
		$nomSciHtml = "<span class=\"sci\"><span class=\"gen\">Lolium</span> <span class=\"sp\">annuum</span></span> <span class=\"auteur\">Gilib.</span> [<span class=\"annee\">1792</span>, <span class=\"biblio\">Exercit. Phytol., 2 : 520</span>] [<span class=\"adendum\">nom. invalid.</span>]";
284
		$this->verifierResultatsLigneAttributValeur(39607, 'nom_sci', $nomSciHtml);
285
	}*/
286
 
200 jpm 287
	public function testSansParametres() {
288
		$ressources = array('85');
289
		$parametres = array();
290
 
206 jpm 291
		$retour = $this->consulter($ressources, $parametres);
200 jpm 292
 
293
		$this->assertTrue(is_array($retour), 'Retour est un tableau');
294
		$this->assertArrayHasKey('id', $retour, 'Présence champ id');
295
		$this->assertSame(85, $retour['id'], 'Valeur champ id = 85');
296
		$this->assertArrayHasKey('nom_sci', $retour, 'Présence champ nom_sci');
203 jpm 297
 
298
		$this->assertSame('Abutilon theophrasti', $retour['nom_sci'], 'Valeur champ nom_sci = Abutilon theophrasti');
200 jpm 299
		$this->assertArrayHasKey('nom_retenu.id', $retour, 'Présence champ nom_retenu.id');
203 jpm 300
		$this->assertSame(85, $retour['nom_retenu.id'], 'Valeur champ nom_sci = 85');
200 jpm 301
		$this->assertArrayHasKey('nom_retenu', $retour, 'Présence champ nom_retenu');
203 jpm 302
		$this->assertSame('Abutilon theophrasti', $retour['nom_retenu'], 'Valeur champ nom_retenu = Abutilon theophrasti');
200 jpm 303
		$this->assertArrayHasKey('nom_retenu.href', $retour, 'Présence champ nom_retenu.href');
203 jpm 304
		$urlNomRetenuHrefAttendue = sprintf($this->nomDetailSqueletteUrl, 85);
200 jpm 305
		$this->assertSame($urlNomRetenuHrefAttendue, $retour['nom_retenu.href'], "Valeur champ nom_retenu.href = $urlNomRetenuHrefAttendue");
306
 
307
		$this->assertArrayHasKey('rang.code', $retour, 'Présence champ rang.code');
308
		$this->assertSame('bdnt.rangTaxo:290', $retour['rang.code'], 'Valeur champ rang.code = bdnt.rangTaxo:290');
309
		$this->assertArrayHasKey('rang', $retour, 'Présence champ rang');
310
		$this->assertSame('Espèce', $retour['rang'], 'Valeur champ rang = Espèce');
311
 
312
		$this->assertArrayHasKey('rang.href', $retour, 'Présence champ rang.href');
313
		$hrefAttendue =sprintf($this->ontologieHrefTpl, 290);
314
		$this->assertSame($hrefAttendue, $retour['rang.href'], "Valeur champ rang.href = $hrefAttendue");
315
 
203 jpm 316
		$this->assertArrayHasKey('nom_sci.genre', $retour, 'Présence champ nom_sci.genre');
317
		$this->assertSame('Abutilon', $retour['nom_sci.genre'], "Valeur champ nom_sci.genre = 'Abutilon'");
318
		$this->assertArrayHasKey('nom_sci.sp', $retour, 'Présence champ nom_sci.sp');
319
		$this->assertSame('theophrasti', $retour['nom_sci.sp'], "Valeur champ nom_sci.sp = theophrasti");
320
 
321
		$this->assertArrayHasKey('auteur', $retour, 'Présence champ auteur');
322
		$this->assertSame('Medik.', $retour['auteur'], "Valeur champ auteur = 'Medik.'");
323
 
324
		$this->assertArrayHasKey('presence_Ga.code', $retour, 'Présence champ presence_Ga.code'.print_r($retour,true));
325
		$this->assertSame('P', $retour['presence_Ga.code'], "Valeur champ presence_Ga.code = 'P'");
326
		$this->assertArrayHasKey('presence_Co.code', $retour, 'Présence champ "presence_Co.code');
327
		$this->assertSame('P', $retour['presence_Co.code'], "Valeur champ page = P");
200 jpm 328
	}
329
 
203 jpm 330
	public function testNomSansCorrespondance() {
331
		$ressources = array('98940');
332
		$parametres = array();
333
 
221 jpm 334
		$this->retour = $this->consulter($ressources, $parametres);
203 jpm 335
 
221 jpm 336
		$this->abscenceAttribut('nom_retenu.id');
337
		$this->abscenceAttribut('nom_retenu.href');
338
		$this->verifierAttributValeur('nom_retenu', null);
203 jpm 339
	}
340
 
216 jpm 341
	private function verifierPresenceMessage($messageAttendu) {
342
		$this->assertEquals($messageAttendu, $this->retour);
343
	}
344
 
345
	private function verifierStructureListe() {
346
		$this->assertArrayHasKey('entete', $this->retour, "Présence attribut : entete");
347
		$this->assertArrayHasKey('masque', $this->retour['entete'], "Présence attribut : entete>masque");
348
		$this->assertArrayHasKey('depart', $this->retour['entete'], "Présence attribut : entete>depart");
349
		$this->assertArrayHasKey('limite', $this->retour['entete'], "Présence attribut : entete>limite");
350
		$this->assertArrayHasKey('total', $this->retour['entete'], "Présence attribut : entete>total");
351
		$this->assertArrayHasKey('resultats', $this->retour, "Présence attribut : resultats");
352
	}
353
 
354
	private function verifierMasque($masque) {
355
		$this->assertEquals($masque, $this->retour['entete']['masque'], "Attribut 'entete>masque' = '$masque'");
356
	}
357
 
358
	private function verifierTotal($total) {
359
		$this->assertSame($total, $this->retour['entete']['total'], "Attribut 'entete>total' = $total");
360
	}
361
 
362
	private function verifierNbreResultats($nbre) {
363
		$this->assertSame($nbre, count($this->retour['resultats']), "Nbre 'resultats' = 1");
364
	}
365
 
366
	private function verifierLigneResultatsStructure($ligne) {
367
		$this->assertArrayHasKey($ligne, $this->retour['resultats'], "Presence attribut : resultats>$ligne".print_r($this->retour, true));
368
		$this->assertArrayHasKey('nom_sci', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>nom_sci".print_r($this->retour, true));
369
		$this->assertArrayHasKey('retenu', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>retenu".print_r($this->retour, true));
370
		$this->assertArrayHasKey('href', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>href".print_r($this->retour, true));
371
	}
372
 
373
	private function presenceAttributDansResultat($ligne, $attribut) {
221 jpm 374
		$this->assertArrayHasKey($ligne, $this->retour['resultats'], "Présence ligne : resultats>$ligne");
216 jpm 375
		$this->assertArrayHasKey($attribut, $this->retour['resultats'][$ligne], "Présence attribut : resultats>$ligne>$attribut");
376
	}
377
 
378
	private function abscenceAttributDansResultat($ligne, $attribut) {
379
		$this->assertArrayNotHasKey($attribut, $this->retour['resultats'][$ligne], "Présence attribut : resultats>$ligne>$attribut");
380
	}
381
 
382
	private function verifierResultatsLigneAttributValeur($ligne, $attribut, $valeur) {
383
		$this->assertSame($valeur, $this->retour['resultats'][$ligne][$attribut], "Attribut 'resultats>$ligne>$attribut' = $valeur");
384
	}
221 jpm 385
 
386
	private function presenceAttribut($attribut) {
387
		$this->assertArrayHasKey($attribut, $this->retour);
388
	}
389
 
390
	private function abscenceAttribut($attribut) {
391
		$this->assertArrayNotHasKey($attribut, $this->retour);
392
	}
393
 
394
	private function verifierAttributValeur($attribut, $valeur) {
395
		$this->presenceAttribut($attribut);
396
		$this->assertSame($valeur, $this->retour[$attribut]);
397
	}
200 jpm 398
}
399
?>