projet = 'cel'; $this->service = 'images'; } public function testParametreMasqueNnInexistant() { $ressources = array(); $parametres = array('retour'=>'image/jpeg', 'retour.format'=>'M'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $messageAttendu = "Le paramètre masque.nn est obligatoire."; $this->assertEquals($messageAttendu, $retour, "Le service doit renvoyer un message pour un masque non renseigné"); } public function testParametreMasqueNnMultiple() { $ressources = array(); $parametres = array('masque.nn' => 'bdftf:6218,182','retour'=>'image/jpeg'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $messageAttendu = "Le paramètre masque.nn peut contenir une seule valeur numérique pour l'instant pour le format de retour image/jpeg."; $this->assertEquals($messageAttendu, $retour, "Le service doit renvoyer un message car le paramètre masque.nn n'est pas complétement implémenté."); } public function testParametreRetourFormatInexistant() { $ressources = array(); $parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $image = imagecreatefromstring($retour); $largeur = imagesx($image); $hauteur = imagesy($image); $this->assertLessThanOrEqual(450, $largeur, "Le service doit renvoyer une image de taille M (largeur < 450px) par défaut (h:$hauteur x l:$largeur)"); $this->assertLessThanOrEqual(450, $hauteur, "Le service doit renvoyer une image de taille M (hauteur < 600px) par défaut (h:$hauteur x l:$largeur)"); if ($hauteur != 450) { $this->assertSame(450, $largeur, "Le service doit renvoyer une image de taille M : largeur == 450px pour une hauteur infèrieure à 600px (h:$hauteur x l:$largeur)"); } if ($largeur != 450) { $this->assertSame(450, $hauteur, "Le service doit renvoyer une image de taille M : hauteur == 600px pour une largeur infèrieure à 450px (h:$hauteur x l:$largeur)"); } } public function testValeurParametreRetourFormatInexistante() { $ressources = array(); $parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg', 'retour.format'=>'X53L'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $messageAttendu = "Le type de format 'X53L' n'est pas supporté"; $this->assertEquals($messageAttendu, $retour, "Le service doit renvoyer un message pour un format de retour inexistant"); } public function testValeurParametreRetourInexistante() { $ressources = array(); $parametres = array('masque.nn' => '6218','retour'=>'image/jpog'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $messageAttendu = "Le type de retour 'image/jpog' n'est pas supporté"; $this->assertEquals($messageAttendu, $retour, "Le service doit renvoyer un message d'erreur 400 sur une type de retour incorrect"); } public function testTaxonSansImage() { $ressources = array(); $parametres = array('masque.nn' => '6218','retour' => 'image/jpeg'); $retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); $messageAttendu = "Aucune image ne correspond au numéro numenclatural bdtfx:'6218'"; $this->assertEquals($messageAttendu, $retour, "Le service doit renvoyer un message pour un taxon ne possédant pas d'images"); } public function testListeImagesJsonMasqueNnSimple() { $ressources = array(); $parametres = array('masque.nn' => '182','retour' => 'application/json', 'retour.format' => 'CRX2S'); $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); $this->verifierEnteteChampsObligatoires($retour); $this->assertEquals('nn=182', $retour['entete']['masque'], 'Valeur entete > masque = "nn=182"'); $this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0'); $this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0'); $this->assertSame(62, $retour['entete']['total'], 'Valeur entete > total = 62'); $this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Absence champ : entete > href.suivant"); $this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Absence champ : entete > href.precedent"); $this->verifierResultatsChampsObligatoires($retour); $this->verifierResultatsValeursGenerique($retour); $this->assertCount(62, $retour['resultats'], 'Nbre resultats = 62'); foreach ($retour['resultats'] as $id => $resultat) { $this->assertRegExp("/CRX2S/", $resultat['binaire.href']); } } public function testListeImagesJsonMasqueNnMultiple() { $ressources = array(); $parametres = array('masque.nn' => '62018,182,141','retour' => 'application/json'); $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); $this->verifierEnteteChampsObligatoires($retour); $this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"'); $this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0'); $this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0'); $this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134'); $this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ : entete > href.suivant"); $urlHrefSuivantAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=100&navigation.limite=100&masque.nn=62018,182,141'; $this->assertEquals($urlHrefSuivantAttendue, $retour['entete']['href.suivant'], "Valeur entete > href.suivant = '$urlHrefSuivantAttendue'"); $this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ : entete > href.precedent"); $this->verifierResultatsChampsObligatoires($retour); $this->verifierResultatsValeursGenerique($retour); $this->assertCount(100, $retour['resultats'], 'Nbre resultats = 134'); $this->assertArrayHasKey('6114', $retour['resultats'], "Présence champ : resultats > 6114"); } public function testListeImagesJsonNavigation() { $ressources = array(); $parametres = array('masque.nn' => '62018,182,141', 'retour' => 'application/json', 'navigation.depart' => 100, 'navigation.limite' => 100); $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); $this->verifierEnteteChampsObligatoires($retour); $this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"'); $this->assertSame((int)$parametres['navigation.depart'], $retour['entete']['depart'], "Valeur entete > depart = {$parametres['navigation.depart']}"); $this->assertSame((int)$parametres['navigation.limite'], $retour['entete']['limite'], "Valeur entete > limite = {$parametres['navigation.limite']}"); $this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134'); $this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ : entete > href.precedent"); $urlHrefPrecedentAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=0&navigation.limite=100&masque.nn=62018,182,141'; $this->assertEquals($urlHrefPrecedentAttendue, $retour['entete']['href.precedent'], "Valeur entete > href.precedent = '$urlHrefPrecedentAttendue'"); $this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ : entete > href.suivant"); $this->verifierResultatsChampsObligatoires($retour); $this->verifierResultatsValeursGenerique($retour); } private function verifierEnteteChampsObligatoires($retour) { $this->assertArrayHasKey('entete', $retour, "Présence champ : entete"); $this->assertArrayHasKey('masque', $retour['entete'], "Présence champ : entete > masque"); $this->assertArrayHasKey('depart', $retour['entete'], "Présence champ : entete > depart"); $this->assertArrayHasKey('limite', $retour['entete'], "Présence champ : entete > limite"); $this->assertArrayHasKey('total', $retour['entete'], "Présence champ : entete > total"); } private function verifierResultatsChampsObligatoires($retour) { $this->assertArrayHasKey('resultats', $retour, "Présence champ : resultats"); foreach ($retour['resultats'] as $id => $resultat) { $this->assertTrue(is_int($id), "id = nbre entier : $id"); $this->assertArrayHasKey('date', $resultat, "Présence champ : resultats > $id > date"); $this->assertArrayHasKey('mime', $resultat, "Présence champ : resultats > $id > mime"); $this->assertArrayHasKey('binaire.href', $resultat, "Présence champ : resultats > $id > binaire.href"); $this->assertArrayHasKey('determination', $resultat, "Présence champ : resultats > $id > determination"); $this->assertArrayHasKey('determination.nom_sci', $resultat, "Présence champ : resultats > $id > determination.nom_sci"); $this->assertArrayHasKey('determination.nom_sci.code', $resultat, "Présence champ : resultats > $id > determination.nom_sci.code"); $this->assertArrayHasKey('station', $resultat, "Présence champ : resultats > $id > station"); $this->assertArrayHasKey('auteur', $resultat, "Présence champ : resultats > $id > auteur"); } } private function verifierResultatsValeursGenerique($retour) { foreach ($retour['resultats'] as $id => $resultat) { $this->assertRegExp("/$id/", $resultat['binaire.href']); } } public function testDateAnterieur1901() { $ressources = array('41825'); $parametres = array('referentiel'=>'bdtfx'); $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); $this->assertArrayHasKey('date', $retour, "Présence champ : date"); $this->assertEquals("1891-00-00 00:00:00", $retour['date'], 'Valeur date <> 1891'); } } ?>