AuthN->Login() ; ->Logout() et ->GetCurrentUser(); private static $_SetUpRanOnce = false; /** * Initialiser un contexte commun à tous les tests, dont les jeux de données. * * Cette méthode sera exécutée préalablement à l'exécution de *chacun* des tests de cette suite; * mais elle offre la possibilité de n'exécuter une partie du code d'initialisation qu'une seule fois, * ce qui peut faire économiser beaucoup en temps d'exécution. * * Rappel: CIUnit offre la possibilité d'utiliser une variable magique appelée $tables pour charger les fixtures. * Pour cela il suffit de définir le tableau $tables et d'appeler la méthode parent::setUp() dans la méthode setUp() * pour que les données se chargent. * * var $tables = array( * "users" => "ibcu_users_auth-and-auth", * "ibcu_privileges" => "ibcu_privileges_auth-and-auth", * "ibcu_features" => "ibcu_features_auth-and-auth", * "ibcu_assusersprivileges" => "ibcu_assusersprivileges_auth-and-auth", * "ibcu_assfeaturesprivileges" => "ibcu_assfeaturesprivileges_auth-and-auth" * ); * * Nous n'utilisons toutefois pas cette possibilité, préférant la syntaxe $this->dbfixt() pour charger nos données. * En effet, avec dbfixt() nous avons un contrôle sur le chargement des données, soit en une seule fois au début * soit répétitivement à chaque test. Cela n'est pas possible avec $tables qui recharge les données test par test. * * De même, nous pouvons utiliser dbfixt() à tout moment dans le code pour charger un contexte particulier. * * Il faut savoir enfin que si nous utilisons $tables, alors il faut appeler parent:tearDown() car celui-ci procède * à un nettoyage relatif à cette variable dans CIUnitTestCase.php. */ public function setUp(): void { /** * Section 1. Code à n'exécuter qu'une seule et unique fois. */ if (!self::$_SetUpRanOnce) { // Charger des données de test partagées par tous les tests $this->dbfixt(array( // Authentication and authorization "users" => "users_%context%", "ibcu_privileges" => "ibcu_privileges_%context%", "ibcu_features" => "ibcu_features_%context%", "ibcu_assusersprivileges" => "ibcu_assusersprivileges_%context%", "ibcu_assfeaturesprivileges" => "ibcu_assfeaturesprivileges_%context%", "ib_applicationsettings" => "ib_applicationsettings_%context%", // Entities "%entities1%" => "%entities1%_%context%", "%entities2%" => "%entities2%_%context%", )); // Signaler que le code a été exécuté. self::$_SetUpRanOnce = true; } /** * Section 2. Code à exécuter pour chacune des méthodes ci-après. */ $this->AuthN = new \AuthenticationManager(); } /** * Nettoyage après l'exécution de *chacun* des tests. * * Pour rappel, on n'utilise généralement tearDown() que si on a alloué des ressources extérieures * telles que des fichiers ou des sockets dans le setUp(), ou encore si on a créé de très nombreux objets * et que l'on veut faire des unset() pour tenter faire intervenir plut tôt le garbage collection, * quand bien même celui-ci est imprévisible par définition. * * Attention: Cette méthode hérite de application/third_party/CIUnit/libraries/CIUnitTestCase.php * qui a ses propres traitements. Si cette méthode est effectivement utilisée (pour clean-up de mocks par exemple), * alors il ne faut pas oublier d'appeler parent::tearDown() à la fin. * * Inversement, si pour une raison ou pour une autre on ne veut pas que le code tearDown() du parent s'exécute, * alors on peut activer la méthode tearDown() sans y appeler parent::tearDown(), y compris en ayant une méthode * vide à cet effet. Soit répété bien clairement: un tearDown() vide neutralise le tearDown() du parent. * * Attention enfin: CIUnit offre la possibilité d'utiliser la variable magique $tables pour charger les fixtures. * Nous n'utilisons pas cette possibilité, préférant la syntaxe $this->dbfixt() pour charger nos données. * Il faut néanmoins savoir que si nous devions utiliser $tables, alors il faut appeler parent:tearDown() * car celui-ci procède à un nettoyage relatif à cette variable dans CIUnitTestCase.php. */ /*public function tearDown(): void { // ... // Si le clean-up du parent est aussi requis. parent::tearDown(); }*/ /** * Specify some desired behaviour. */ public function testMyTest1() { // Pour avoir les privilèges requis par la suite. $this->AuthN->Login("user", "password"); // Do stuff //... // Sortir pour éviter d'éventuels effets secondaires. $this->AuthN->Logout(); } }