diff --git a/php-packages/testing/src/integration/Extend/BeginTransactionAndSetDatabase.php b/php-packages/testing/src/integration/Extend/BeginTransactionAndSetDatabase.php new file mode 100644 index 000000000..cc088686f --- /dev/null +++ b/php-packages/testing/src/integration/Extend/BeginTransactionAndSetDatabase.php @@ -0,0 +1,30 @@ +setDbOnTestCase = $setDbOnTestCase; + } + + public function extend(Container $container, Extension $extension = null) + { + $db = $container->make(ConnectionInterface::class); + + $db->beginTransaction(); + + ($this->setDbOnTestCase)($db); + } +} diff --git a/php-packages/testing/src/integration/TestCase.php b/php-packages/testing/src/integration/TestCase.php index d54a90a37..68896d443 100644 --- a/php-packages/testing/src/integration/TestCase.php +++ b/php-packages/testing/src/integration/TestCase.php @@ -13,6 +13,7 @@ use Flarum\Extend\ExtenderInterface; use Flarum\Foundation\Config; use Flarum\Foundation\InstalledSite; use Flarum\Foundation\Paths; +use Flarum\Testing\integration\Extend\BeginTransactionAndSetDatabase; use Flarum\Testing\integration\Extend\OverrideExtensionManagerForTests; use Flarum\Testing\integration\Extend\SetSettingsBeforeBoot; use Illuminate\Database\ConnectionInterface; @@ -61,6 +62,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase $extenders = array_merge([ new OverrideExtensionManagerForTests($this->extensions), + new BeginTransactionAndSetDatabase(function (ConnectionInterface $db) { + $this->database = $db; + }), new SetSettingsBeforeBoot($this->settings), ], $this->extenders); @@ -150,12 +154,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase protected function database(): ConnectionInterface { - if (is_null($this->database)) { - $this->database = $this->app()->getContainer()->make( - ConnectionInterface::class - ); - } - + // Set in `BeginTransactionAndSetDatabase` extender. return $this->database; } diff --git a/php-packages/testing/tests/tests/integration/TestCaseTest.php b/php-packages/testing/tests/tests/integration/TestCaseTest.php index 374cd5db3..eb4e2f53e 100644 --- a/php-packages/testing/tests/tests/integration/TestCaseTest.php +++ b/php-packages/testing/tests/tests/integration/TestCaseTest.php @@ -46,6 +46,17 @@ class TestCaseTest extends TestCase $this->assertEquals('something_other_than_username', $settings->get('display_name_driver')); } + /** + * @test + */ + public function settings_cleaned_up_from_previous_method() + { + $settings = $this->app()->getContainer()->make(SettingsRepositoryInterface::class); + + $this->assertEquals(null, $settings->get('hello')); + $this->assertEquals(null, $settings->get('display_name_driver')); + } + /** * @test */