f00600a283
Currently the cache is only invalidated when the datastore changes, while it should rely on selected period of time. Fixes #1659
160 lines
4.4 KiB
PHP
160 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* PageCache tests
|
|
*/
|
|
namespace Shaarli\Feed;
|
|
|
|
/**
|
|
* Unitary tests for cached pages
|
|
*/
|
|
class CachedPageTest extends \Shaarli\TestCase
|
|
{
|
|
// test cache directory
|
|
protected static $testCacheDir = 'sandbox/pagecache';
|
|
protected static $url = 'http://shaar.li/feed/atom';
|
|
protected static $filename;
|
|
|
|
/**
|
|
* Create the cache directory if needed
|
|
*/
|
|
public static function setUpBeforeClass(): void
|
|
{
|
|
if (!is_dir(self::$testCacheDir)) {
|
|
mkdir(self::$testCacheDir);
|
|
}
|
|
self::$filename = self::$testCacheDir . '/' . sha1(self::$url) . '.cache';
|
|
}
|
|
|
|
/**
|
|
* Reset the page cache
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
if (file_exists(self::$filename)) {
|
|
unlink(self::$filename);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a new cached page
|
|
*/
|
|
public function testConstruct()
|
|
{
|
|
new CachedPage(self::$testCacheDir, '', true, null);
|
|
new CachedPage(self::$testCacheDir, '', false, null);
|
|
new CachedPage(self::$testCacheDir, 'http://shaar.li/feed/rss', true, null);
|
|
new CachedPage(self::$testCacheDir, 'http://shaar.li/feed/atom', false, null);
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
|
|
/**
|
|
* Cache a page's content
|
|
*/
|
|
public function testCache()
|
|
{
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, true, null);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$page->cache('<p>Some content</p>');
|
|
$this->assertFileExists(self::$filename);
|
|
$this->assertEquals(
|
|
'<p>Some content</p>',
|
|
file_get_contents(self::$filename)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* "Cache" a page's content - the page is not to be cached
|
|
*/
|
|
public function testShouldNotCache()
|
|
{
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, false, null);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$page->cache('<p>Some content</p>');
|
|
$this->assertFileNotExists(self::$filename);
|
|
}
|
|
|
|
/**
|
|
* Return a page's cached content
|
|
*/
|
|
public function testCachedVersion()
|
|
{
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, true, null);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$page->cache('<p>Some content</p>');
|
|
$this->assertFileExists(self::$filename);
|
|
$this->assertEquals(
|
|
'<p>Some content</p>',
|
|
$page->cachedVersion()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return a page's cached content - the file does not exist
|
|
*/
|
|
public function testCachedVersionNoFile()
|
|
{
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, true, null);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$this->assertEquals(
|
|
null,
|
|
$page->cachedVersion()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return a page's cached content - the page is not to be cached
|
|
*/
|
|
public function testNoCachedVersion()
|
|
{
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, false, null);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$this->assertEquals(
|
|
null,
|
|
$page->cachedVersion()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return a page's cached content within date period
|
|
*/
|
|
public function testCachedVersionInDatePeriod()
|
|
{
|
|
$period = new \DatePeriod(
|
|
new \DateTime('yesterday'),
|
|
new \DateInterval('P1D'),
|
|
new \DateTime('tomorrow')
|
|
);
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, true, $period);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$page->cache('<p>Some content</p>');
|
|
$this->assertFileExists(self::$filename);
|
|
$this->assertEquals(
|
|
'<p>Some content</p>',
|
|
$page->cachedVersion()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return a page's cached content outside of date period
|
|
*/
|
|
public function testCachedVersionNotInDatePeriod()
|
|
{
|
|
$period = new \DatePeriod(
|
|
new \DateTime('yesterday noon'),
|
|
new \DateInterval('P1D'),
|
|
new \DateTime('yesterday midnight')
|
|
);
|
|
$page = new CachedPage(self::$testCacheDir, self::$url, true, $period);
|
|
|
|
$this->assertFileNotExists(self::$filename);
|
|
$page->cache('<p>Some content</p>');
|
|
$this->assertFileExists(self::$filename);
|
|
$this->assertNull($page->cachedVersion());
|
|
}
|
|
}
|