Subversion Repositories eFlore/Projets.eflore-projets

Rev

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