mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
BUG Fix flushing of SSViewer cache via testing
This commit is contained in:
parent
97170dd42d
commit
793784e9d7
@ -128,18 +128,18 @@ class SSViewerCacheBlockTest extends SapphireTest {
|
|||||||
* Test that the cacheblocks invalidate when a flush occurs.
|
* Test that the cacheblocks invalidate when a flush occurs.
|
||||||
*/
|
*/
|
||||||
public function testBlocksInvalidateOnFlush() {
|
public function testBlocksInvalidateOnFlush() {
|
||||||
// Enable caching
|
Director::test('/?flush=1');
|
||||||
$this->_reset(true);
|
$this->_reset(true);
|
||||||
|
|
||||||
// This property must be false, or the flush won't occur. This can be affected by other tests
|
// Generate cached value for foo = 1
|
||||||
// if they trigger a flush via Flushable
|
|
||||||
$reflectionProp = new ReflectionProperty('SSViewer', 'cacheblock_cache_flushed');
|
|
||||||
$reflectionProp->setAccessible(true);
|
|
||||||
$reflectionProp->setValue(false);
|
|
||||||
|
|
||||||
$this->assertEquals($this->_runtemplate('<% cached %>$Foo<% end_cached %>', array('Foo' => 1)), '1');
|
$this->assertEquals($this->_runtemplate('<% cached %>$Foo<% end_cached %>', array('Foo' => 1)), '1');
|
||||||
|
|
||||||
SSViewer::flush_cacheblock_cache();
|
// Test without flush
|
||||||
|
Director::test('/');
|
||||||
|
$this->assertEquals($this->_runtemplate('<% cached %>$Foo<% end_cached %>', array('Foo' => 3)), '1');
|
||||||
|
|
||||||
|
// Test with flush
|
||||||
|
Director::test('/?flush=1');
|
||||||
$this->assertEquals($this->_runtemplate('<% cached %>$Foo<% end_cached %>', array('Foo' => 2)), '2');
|
$this->assertEquals($this->_runtemplate('<% cached %>$Foo<% end_cached %>', array('Foo' => 2)), '2');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,8 +652,8 @@ class SSViewer implements Flushable {
|
|||||||
* Triggered early in the request when someone requests a flush.
|
* Triggered early in the request when someone requests a flush.
|
||||||
*/
|
*/
|
||||||
public static function flush() {
|
public static function flush() {
|
||||||
self::flush_template_cache();
|
self::flush_template_cache(true);
|
||||||
self::flush_cacheblock_cache();
|
self::flush_cacheblock_cache(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -923,9 +923,12 @@ class SSViewer implements Flushable {
|
|||||||
* Clears all parsed template files in the cache folder.
|
* Clears all parsed template files in the cache folder.
|
||||||
*
|
*
|
||||||
* Can only be called once per request (there may be multiple SSViewer instances).
|
* Can only be called once per request (there may be multiple SSViewer instances).
|
||||||
|
*
|
||||||
|
* @param bool $force Set this to true to force a re-flush. If left to false, flushing
|
||||||
|
* may only be performed once a request.
|
||||||
*/
|
*/
|
||||||
public static function flush_template_cache() {
|
public static function flush_template_cache($force = false) {
|
||||||
if (!self::$template_cache_flushed) {
|
if (!self::$template_cache_flushed || $force) {
|
||||||
$dir = dir(TEMP_FOLDER);
|
$dir = dir(TEMP_FOLDER);
|
||||||
while (false !== ($file = $dir->read())) {
|
while (false !== ($file = $dir->read())) {
|
||||||
if (strstr($file, '.cache')) unlink(TEMP_FOLDER . '/' . $file);
|
if (strstr($file, '.cache')) unlink(TEMP_FOLDER . '/' . $file);
|
||||||
@ -938,9 +941,12 @@ class SSViewer implements Flushable {
|
|||||||
* Clears all partial cache blocks.
|
* Clears all partial cache blocks.
|
||||||
*
|
*
|
||||||
* Can only be called once per request (there may be multiple SSViewer instances).
|
* Can only be called once per request (there may be multiple SSViewer instances).
|
||||||
|
*
|
||||||
|
* @param bool $force Set this to true to force a re-flush. If left to false, flushing
|
||||||
|
* may only be performed once a request.
|
||||||
*/
|
*/
|
||||||
public static function flush_cacheblock_cache() {
|
public static function flush_cacheblock_cache($force = false) {
|
||||||
if (!self::$cacheblock_cache_flushed) {
|
if (!self::$cacheblock_cache_flushed || $force) {
|
||||||
$cache = SS_Cache::factory('cacheblock');
|
$cache = SS_Cache::factory('cacheblock');
|
||||||
$tags = $cache->getTags();
|
$tags = $cache->getTags();
|
||||||
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, $tags);
|
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, $tags);
|
||||||
|
Loading…
Reference in New Issue
Block a user