mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-29 04:10:09 +08:00
Added initial support for parallel testing
This commit is contained in:
parent
aec772c5eb
commit
e18033ec1a
|
@ -17,7 +17,9 @@ use GuzzleHttp\Client;
|
||||||
use Illuminate\Contracts\Cache\Repository;
|
use Illuminate\Contracts\Cache\Repository;
|
||||||
use Illuminate\Database\Eloquent\Relations\Relation;
|
use Illuminate\Database\Eloquent\Relations\Relation;
|
||||||
use Illuminate\Pagination\Paginator;
|
use Illuminate\Pagination\Paginator;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
|
use Illuminate\Support\Facades\ParallelTesting;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\Facades\URL;
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Support\Facades\View;
|
use Illuminate\Support\Facades\View;
|
||||||
|
@ -64,6 +66,11 @@ class AppServiceProvider extends ServiceProvider
|
||||||
|
|
||||||
// Set paginator to use bootstrap-style pagination
|
// Set paginator to use bootstrap-style pagination
|
||||||
Paginator::useBootstrap();
|
Paginator::useBootstrap();
|
||||||
|
|
||||||
|
// Setup database upon parallel testing database creation
|
||||||
|
ParallelTesting::setUpTestDatabase(function ($database, $token) {
|
||||||
|
Artisan::call('db:seed --class=DummyContentSeeder');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
"ssddanbrown/htmldiff": "^1.0.2"
|
"ssddanbrown/htmldiff": "^1.0.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"brianium/paratest": "^6.6",
|
||||||
"fakerphp/faker": "^1.16",
|
"fakerphp/faker": "^1.16",
|
||||||
"itsgoingd/clockwork": "^5.1",
|
"itsgoingd/clockwork": "^5.1",
|
||||||
"mockery/mockery": "^1.4",
|
"mockery/mockery": "^1.4",
|
||||||
|
|
|
@ -252,6 +252,7 @@ export function build(options) {
|
||||||
document_base_url: window.baseUrl('/'),
|
document_base_url: window.baseUrl('/'),
|
||||||
end_container_on_empty_block: true,
|
end_container_on_empty_block: true,
|
||||||
remove_trailing_brs: false,
|
remove_trailing_brs: false,
|
||||||
|
keep_styles: false,
|
||||||
statusbar: false,
|
statusbar: false,
|
||||||
menubar: false,
|
menubar: false,
|
||||||
paste_data_images: false,
|
paste_data_images: false,
|
||||||
|
|
|
@ -26,6 +26,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Env;
|
use Illuminate\Support\Env;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Testing\Assert as PHPUnit;
|
use Illuminate\Testing\Assert as PHPUnit;
|
||||||
use Monolog\Handler\TestHandler;
|
use Monolog\Handler\TestHandler;
|
||||||
|
@ -299,6 +300,8 @@ abstract class TestCase extends BaseTestCase
|
||||||
/**
|
/**
|
||||||
* Run a set test with the given env variable.
|
* Run a set test with the given env variable.
|
||||||
* Remembers the original and resets the value after test.
|
* 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)
|
protected function runWithEnv(string $name, $value, callable $callback)
|
||||||
{
|
{
|
||||||
|
@ -311,7 +314,12 @@ abstract class TestCase extends BaseTestCase
|
||||||
$_SERVER[$name] = $value;
|
$_SERVER[$name] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$database = config('database.connections.mysql_testing.database');
|
||||||
$this->refreshApplication();
|
$this->refreshApplication();
|
||||||
|
|
||||||
|
DB::purge();
|
||||||
|
config()->set('database.connections.mysql_testing.database', $database);
|
||||||
|
|
||||||
$callback();
|
$callback();
|
||||||
|
|
||||||
if (is_null($originalVal)) {
|
if (is_null($originalVal)) {
|
||||||
|
|
|
@ -322,8 +322,8 @@ class ThemeTest extends TestCase
|
||||||
|
|
||||||
public function test_export_body_start_and_end_template_files_can_be_used()
|
public function test_export_body_start_and_end_template_files_can_be_used()
|
||||||
{
|
{
|
||||||
$bodyStartStr = 'barry-fought-against-the-panther';
|
$bodyStartStr = 'garry-fought-against-the-panther';
|
||||||
$bodyEndStr = 'barry-lost-his-fight-with-grace';
|
$bodyEndStr = 'garry-lost-his-fight-with-grace';
|
||||||
/** @var Page $page */
|
/** @var Page $page */
|
||||||
$page = Page::query()->first();
|
$page = Page::query()->first();
|
||||||
|
|
||||||
|
@ -342,18 +342,18 @@ class ThemeTest extends TestCase
|
||||||
protected function usingThemeFolder(callable $callback)
|
protected function usingThemeFolder(callable $callback)
|
||||||
{
|
{
|
||||||
// Create a folder and configure a theme
|
// 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);
|
config()->set('view.theme', $themeFolderName);
|
||||||
$themeFolderPath = theme_path('');
|
$themeFolderPath = theme_path('');
|
||||||
|
|
||||||
|
// Create theme folder and clean it up on application tear-down
|
||||||
File::makeDirectory($themeFolderPath);
|
File::makeDirectory($themeFolderPath);
|
||||||
|
$this->beforeApplicationDestroyed(fn() => File::deleteDirectory($themeFolderPath));
|
||||||
|
|
||||||
// Run provided callback with theme env option set
|
// Run provided callback with theme env option set
|
||||||
$this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) {
|
$this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) {
|
||||||
call_user_func($callback, $themeFolderName);
|
call_user_func($callback, $themeFolderName);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Cleanup the custom theme folder we created
|
|
||||||
File::deleteDirectory($themeFolderPath);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user