]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/render/PageCacheManagerTest.php
Migrate cache purge function to a proper class
[github/shaarli/Shaarli.git] / tests / render / PageCacheManagerTest.php
diff --git a/tests/render/PageCacheManagerTest.php b/tests/render/PageCacheManagerTest.php
new file mode 100644 (file)
index 0000000..991515d
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/**
+ * Cache tests
+ */
+namespace Shaarli\Render;
+
+use PHPUnit\Framework\TestCase;
+use Shaarli\Security\SessionManager;
+
+// required to access $_SESSION array
+session_start();
+
+/**
+ * Unitary tests for cached pages
+ */
+class PageCacheManagerTest extends TestCase
+{
+    // test cache directory
+    protected static $testCacheDir = 'sandbox/dummycache';
+
+    // dummy cached file names / content
+    protected static $pages = array('a', 'toto', 'd7b59c');
+
+    /** @var PageCacheManager */
+    protected $cacheManager;
+
+    /** @var SessionManager */
+    protected $sessionManager;
+
+    /**
+     * Populate the cache with dummy files
+     */
+    public function setUp()
+    {
+        $this->cacheManager = new PageCacheManager(static::$testCacheDir);
+
+        if (!is_dir(self::$testCacheDir)) {
+            mkdir(self::$testCacheDir);
+        } else {
+            array_map('unlink', glob(self::$testCacheDir . '/*'));
+        }
+
+        foreach (self::$pages as $page) {
+            file_put_contents(self::$testCacheDir . '/' . $page . '.cache', $page);
+        }
+        file_put_contents(self::$testCacheDir . '/intru.der', 'ShouldNotBeThere');
+    }
+
+    /**
+     * Remove dummycache folder after each tests.
+     */
+    public function tearDown()
+    {
+        array_map('unlink', glob(self::$testCacheDir . '/*'));
+        rmdir(self::$testCacheDir);
+    }
+
+    /**
+     * Purge cached pages
+     */
+    public function testPurgeCachedPages()
+    {
+        $this->cacheManager->purgeCachedPages();
+        foreach (self::$pages as $page) {
+            $this->assertFileNotExists(self::$testCacheDir . '/' . $page . '.cache');
+        }
+
+        $this->assertFileExists(self::$testCacheDir . '/intru.der');
+    }
+
+    /**
+     * Purge cached pages - missing directory
+     */
+    public function testPurgeCachedPagesMissingDir()
+    {
+        $this->cacheManager = new PageCacheManager(self::$testCacheDir . '_missing');
+
+        $oldlog = ini_get('error_log');
+        ini_set('error_log', '/dev/null');
+        $this->assertEquals(
+            'Cannot purge sandbox/dummycache_missing: no directory',
+            $this->cacheManager->purgeCachedPages()
+        );
+        ini_set('error_log', $oldlog);
+    }
+}