Subversion Repositories eFlore/Projets.eflore-projets

Rev

Blame | Last modification | View Log | RSS feed

<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';

class ParametresVerificateurTest extends ServicePhpUnit {

        private function initialiser($parametresUrl = array(), $parametresAPI = array()) {
                $bdd = $this->getMock('Bdd');
                $parametres = new Parametres($parametresUrl, $bdd);
                $verificateur = new ParametresVerificateur($parametres, $parametresAPI);
                return $verificateur;
        }

        public function testerValeursPermises() {
                $parametresUrl = array(
                        'recherche' => 'declencheException',
                        'ns.format' => 'declencheException',
                        'retour' => 'declencheException',
                        'retour.format' => 'declencheException',
                        'retour.langue' => 'declencheException',
                        'ns.structure' => 'declencheException',
                        'version.projet' => 'declencheException');

                $verificateur = $this->initialiser($parametresUrl);

                try {
                        $verificateur->verifierValeurs();
                } catch(Exception $e) {
                        $messageComplet = array("Erreur dans le paramètrage de votre URL :");
                        $messageTpl = "Le paramètre '%s' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : %s";
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'recherche', 'stricte|floue|etendue');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.format', 'htm|txt');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour', 'application/json|image/jpeg');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.format', 'min|max|oss|perso');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.langue', '/^(?:[*]|orig|[a-z]{2})$/');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.structure', '|an|au|bib|ad');
                        $this->assertContains($messageAttendu, $e->getMessage());
                        $messageComplet[] = $messageAttendu = sprintf($messageTpl, 'version.projet', '/^(?:[0-9]+[.][0-9]+|[*+])$/');
                        $this->assertContains($messageAttendu, $e->getMessage());

                        $this->assertEquals(implode('<br/>', $messageComplet), $e->getMessage());
                        return null;
                }
                $this->fail("Aucune exception n'a été soulevée.");
        }

        public function testerExceptionVerificationConformiteApi() {
                $parametresUrl = array('code1' => 'val1');
                $parametresAPI = array('paramApi');

                $verificateur = $this->initialiser($parametresUrl, $parametresAPI);

                try {
                        $verificateur->verifierConformiteApi();
                } catch(Exception $e) {
                        $messageAttendu = "Le paramètre 'code1' n'est pas pris en compte par cette version de l'API.";
                        $this->assertEquals($messageAttendu, $e->getMessage());
                        return null;
                }
                $this->fail("Aucune exception n'a été soulevée.");
        }

        public function testerExceptionVerifierValeurSimple() {
                $parametresUrl = array('recherche' => 'declencheException');

                $verificateur = $this->initialiser($parametresUrl);

                try {
                        $verificateur->verifierValeurs();
                } catch(Exception $e) {
                        $messageAttendu = "Le paramètre 'recherche' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : ";
                        $this->assertContains($messageAttendu, $e->getMessage());
                        return null;
                }
                $this->fail("Aucune exception n'a été soulevée.");
        }

        public function testerExceptionVerifierValeurRegExp() {
                $parametresUrl = array('retour.langue' => '1');

                $verificateur = $this->initialiser($parametresUrl);

                try {
                        $verificateur->verifierValeurs();
                } catch(Exception $e) {
                        $messageAttendu = "Le paramètre 'retour.langue' ne peut pas prendre la valeur '1'. Valeurs permises : ";
                        $this->assertContains($messageAttendu, $e->getMessage());
                        return null;
                }
                $this->fail("Aucune exception n'a été soulevée.");
        }

        public function testerExceptionVerifierValeurMultiple() {
                $parametresUrl = array('ns.structure' => 'an,1');

                $verificateur = $this->initialiser($parametresUrl);

                try {
                        $verificateur->verifierValeurs();
                } catch(Exception $e) {
                        $messageAttendu = "Le paramètre 'ns.structure' ne peut pas prendre la valeur '1'. Valeurs permises : ";
                        $this->assertContains($messageAttendu, $e->getMessage());
                        return null;
                }
                $this->fail("Aucune exception n'a été soulevée.");
        }
}
?>