From f21669c0c966f3dadeac2024a382b8a7cd831a8a Mon Sep 17 00:00:00 2001 From: Dan Brown <ssddanbrown@googlemail.com> Date: Tue, 27 Sep 2022 01:27:51 +0100 Subject: [PATCH] Cleaned testing service provider usage Moved testing content out of AppServiceProvider, to a testing-specific service provider. Updated docs and added composer commands to support parallel testing. Also reverted unintentional change to wysiwyg/config.js. --- app/Providers/AppServiceProvider.php | 7 ------- composer.json | 2 ++ readme.md | 9 ++------- resources/js/wysiwyg/config.js | 1 - tests/TestCase.php | 16 ++++++++++++++++ tests/TestServiceProvider.php | 26 ++++++++++++++++++++++++++ 6 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 tests/TestServiceProvider.php diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 02c545db2..3c1212e32 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -17,9 +17,7 @@ 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; @@ -66,11 +64,6 @@ 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 44bbf2b99..81896f8f8 100644 --- a/composer.json +++ b/composer.json @@ -74,6 +74,8 @@ "format": "phpcbf", "lint": "phpcs", "test": "phpunit", + "t": "@php artisan test --parallel", + "t-reset": "@php artisan test --recreate-databases", "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" diff --git a/readme.md b/readme.md index d0ae1b4f6..16992341d 100644 --- a/readme.md +++ b/readme.md @@ -108,14 +108,9 @@ npm run dev BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the database name, user name and password all defined as `bookstack-test`. You will have to create that database and that set of credentials before testing. -The testing database will also need migrating and seeding beforehand. This can be done with the following commands: +The testing database will also need migrating and seeding beforehand. This can be done by running `composer refresh-test-database`. -``` bash -php artisan migrate --database=mysql_testing -php artisan db:seed --class=DummyContentSeeder --database=mysql_testing -``` - -Once done you can run `composer test` in the application root directory to run all tests. +Once done you can run `composer test` in the application root directory to run all tests. Tests can be ran in parallel by running them via `composer t`. This will use Laravel's built-in parallel testing functionality, and attempt to create and seed a database instance for each testing thread. If required these parallel testing instances can be reset, before testing again, by running `composer t-reset`. ### 📜 Code Standards diff --git a/resources/js/wysiwyg/config.js b/resources/js/wysiwyg/config.js index d2f813cfb..52c52592c 100644 --- a/resources/js/wysiwyg/config.js +++ b/resources/js/wysiwyg/config.js @@ -252,7 +252,6 @@ 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 0926b0dcc..594194168 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -22,6 +22,7 @@ use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; +use Illuminate\Contracts\Console\Kernel; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; use Illuminate\Http\JsonResponse; @@ -48,6 +49,21 @@ abstract class TestCase extends BaseTestCase */ protected string $baseUrl = 'http://localhost'; + /** + * Creates the application. + * + * @return \Illuminate\Foundation\Application + */ + public function createApplication() + { + /** @var \Illuminate\Foundation\Application $app */ + $app = require __DIR__ . '/../bootstrap/app.php'; + $app->register(TestServiceProvider::class); + $app->make(Kernel::class)->bootstrap(); + + return $app; + } + /** * Set the current user context to be an admin. */ diff --git a/tests/TestServiceProvider.php b/tests/TestServiceProvider.php new file mode 100644 index 000000000..9ad48c442 --- /dev/null +++ b/tests/TestServiceProvider.php @@ -0,0 +1,26 @@ +<?php + +namespace Tests; + +use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\ParallelTesting; +use Illuminate\Support\ServiceProvider; + +class TestServiceProvider extends ServiceProvider +{ + /** + * Bootstrap services. + * + * @return void + */ + public function boot() + { + // Tell Laravel's parallel testing functionality to seed the test + // databases with the DummyContentSeeder upon creation. + // This is only done for initial database creation. Seeding + // won't occur on every run. + ParallelTesting::setUpTestDatabase(function ($database, $token) { + Artisan::call('db:seed --class=DummyContentSeeder'); + }); + } +}