From a2903122112348a2a68b3a5b094277463f861ec9 Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Sun, 9 Jul 2023 19:09:51 +0200 Subject: [PATCH] tests: tests _DIR_PLUGINS_SUPPL en PHPUnit --- ecrire/tests/Plugin/DirPluginsSupplTest.php | 65 ++++++ ecrire/tests/Plugin/data/paquet.xml | 9 + .../legacy/unit/plugin/dir_plugins_suppl.php | 212 ------------------ 3 files changed, 74 insertions(+), 212 deletions(-) create mode 100644 ecrire/tests/Plugin/DirPluginsSupplTest.php create mode 100644 ecrire/tests/Plugin/data/paquet.xml delete mode 100644 ecrire/tests/legacy/unit/plugin/dir_plugins_suppl.php diff --git a/ecrire/tests/Plugin/DirPluginsSupplTest.php b/ecrire/tests/Plugin/DirPluginsSupplTest.php new file mode 100644 index 0000000000..7a29b5446f --- /dev/null +++ b/ecrire/tests/Plugin/DirPluginsSupplTest.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +namespace Spip\Test\Filesystem; + +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Depends; +use PHPUnit\Framework\TestCase; + +class DirPluginsSupplTest extends TestCase +{ + const DIR_PLUGINS_SUPPL = _DIR_TMP . 'test_dir_plugins_suppl/'; + const DIR_PLUGINS_OUTSIDE = _DIR_TMP . 'test_dir_plugins_outisde/'; + const PAQUET_TEST = 'toto/paquet.xml'; + + public static function setUpBeforeClass(): void { + find_in_path('./inc/plugin.php', '', true); + supprimer_repertoire(self::DIR_PLUGINS_SUPPL); + mkdir(self::DIR_PLUGINS_SUPPL . 'toto', 0777, true); + mkdir(self::DIR_PLUGINS_OUTSIDE . 'toto', 0777, true); + copy(__DIR__ . '/data/paquet.xml', self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST); + copy(__DIR__ . '/data/paquet.xml', self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST); + } + + public static function tearDownAfterClass(): void { + supprimer_repertoire(self::DIR_PLUGINS_SUPPL); + supprimer_repertoire(self::DIR_PLUGINS_OUTSIDE); + } + + public function testConstant() { + // preparation: la constante est elle definie et comprend uniquement 1 reps suppl? + if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL !== self::DIR_PLUGINS_SUPPL) { + $this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL est déjà définie, le test ne peut s’appliquer. Valeur "%s"', _DIR_PLUGINS_SUPPL)); + } + define('_DIR_PLUGINS_SUPPL', self::DIR_PLUGINS_SUPPL); + if (substr_count(_DIR_PLUGINS_SUPPL, ':') !== 0) { + $this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL ne doit contenir qu’un seul chemin supplémentaire. Valeur: "%s"', _DIR_PLUGINS_SUPPL)); + } + if (!str_ends_with(_DIR_PLUGINS_SUPPL, '/')) { + $this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL doit terminer par un /. Valeur: "%s"', _DIR_PLUGINS_SUPPL)); + } + $this->assertTrue(true); + } + + #[Depends('testConstant')] + public function testDirectory() { + // le rep suppl existe + $this->assertTrue(is_dir(self::DIR_PLUGINS_SUPPL), sprintf('Le répertoire "%s" aurait du être créé', self::DIR_PLUGINS_SUPPL)); + $this->assertTrue(file_exists(self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST), sprintf('Le fichier "%s" aurait du être créé', self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST)); + // le rep outside existe + $this->assertTrue(is_dir(self::DIR_PLUGINS_OUTSIDE), sprintf('Le répertoire "%s" aurait du être créé', self::DIR_PLUGINS_OUTSIDE)); + $this->assertTrue(file_exists(self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST), sprintf('Le fichier "%s" aurait du être créé', self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST)); + } + + #[Depends('testDirectory')] + public function testListePluginsSuppl() { + $plugins = liste_plugin_files(self::DIR_PLUGINS_SUPPL); + // verifier qu'on retrouve bien tous les rep suppl de _DIR_PLUGINS_SUPPL + $this->assertContains('toto', $plugins, sprintf('Le répertoire "%s" non trouvé dans "%s"', 'toto', self::DIR_PLUGINS_SUPPL)); + // Mais pas des plugins en trop ! + $this->assertCount(1, $plugins, sprintf('Il y a plus qu’un plugin trouvé dans "%s"', self::DIR_PLUGINS_SUPPL)); + } + +} diff --git a/ecrire/tests/Plugin/data/paquet.xml b/ecrire/tests/Plugin/data/paquet.xml new file mode 100644 index 0000000000..82235ad873 --- /dev/null +++ b/ecrire/tests/Plugin/data/paquet.xml @@ -0,0 +1,9 @@ +<paquet + prefix="test_dir_plugins_suppl" + categorie="squelette" + version="1.0.0" + etat="stable" + compatibilite="[5.0.0-dev;5.*]" +> + <nom>Test Dir PLugins Suppl</nom> +</paquet> diff --git a/ecrire/tests/legacy/unit/plugin/dir_plugins_suppl.php b/ecrire/tests/legacy/unit/plugin/dir_plugins_suppl.php deleted file mode 100644 index d23b6de890..0000000000 --- a/ecrire/tests/legacy/unit/plugin/dir_plugins_suppl.php +++ /dev/null @@ -1,212 +0,0 @@ -<?php - -declare(strict_types=1); - -/** - * Test unitaire de prise en compte de la constante _DIR_PLUGINS_SUPPL par la fonction liste_plugin_files() du fichier - * ./inc/plugin.php - */ - -$test = '_DIR_PLUGINS_SUPPL'; - -$remonte = __DIR__ . '/'; -while (!is_file($remonte . 'test.inc')) { - $remonte .= '../'; -} - -require $remonte . 'test.inc'; -find_in_path('./inc/plugin.php', '', true); - -// lancer le binz -echo test_dir_plugins_suppl(); - -function test_dir_plugins_suppl() { - // preparation: la constante est elle definie et comprend uniquement 1 reps suppl? - if (!defined('_DIR_PLUGINS_SUPPL')) { - define('_DIR_PLUGINS_SUPPL', _DIR_TMP . 'plug_sup/'); - } elseif (substr_count(_DIR_PLUGINS_SUPPL, ':') !== 0) { - return 'NA : la constante _DIR_PLUGINS_SUPPL definie dans mes_options.php ne doit contenir qu\'un seul chemin supplementaire ; actuellement sa valeur est "' . _DIR_PLUGINS_SUPPL . '"'; - } - - if (!str_ends_with(_DIR_PLUGINS_SUPPL, '/')) { - return 'NA : la constante _DIR_PLUGINS_SUPPL doit terminer par un / ; actuellement sa valeur est "' . _DIR_PLUGINS_SUPPL . '"'; - } - // preparation: verifier qu'il existe au moins un dossier plugin par rep suppl (i.e. contenant un fichier paquet.xml)? - $Ta_effacer = []; - $Ta_retrouver = []; - - $existe_paquet = false; - - // le rep suppl n'existe pas; le creer - if (!is_dir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) { - if (!@mkdir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) { - return 'NA probleme de droits d\'ecriture 0, impossible de creer le dossier de _DIR_PLUGINS_SUPPL: "' . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test'; - } - $Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL; - } - - // le rep suppl est vide: creer un dossier de plugin bidon (toto) et y copier un paquet.xml - if ( - (is_countable(scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) ? count( - scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL) - ) : 0) < 3 - ) { - if (!@mkdir(_DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto')) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 1, impossible de creer un dossier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test'; - } - $Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto'; - - if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml')) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 2, impossible de creer un fichier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto" necessaire pour ce test'; - } - $Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml'; - $Ta_retrouver[] = 'toto'; - - $existe_paquet = true; - } else { - if ($pointeur = opendir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) { - while (false !== ($rep = readdir($pointeur))) { - if ($rep === '.' || $rep === '..' || !is_dir($rep)) { - continue; - } elseif ($pointeur = opendir(_DIR_RACINE . _DIR_PLUGINS_SUPPL . $rep)) { - while (false !== ($fichier = readdir($pointeur))) { - if ($fichier === 'paquet.xml') { - $Ta_retrouver[] = $rep; - $existe_paquet = true; - break; - } - } - } - } - } - - // tous les sous-dossiers sont scannes et toujours pas de paquet.xml: - // creer un dossier bidon et y copier un paquet.xml - if (!$existe_paquet) { - if ( - !in_array('toto', scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL), true) && !@mkdir( - _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto' - ) - ) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 3, impossible de creer un dossier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test'; - } - $Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto'; - - if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml')) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 4, impossible de creer un fichier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto" necessaire pour ce test'; - } - $Ta_retrouver[] = 'toto'; - $Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml'; - - $existe_paquet = true; - } - } - - // preparation: creer au moins un dossier plugin hors de _DIR_PLUGINS et _DIR_PLUGINS_SUPPL - $rep_non_suppl = ''; - if (substr_count(_DIR_PLUGINS_SUPPL, '/') > 1) { - $rep_non_suppl = substr(_DIR_PLUGINS_SUPPL, 0, strrpos(rtrim(_DIR_PLUGINS_SUPPL, '/'), '/')) . '/test_non_suppl'; - } else { - $rep_non_suppl = _DIR_TMP . 'test_non_suppl'; - } - - if ($rep_non_suppl === _DIR_PLUGINS_SUPPL) { - return 'NA : le dossier "' . $rep_non_suppl . '" ne doit pas faire partie des repertoires definis dans _DIR_PLUGINS_SUPPL pour que ce test fonctionne'; - } - - if (!is_dir($rep_non_suppl)) { - if (!@mkdir($rep_non_suppl)) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 5, impossible de creer le dossier "' . $rep_non_suppl . '" necessaire pour ce test'; - } - $Ta_effacer[] = $rep_non_suppl; - } - - if (!file_exists($rep_non_suppl . '/paquet.xml')) { - if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', $rep_non_suppl . '/paquet.xml')) { - nettoyage_plugins_suppl($Ta_effacer); - return 'NA probleme de droits d\ecriture 6, impossible de creer un fichier dans "' . $rep_non_suppl . '" necessaire pour ce test'; - } - $Ta_effacer[] = $rep_non_suppl . '/paquet.xml'; - } - - // test 1: lancer liste_plugin_files() et recuperer l'array retourne - // verifier qu'on retrouve bien tous les rep suppl de _DIR_PLUGINS_SUPPL - $Tplugins_recups = liste_plugin_files(_DIR_PLUGINS_SUPPL); - - $Terr = []; - $mess_err = ''; - foreach ($Ta_retrouver as $rep) { - if (!in_array($rep, $Tplugins_recups, true)) { - $Terr[] = $rep; - } - } - - if ($Terr !== []) { - if (count($Terr) !== 1) { - $mess_err .= "<li>Les repertoires supplementaires de _DIR_PLUGINS_SUPPL suivants n'ont pas etes trouves par la fonction liste_plugin_files(): "; - } else { - $mess_err .= "<li>Le repertoire supplementaire de _DIR_PLUGINS_SUPPL suivant n'a pas ete trouve par la fonction liste_plugin_files(): "; - } - - $mess_err .= (implode(', ', $Terr)); - } - - // test 2: la liste des reps plugins trouves comprend t'elle des dossiers - // ni dans _DIR_PLUGINS ni dans _DIR_PLUGINS_SUPPL? - $Terr = []; - foreach ($Tplugins_recups as $rep_plug) { - if ( - !is_dir(_DIR_PLUGINS . $rep_plug) && is_dir(_DIR_RACINE . $rep_plug) - ) { // le rep existe mais pas dans _DIR_PLUGINS - $ok = false; - foreach ($Treps_suppl as $rep_suppl) { - if (substr_count($rep_plug, $rep_suppl) > 0) { - $ok = true; - break; - } - } - - if (!$ok) { - $Terr[] = $rep_plug; - } - } - } - - if ($Terr !== []) { - if (count($Terr) !== 1) { - $mess_err .= '<li>Les repertoires suivants ont etes trouves par la fonction liste_plugin_files(): '; - $mess_err .= (implode(', ', $Terr)); - $mess_err .= " alors qu'ils n'appartiennent ni a _DIR_PLUGINS ni a _DIR_PLUGINS_SUPPL"; - } else { - $mess_err .= '<li>Le repertoire suivant a ete trouve par la fonction liste_plugin_files(): '; - $mess_err .= (implode(', ', $Terr)); - $mess_err .= " alors qu'il n'appartient ni a _DIR_PLUGINS ni a _DIR_PLUGINS_SUPPL"; - } - } - - // sortie propre du test - nettoyage_plugins_suppl($Ta_effacer); - - if ($mess_err !== '') { - return '<ul>' . $mess_err . '</ul>'; - } - return 'OK'; -} - -// nettoyer tous les fichiers et dossiers crees pour ce test -function nettoyage_plugins_suppl($Ta_supprimer) { - // inverser l'odre des elements de l'array pour eviter d'essayer d'effacer des reps qui contiennent encore des fichiers - arsort($Ta_supprimer); - foreach ($Ta_supprimer as $a_suppr) { - if (is_dir($a_suppr)) { - rmdir($a_suppr); - } elseif (file_exists($a_suppr)) { - unlink($a_suppr); - } - } -} -- GitLab