From 7b26b4a1f3e2c20df902893a87511fcbd1fd87be Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 26 Jan 2017 11:34:39 +1300 Subject: [PATCH] BUG Ensure that tests run with flush=1 clean Flushables BUG Restore opt-in flushing (regression from #4404) --- src/Dev/SapphireTest.php | 22 +++++++++++++++----- tests/php/Control/FlushRequestFilterTest.php | 6 +++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Dev/SapphireTest.php b/src/Dev/SapphireTest.php index d6b469b68..55ccfc92b 100644 --- a/src/Dev/SapphireTest.php +++ b/src/Dev/SapphireTest.php @@ -12,6 +12,7 @@ use SilverStripe\Control\Controller; use SilverStripe\Control\Director; use SilverStripe\Core\Config\Config; use SilverStripe\Core\ClassInfo; +use SilverStripe\Core\Flushable; use SilverStripe\Core\Injector\Injector; use SilverStripe\Core\Manifest\ClassManifest; use SilverStripe\Core\Manifest\ClassLoader; @@ -159,6 +160,12 @@ class SapphireTest extends PHPUnit_Framework_TestCase */ private $extensionsToReapply = array(), $extensionsToRemove = array(); + /** + * Check flushables on setupOnce() + * + * @var bool + */ + protected static $flushedFlushables = false; /** * Determines if unit tests are currently run, flag set during test bootstrap. @@ -379,6 +386,15 @@ class SapphireTest extends PHPUnit_Framework_TestCase // Set default timezone consistently to avoid NZ-specific dependencies date_default_timezone_set('UTC'); + + // Flush all flushable records + $flush = !empty($_GET['flush']); + if (!self::$flushedFlushables && $flush) { + self::$flushedFlushables = true; + foreach (ClassInfo::implementorsOf(Flushable::class) as $class) { + $class::flush(); + } + } } /** @@ -976,11 +992,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase */ public static function use_test_manifest() { - $flush = true; - if (isset($_GET['flush']) && $_GET['flush'] === '0') { - $flush = false; - } - + $flush = !empty($_GET['flush']); $classManifest = new ClassManifest( BASE_PATH, true, diff --git a/tests/php/Control/FlushRequestFilterTest.php b/tests/php/Control/FlushRequestFilterTest.php index 0785b86a3..c32de20db 100644 --- a/tests/php/Control/FlushRequestFilterTest.php +++ b/tests/php/Control/FlushRequestFilterTest.php @@ -2,20 +2,20 @@ namespace SilverStripe\Control\Tests; +use SilverStripe\Control\Tests\FlushRequestFilterTest\TestFlushable; use SilverStripe\Dev\FunctionalTest; class FlushRequestFilterTest extends FunctionalTest { - /** * Assert that classes that implement flushable are called */ public function testImplementorsAreCalled() { - $this->assertFalse(FlushRequestFilterTest\TestFlushable::$flushed); + TestFlushable::$flushed = false; $this->get('?flush=1'); - $this->assertTrue(FlushRequestFilterTest\TestFlushable::$flushed); + $this->assertTrue(TestFlushable::$flushed); } }