Start transactions before the app is fully booted. (#11)

This make a cleaner state more likely, and ensures that settings set via `$this->setting` are cleaned up after the test case runs.
This commit is contained in:
Alexander Skvortsov 2021-04-12 10:26:05 -04:00 committed by GitHub
parent 675627ac15
commit 76a869a198
3 changed files with 46 additions and 6 deletions

View File

@ -0,0 +1,30 @@
<?php
namespace Flarum\Testing\integration\Extend;
use Flarum\Extend\ExtenderInterface;
use Flarum\Extension\Extension;
use Illuminate\Contracts\Container\Container;
use Illuminate\Database\ConnectionInterface;
class BeginTransactionAndSetDatabase implements ExtenderInterface
{
/**
* A callback to set the database connection object on the test case.
*/
protected $setDbOnTestCase;
public function __construct(callable $setDbOnTestCase)
{
$this->setDbOnTestCase = $setDbOnTestCase;
}
public function extend(Container $container, Extension $extension = null)
{
$db = $container->make(ConnectionInterface::class);
$db->beginTransaction();
($this->setDbOnTestCase)($db);
}
}

View File

@ -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;
}

View File

@ -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
*/