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 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
	}
7 jpm 63
 
3 jpm 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
 
7 jpm 72
		$retour = $this->consulterJson($ressources, $parametres);
3 jpm 73
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
74
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
75
		$this->assertEquals('50', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 50. Voir : $url");
76
		$this->assertEquals(50, count($retour['resultat']), "Le résultat devrait contenir 50 données. Voir : $url");
77
	}
78
 
79
	public function testRechercheFloue() {
80
		$url = Config::get('url_service').'/v1.01/taxons?recherche=floue&masque=Acer';
81
 
82
		$ressources = array('v1.01');
83
		$parametres = array(
84
					'recherche' => 'floue',
85
					'masque' => 'Acer');
86
 
7 jpm 87
		$retour = $this->consulterJson($ressources, $parametres);
3 jpm 88
		$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url");
89
		$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url");
90
		$this->assertEquals('4', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 4. Voir : $url");
91
		$this->assertEquals(4, count($retour['resultat']), "Le résultat devrait contenir 4 données. Voir : $url");
92
	}
7 jpm 93
 
3 jpm 94
	//+------------------------------------------------------------------------------------------------------+
95
	// Refactorisation
96
	private function consulterJson($ressources, $parametres) {
97
		$retourJson = $this->consulterBrut($ressources, $parametres);
98
		$retour = json_decode($retourJson, true);
99
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url");
100
		return $retour;
101
	}
102
 
103
	private function consulterBrut($ressources, $parametres) {
104
		array_unshift($ressources, 'taxons');
105
		array_unshift($ressources, 'bdtfx');
106
		$projets = new Projets();
107
		$retourJson = $projets->consulter($ressources, $parametres);
108
		return $retourJson;
109
	}
110
 
111
	private function creerUrl($ressources, $parametres) {
112
		$version = '';
113
		$ressourcesUrl = array();
114
		foreach ($ressources as $ressource) {
115
			if (preg_match('/^(v[0-9]+\.[0-9]+|[*+])$/', $ressource)) {
116
				$version = $ressource.'/';
117
			} else {
118
				$ressourcesUrl[] = $ressource;
119
			}
120
		}
121
		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
122
 
123
		$parametresUrl = '';
124
		if (count($parametres) > 0) {
125
			foreach ($parametres as $cle => $valeur) {
126
				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
127
			}
128
			$parametresUrl = '?'.implode('&', $parametresUrl);
129
		}
130
		$url = Config::get('url_service').'/'.$version.'noms'.$ressourcesUrl.$parametresUrl;
131
		return $url;
132
	}
133
}
134
?>