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