setAccessible(true); $tmpDir = sys_get_temp_dir() . '/annu-kute-cache-test-' . getmypid(); if (!is_dir($tmpDir)) { mkdir($tmpDir, 0755, true); } $cacheDirProperty->setValue($cache, $tmpDir); // --- get sur un cache vide -------------------------------------------------- assertNull($cache->get('videos'), 'get retourne null quand aucune entrée n\'existe'); // --- set puis get ----------------------------------------------------------- $content = ['data' => ['video1', 'video2']]; $cache->set('videos', ['count' => 6], $content); assertEquals($content, $cache->get('videos', ['count' => 6]), 'get retourne le contenu après set'); // Le fichier stocké contient bien content / expires / created $files = glob($tmpDir . '/cache_*.json'); assertEquals(1, count($files), 'set crée exactement un fichier de cache'); $stored = json_decode(file_get_contents($files[0]), true); assertEquals($content, $stored['content'], 'le fichier stocke le contenu sous la clé "content"'); assertTrue(isset($stored['expires']) && $stored['expires'] > time(), 'le fichier stocke une expiration future'); assertTrue(isset($stored['created']), 'le fichier stocke la date de création'); // --- Ordre des paramètres --------------------------------------------------- // ksort() dans getCacheKey : l'ordre des paramètres ne change pas la clé $cache->set('videos', ['b' => 2, 'a' => 1], 'ordonné'); assertEquals( 'ordonné', $cache->get('videos', ['a' => 1, 'b' => 2]), 'get retrouve l\'entrée malgré un ordre de paramètres différent' ); assertNull( $cache->get('videos', ['a' => 9]), 'get retourne null pour des paramètres différents' ); // --- Expiration ------------------------------------------------------------- $cache->set('videos', ['old' => 1], 'périmé', -1); // TTL négatif : déjà expiré $filesBefore = count(glob($tmpDir . '/cache_*.json')); assertNull($cache->get('videos', ['old' => 1]), 'get retourne null pour une entrée expirée'); assertEquals( $filesBefore - 1, count(glob($tmpDir . '/cache_*.json')), 'get supprime le fichier expiré' ); // --- cleanup ---------------------------------------------------------------- $cache->set('cle-valide', [], 'valide', 300); $cache->set('cle-perimee', [], 'périmée', -10); $cleaned = $cache->cleanup(); assertEquals(1, $cleaned, 'cleanup supprime uniquement les entrées expirées'); assertEquals('valide', $cache->get('cle-valide'), 'cleanup conserve les entrées valides'); assertNull($cache->get('cle-perimee'), 'cleanup a bien supprimé l\'entrée expirée'); // --- Nettoyage du dossier temporaire ---------------------------------------- foreach (glob($tmpDir . '/cache_*.json') as $file) { unlink($file); } rmdir($tmpDir);