From e18033ec1ae181a8977d23d14090d0706f3cc05b Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 26 Sep 2022 21:25:32 +0100 Subject: [PATCH] Added initial support for parallel testing --- app/Providers/AppServiceProvider.php | 7 +++++++ composer.json | 1 + resources/js/wysiwyg/config.js | 1 + tests/TestCase.php | 8 ++++++++ tests/ThemeTest.php | 12 ++++++------ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3c1212e32..02c545db2 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -17,7 +17,9 @@ use GuzzleHttp\Client; use Illuminate\Contracts\Cache\Repository; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\ParallelTesting; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\View; @@ -64,6 +66,11 @@ class AppServiceProvider extends ServiceProvider // Set paginator to use bootstrap-style pagination Paginator::useBootstrap(); + + // Setup database upon parallel testing database creation + ParallelTesting::setUpTestDatabase(function ($database, $token) { + Artisan::call('db:seed --class=DummyContentSeeder'); + }); } /** diff --git a/composer.json b/composer.json index 64630833d..44bbf2b99 100644 --- a/composer.json +++ b/composer.json @@ -44,6 +44,7 @@ "ssddanbrown/htmldiff": "^1.0.2" }, "require-dev": { + "brianium/paratest": "^6.6", "fakerphp/faker": "^1.16", "itsgoingd/clockwork": "^5.1", "mockery/mockery": "^1.4", diff --git a/resources/js/wysiwyg/config.js b/resources/js/wysiwyg/config.js index 52c52592c..d2f813cfb 100644 --- a/resources/js/wysiwyg/config.js +++ b/resources/js/wysiwyg/config.js @@ -252,6 +252,7 @@ export function build(options) { document_base_url: window.baseUrl('/'), end_container_on_empty_block: true, remove_trailing_brs: false, + keep_styles: false, statusbar: false, menubar: false, paste_data_images: false, diff --git a/tests/TestCase.php b/tests/TestCase.php index f17d27a1a..0926b0dcc 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -26,6 +26,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; use Illuminate\Http\JsonResponse; use Illuminate\Support\Env; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Testing\Assert as PHPUnit; use Monolog\Handler\TestHandler; @@ -299,6 +300,8 @@ abstract class TestCase extends BaseTestCase /** * Run a set test with the given env variable. * Remembers the original and resets the value after test. + * Database config is juggled so the value can be restored when + * parallel testing are used, where multiple databases exist. */ protected function runWithEnv(string $name, $value, callable $callback) { @@ -311,7 +314,12 @@ abstract class TestCase extends BaseTestCase $_SERVER[$name] = $value; } + $database = config('database.connections.mysql_testing.database'); $this->refreshApplication(); + + DB::purge(); + config()->set('database.connections.mysql_testing.database', $database); + $callback(); if (is_null($originalVal)) { diff --git a/tests/ThemeTest.php b/tests/ThemeTest.php index e83758a95..ac4b35de2 100644 --- a/tests/ThemeTest.php +++ b/tests/ThemeTest.php @@ -322,8 +322,8 @@ class ThemeTest extends TestCase public function test_export_body_start_and_end_template_files_can_be_used() { - $bodyStartStr = 'barry-fought-against-the-panther'; - $bodyEndStr = 'barry-lost-his-fight-with-grace'; + $bodyStartStr = 'garry-fought-against-the-panther'; + $bodyEndStr = 'garry-lost-his-fight-with-grace'; /** @var Page $page */ $page = Page::query()->first(); @@ -342,18 +342,18 @@ class ThemeTest extends TestCase protected function usingThemeFolder(callable $callback) { // Create a folder and configure a theme - $themeFolderName = 'testing_theme_' . rtrim(base64_encode(time()), '='); + $themeFolderName = 'testing_theme_' . str_shuffle(rtrim(base64_encode(time()), '=')); config()->set('view.theme', $themeFolderName); $themeFolderPath = theme_path(''); + + // Create theme folder and clean it up on application tear-down File::makeDirectory($themeFolderPath); + $this->beforeApplicationDestroyed(fn() => File::deleteDirectory($themeFolderPath)); // Run provided callback with theme env option set $this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) { call_user_func($callback, $themeFolderName); }); - - // Cleanup the custom theme folder we created - File::deleteDirectory($themeFolderPath); } }