Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 261 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 261 Rev 790
1
<?php
1
<?php
2
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';
2
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php';
3
 
3
 
4
class CelImagesTest extends ServiceEflorePhpUnit {
4
class CelImagesTest extends ServiceEflorePhpUnit {
5
 
5
 
6
	public function __construct() {
6
	public function __construct() {
7
		$this->projet = 'cel';
7
		$this->projet = 'cel';
8
		$this->service = 'images';
8
		$this->service = 'images';
9
	}
9
	}
10
 
10
 
11
	public function testParametreMasqueNnInexistant() {
11
	public function testParametreMasqueNnInexistant() {
12
		$ressources = array();
12
		$ressources = array();
13
		$parametres = array('retour'=>'image/jpeg', 'retour.format'=>'M');
13
		$parametres = array('retour'=>'image/jpeg', 'retour.format'=>'M');
14
 
14
 
15
		$retour = $this->consulterBrut($ressources, $parametres);
15
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
16
		$messageAttendu = "Le paramètre masque.nn est obligatoire.";
16
		$messageAttendu = "Le paramètre masque.nn est obligatoire.";
17
		$this->assertEquals($messageAttendu, $retour,
17
		$this->assertEquals($messageAttendu, $retour,
18
			"Le service doit renvoyer un message pour un masque non renseigné");
18
			"Le service doit renvoyer un message pour un masque non renseigné");
19
	}
19
	}
20
 
20
 
21
	public function testParametreMasqueNnMultiple() {
21
	public function testParametreMasqueNnMultiple() {
22
		$ressources = array();
22
		$ressources = array();
23
		$parametres = array('masque.nn' => 'bdftf:6218,182','retour'=>'image/jpeg');
23
		$parametres = array('masque.nn' => 'bdftf:6218,182','retour'=>'image/jpeg');
24
 
24
 
25
		$retour = $this->consulterBrut($ressources, $parametres);
25
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
26
		$messageAttendu = "Le paramètre masque.nn peut contenir une seule valeur numérique pour l'instant pour le format de retour image/jpeg.";
26
		$messageAttendu = "Le paramètre masque.nn peut contenir une seule valeur numérique pour l'instant pour le format de retour image/jpeg.";
27
		$this->assertEquals($messageAttendu, $retour,
27
		$this->assertEquals($messageAttendu, $retour,
28
			"Le service doit renvoyer un message car le paramètre masque.nn n'est pas complétement implémenté.");
28
			"Le service doit renvoyer un message car le paramètre masque.nn n'est pas complétement implémenté.");
29
	}
29
	}
30
 
30
 
31
	public function testParametreRetourFormatInexistant() {
31
	public function testParametreRetourFormatInexistant() {
32
		$ressources = array();
32
		$ressources = array();
33
		$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg');
33
		$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg');
34
 
34
 
35
		$retour = $this->consulterBrut($ressources, $parametres);
35
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
36
		$image = imagecreatefromstring($retour);
36
		$image = imagecreatefromstring($retour);
37
		$largeur = imagesx($image);
37
		$largeur = imagesx($image);
38
		$hauteur = imagesy($image);
38
		$hauteur = imagesy($image);
39
		$this->assertLessThanOrEqual(450, $largeur,
39
		$this->assertLessThanOrEqual(450, $largeur,
40
			"Le service doit renvoyer une image de taille M (largeur < 450px) par défaut (h:$hauteur x l:$largeur)");
40
			"Le service doit renvoyer une image de taille M (largeur < 450px) par défaut (h:$hauteur x l:$largeur)");
41
		$this->assertLessThanOrEqual(450, $hauteur,
41
		$this->assertLessThanOrEqual(450, $hauteur,
42
			"Le service doit renvoyer une image de taille M (hauteur < 600px) par défaut (h:$hauteur x  l:$largeur)");
42
			"Le service doit renvoyer une image de taille M (hauteur < 600px) par défaut (h:$hauteur x  l:$largeur)");
43
		if ($hauteur != 450) {
43
		if ($hauteur != 450) {
44
			$this->assertSame(450, $largeur,
44
			$this->assertSame(450, $largeur,
45
				"Le service doit renvoyer une image de taille M : largeur == 450px pour une hauteur infèrieure à 600px (h:$hauteur x l:$largeur)");
45
				"Le service doit renvoyer une image de taille M : largeur == 450px pour une hauteur infèrieure à 600px (h:$hauteur x l:$largeur)");
46
		}
46
		}
47
		if ($largeur != 450) {
47
		if ($largeur != 450) {
48
			$this->assertSame(450, $hauteur,
48
			$this->assertSame(450, $hauteur,
49
				"Le service doit renvoyer une image de taille M : hauteur == 600px pour une largeur infèrieure à 450px (h:$hauteur x l:$largeur)");
49
				"Le service doit renvoyer une image de taille M : hauteur == 600px pour une largeur infèrieure à 450px (h:$hauteur x l:$largeur)");
50
		}
50
		}
51
	}
51
	}
52
 
52
 
53
	public function testValeurParametreRetourFormatInexistante() {
53
	public function testValeurParametreRetourFormatInexistante() {
54
		$ressources = array();
54
		$ressources = array();
55
		$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg', 'retour.format'=>'X53L');
55
		$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg', 'retour.format'=>'X53L');
56
 
56
 
57
		$retour = $this->consulterBrut($ressources, $parametres);
57
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
58
		$messageAttendu = "Le type de format 'X53L' n'est pas supporté";
58
		$messageAttendu = "Le type de format 'X53L' n'est pas supporté";
59
		$this->assertEquals($messageAttendu, $retour,
59
		$this->assertEquals($messageAttendu, $retour,
60
			"Le service doit renvoyer un message pour un format de retour inexistant");
60
			"Le service doit renvoyer un message pour un format de retour inexistant");
61
	}
61
	}
62
 
62
 
63
	public function testValeurParametreRetourInexistante() {
63
	public function testValeurParametreRetourInexistante() {
64
		$ressources = array();
64
		$ressources = array();
65
		$parametres = array('masque.nn' => '6218','retour'=>'image/jpog');
65
		$parametres = array('masque.nn' => '6218','retour'=>'image/jpog');
66
 
66
 
67
		$retour = $this->consulterBrut($ressources, $parametres);
67
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
68
		$messageAttendu = "Le type de retour 'image/jpog' n'est pas supporté";
68
		$messageAttendu = "Le type de retour 'image/jpog' n'est pas supporté";
69
		$this->assertEquals($messageAttendu, $retour,
69
		$this->assertEquals($messageAttendu, $retour,
70
			"Le service doit renvoyer un message d'erreur 400 sur une type de retour incorrect");
70
			"Le service doit renvoyer un message d'erreur 400 sur une type de retour incorrect");
71
	}
71
	}
72
 
72
 
73
	public function testTaxonSansImage() {
73
	public function testTaxonSansImage() {
74
		$ressources = array();
74
		$ressources = array();
75
		$parametres = array('masque.nn' => '6218','retour' => 'image/jpeg');
75
		$parametres = array('masque.nn' => '6218','retour' => 'image/jpeg');
76
 
76
 
77
		$retour = $this->consulterBrut($ressources, $parametres);
77
		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
78
		$messageAttendu = "Aucune image ne correspond au numéro numenclatural bdtfx:'6218'";
78
		$messageAttendu = "Aucune image ne correspond au numéro numenclatural bdtfx:'6218'";
79
		$this->assertEquals($messageAttendu, $retour,
79
		$this->assertEquals($messageAttendu, $retour,
80
			"Le service doit renvoyer un message pour un taxon ne possédant pas d'images");
80
			"Le service doit renvoyer un message pour un taxon ne possédant pas d'images");
81
	}
81
	}
82
 
82
 
83
	public function testListeImagesJsonMasqueNnSimple() {
83
	public function testListeImagesJsonMasqueNnSimple() {
84
		$ressources = array();
84
		$ressources = array();
85
		$parametres = array('masque.nn' => '182','retour' => 'application/json', 'retour.format' => 'CRX2S');
85
		$parametres = array('masque.nn' => '182','retour' => 'application/json', 'retour.format' => 'CRX2S');
86
 
86
 
87
		$retour = $this->consulterJson($ressources, $parametres);
87
		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
88
 
88
 
89
		$this->verifierEnteteChampsObligatoires($retour);
89
		$this->verifierEnteteChampsObligatoires($retour);
90
		$this->assertEquals('nn=182', $retour['entete']['masque'], 'Valeur entete > masque = "nn=182"');
90
		$this->assertEquals('nn=182', $retour['entete']['masque'], 'Valeur entete > masque = "nn=182"');
91
		$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
91
		$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
92
		$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
92
		$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
93
		$this->assertSame(62, $retour['entete']['total'], 'Valeur entete > total = 62');
93
		$this->assertSame(62, $retour['entete']['total'], 'Valeur entete > total = 62');
94
		$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Absence champ : entete > href.suivant");
94
		$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Absence champ : entete > href.suivant");
95
		$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Absence champ : entete > href.precedent");
95
		$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Absence champ : entete > href.precedent");
96
 
96
 
97
		$this->verifierResultatsChampsObligatoires($retour);
97
		$this->verifierResultatsChampsObligatoires($retour);
98
		$this->verifierResultatsValeursGenerique($retour);
98
		$this->verifierResultatsValeursGenerique($retour);
99
		$this->assertCount(62, $retour['resultats'], 'Nbre resultats = 62');
99
		$this->assertCount(62, $retour['resultats'], 'Nbre resultats = 62');
100
		foreach ($retour['resultats'] as $id => $resultat) {
100
		foreach ($retour['resultats'] as $id => $resultat) {
101
			$this->assertRegExp("/CRX2S/", $resultat['binaire.href']);
101
			$this->assertRegExp("/CRX2S/", $resultat['binaire.href']);
102
		}
102
		}
103
	}
103
	}
104
 
104
 
105
	public function testListeImagesJsonMasqueNnMultiple() {
105
	public function testListeImagesJsonMasqueNnMultiple() {
106
		$ressources = array();
106
		$ressources = array();
107
		$parametres = array('masque.nn' => '62018,182,141','retour' => 'application/json');
107
		$parametres = array('masque.nn' => '62018,182,141','retour' => 'application/json');
108
 
108
 
109
		$retour = $this->consulterJson($ressources, $parametres);
109
		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
110
 
110
 
111
		$this->verifierEnteteChampsObligatoires($retour);
111
		$this->verifierEnteteChampsObligatoires($retour);
112
		$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
112
		$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
113
		$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
113
		$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0');
114
		$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
114
		$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0');
115
		$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');
115
		$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');
116
		$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ : entete > href.suivant");
116
		$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ : entete > href.suivant");
117
		$urlHrefSuivantAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=100&navigation.limite=100&masque.nn=62018,182,141';
117
		$urlHrefSuivantAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=100&navigation.limite=100&masque.nn=62018,182,141';
118
		$this->assertEquals($urlHrefSuivantAttendue, $retour['entete']['href.suivant'], "Valeur entete > href.suivant = '$urlHrefSuivantAttendue'");
118
		$this->assertEquals($urlHrefSuivantAttendue, $retour['entete']['href.suivant'], "Valeur entete > href.suivant = '$urlHrefSuivantAttendue'");
119
		$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ : entete > href.precedent");
119
		$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ : entete > href.precedent");
120
 
120
 
121
		$this->verifierResultatsChampsObligatoires($retour);
121
		$this->verifierResultatsChampsObligatoires($retour);
122
		$this->verifierResultatsValeursGenerique($retour);
122
		$this->verifierResultatsValeursGenerique($retour);
123
		$this->assertCount(100, $retour['resultats'], 'Nbre resultats = 134');
123
		$this->assertCount(100, $retour['resultats'], 'Nbre resultats = 134');
124
		$this->assertArrayHasKey('6114', $retour['resultats'], "Présence champ : resultats > 6114");
124
		$this->assertArrayHasKey('6114', $retour['resultats'], "Présence champ : resultats > 6114");
125
	}
125
	}
126
 
126
 
127
	public function testListeImagesJsonNavigation() {
127
	public function testListeImagesJsonNavigation() {
128
		$ressources = array();
128
		$ressources = array();
129
		$parametres = array('masque.nn' => '62018,182,141', 'retour' => 'application/json',
129
		$parametres = array('masque.nn' => '62018,182,141', 'retour' => 'application/json',
130
			'navigation.depart' => 100, 'navigation.limite' => 100);
130
			'navigation.depart' => 100, 'navigation.limite' => 100);
131
 
131
 
132
		$retour = $this->consulterJson($ressources, $parametres);
132
		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
133
 
133
 
134
		$this->verifierEnteteChampsObligatoires($retour);
134
		$this->verifierEnteteChampsObligatoires($retour);
135
		$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
135
		$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"');
136
		$this->assertSame((int)$parametres['navigation.depart'], $retour['entete']['depart'], "Valeur entete > depart = {$parametres['navigation.depart']}");
136
		$this->assertSame((int)$parametres['navigation.depart'], $retour['entete']['depart'], "Valeur entete > depart = {$parametres['navigation.depart']}");
137
		$this->assertSame((int)$parametres['navigation.limite'], $retour['entete']['limite'], "Valeur entete > limite = {$parametres['navigation.limite']}");
137
		$this->assertSame((int)$parametres['navigation.limite'], $retour['entete']['limite'], "Valeur entete > limite = {$parametres['navigation.limite']}");
138
		$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');
138
		$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134');
139
 
139
 
140
		$this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ : entete > href.precedent");
140
		$this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ : entete > href.precedent");
141
		$urlHrefPrecedentAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=0&navigation.limite=100&masque.nn=62018,182,141';
141
		$urlHrefPrecedentAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=0&navigation.limite=100&masque.nn=62018,182,141';
142
		$this->assertEquals($urlHrefPrecedentAttendue, $retour['entete']['href.precedent'], "Valeur entete > href.precedent = '$urlHrefPrecedentAttendue'");
142
		$this->assertEquals($urlHrefPrecedentAttendue, $retour['entete']['href.precedent'], "Valeur entete > href.precedent = '$urlHrefPrecedentAttendue'");
143
		$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ : entete > href.suivant");
143
		$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ : entete > href.suivant");
144
 
144
 
145
		$this->verifierResultatsChampsObligatoires($retour);
145
		$this->verifierResultatsChampsObligatoires($retour);
146
		$this->verifierResultatsValeursGenerique($retour);
146
		$this->verifierResultatsValeursGenerique($retour);
147
	}
147
	}
148
 
148
 
149
	private function verifierEnteteChampsObligatoires($retour) {
149
	private function verifierEnteteChampsObligatoires($retour) {
150
		$this->assertArrayHasKey('entete', $retour, "Présence champ : entete");
150
		$this->assertArrayHasKey('entete', $retour, "Présence champ : entete");
151
		$this->assertArrayHasKey('masque', $retour['entete'], "Présence champ : entete > masque");
151
		$this->assertArrayHasKey('masque', $retour['entete'], "Présence champ : entete > masque");
152
		$this->assertArrayHasKey('depart', $retour['entete'], "Présence champ : entete > depart");
152
		$this->assertArrayHasKey('depart', $retour['entete'], "Présence champ : entete > depart");
153
		$this->assertArrayHasKey('limite', $retour['entete'], "Présence champ : entete > limite");
153
		$this->assertArrayHasKey('limite', $retour['entete'], "Présence champ : entete > limite");
154
		$this->assertArrayHasKey('total', $retour['entete'], "Présence champ : entete > total");
154
		$this->assertArrayHasKey('total', $retour['entete'], "Présence champ : entete > total");
155
	}
155
	}
156
 
156
 
157
	private function verifierResultatsChampsObligatoires($retour) {
157
	private function verifierResultatsChampsObligatoires($retour) {
158
		$this->assertArrayHasKey('resultats', $retour, "Présence champ : resultats");
158
		$this->assertArrayHasKey('resultats', $retour, "Présence champ : resultats");
159
		foreach ($retour['resultats'] as $id => $resultat) {
159
		foreach ($retour['resultats'] as $id => $resultat) {
160
			$this->assertTrue(is_int($id), "id = nbre entier : $id");
160
			$this->assertTrue(is_int($id), "id = nbre entier : $id");
161
			$this->assertArrayHasKey('date', $resultat, "Présence champ : resultats > $id > date");
161
			$this->assertArrayHasKey('date', $resultat, "Présence champ : resultats > $id > date");
162
			$this->assertArrayHasKey('mime', $resultat, "Présence champ : resultats > $id > mime");
162
			$this->assertArrayHasKey('mime', $resultat, "Présence champ : resultats > $id > mime");
163
			$this->assertArrayHasKey('binaire.href', $resultat, "Présence champ : resultats > $id > binaire.href");
163
			$this->assertArrayHasKey('binaire.href', $resultat, "Présence champ : resultats > $id > binaire.href");
164
			$this->assertArrayHasKey('determination', $resultat, "Présence champ : resultats > $id > determination");
164
			$this->assertArrayHasKey('determination', $resultat, "Présence champ : resultats > $id > determination");
165
			$this->assertArrayHasKey('determination.nom_sci', $resultat, "Présence champ : resultats > $id > determination.nom_sci");
165
			$this->assertArrayHasKey('determination.nom_sci', $resultat, "Présence champ : resultats > $id > determination.nom_sci");
166
			$this->assertArrayHasKey('determination.nom_sci.code', $resultat, "Présence champ : resultats > $id > determination.nom_sci.code");
166
			$this->assertArrayHasKey('determination.nom_sci.code', $resultat, "Présence champ : resultats > $id > determination.nom_sci.code");
167
			$this->assertArrayHasKey('station', $resultat, "Présence champ : resultats > $id > station");
167
			$this->assertArrayHasKey('station', $resultat, "Présence champ : resultats > $id > station");
168
			$this->assertArrayHasKey('auteur', $resultat, "Présence champ : resultats > $id > auteur");
168
			$this->assertArrayHasKey('auteur', $resultat, "Présence champ : resultats > $id > auteur");
169
		}
169
		}
170
	}
170
	}
171
 
171
 
172
	private function verifierResultatsValeursGenerique($retour) {
172
	private function verifierResultatsValeursGenerique($retour) {
173
		foreach ($retour['resultats'] as $id => $resultat) {
173
		foreach ($retour['resultats'] as $id => $resultat) {
174
			$this->assertRegExp("/$id/", $resultat['binaire.href']);
174
			$this->assertRegExp("/$id/", $resultat['binaire.href']);
175
		}
175
		}
176
	}
176
	}
177
}
177
}
178
?>
178
?>