| 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 |   | 
        
           | 790 | raphael | 15 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 |   | 
        
           | 790 | raphael | 25 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 |   | 
        
           | 790 | raphael | 35 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 |   | 
        
           | 790 | raphael | 57 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres);
 | 
        
           | 128 | jpm | 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 |   | 
        
           | 790 | raphael | 67 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 |   | 
        
           | 790 | raphael | 77 | 		$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $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 |   | 
        
           | 790 | raphael | 87 | 		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
 | 
        
           | 140 | jpm | 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 |   | 
        
           | 790 | raphael | 109 | 		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
 | 
        
           | 138 | jpm | 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 |   | 
        
           | 790 | raphael | 132 | 		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
 | 
        
           | 138 | jpm | 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 | 	}
 | 
        
           | 826 | raphael | 177 |   | 
        
           |  |  | 178 | 	public function testDateAnterieur1901() {
 | 
        
           |  |  | 179 | 		$ressources = array('41825');
 | 
        
           |  |  | 180 | 		$parametres = array('referentiel'=>'bdtfx');
 | 
        
           |  |  | 181 |   | 
        
           |  |  | 182 | 		$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres);
 | 
        
           |  |  | 183 |   | 
        
           |  |  | 184 | 		$this->assertArrayHasKey('date', $retour, "Présence champ : date");
 | 
        
           |  |  | 185 | 		$this->assertEquals("1891-00-00 00:00:00", $retour['date'], 'Valeur date <> 1891');
 | 
        
           |  |  | 186 | 	}
 | 
        
           | 106 | aurelien | 187 | }
 | 
        
           |  |  | 188 | ?>
 |