mirror of
https://github.com/flarum/framework.git
synced 2025-02-06 13:31:01 +08:00
Fix the test setup and installer tests
We are still testing the installation logic, but not testing the actual CLI task. I would love to do that, but IMO we first need to find a way to do this fully from the outside, by invoking and talking to the installer through the shell. Because acceptance tests are easier to do when fully decoupled from the application. (After all, they are intended to save us from breaking things when changing code; and we cannot prove that when we change the tests at the same time.) It might be easier to start with acceptance tests for the web installer, though.
This commit is contained in:
parent
f8430cda16
commit
3314a84b4e
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* (c) Toby Zerner <toby.zerner@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Tests\Install;
|
||||
|
||||
use Flarum\Install\Console\InstallCommand;
|
||||
use Flarum\Tests\Test\TestCase;
|
||||
use Illuminate\Database\Connectors\ConnectionFactory;
|
||||
use Symfony\Component\Console\Input\StringInput;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
|
||||
class DefaultInstallationCommandTest extends TestCase
|
||||
{
|
||||
protected $isInstalled = false;
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function allows_forum_installation()
|
||||
{
|
||||
if (file_exists(base_path('config.php'))) {
|
||||
unlink(base_path('config.php'));
|
||||
}
|
||||
|
||||
/** @var InstallCommand $command */
|
||||
$command = app(InstallCommand::class);
|
||||
$command->setDataSource($this->configuration);
|
||||
|
||||
$body = fopen('php://temp', 'wb+');
|
||||
$input = new StringInput('');
|
||||
$output = new StreamOutput($body);
|
||||
|
||||
$command->run($input, $output);
|
||||
|
||||
$this->assertFileExists(base_path('config.php'));
|
||||
|
||||
$admin = $this->configuration->getAdminUser();
|
||||
|
||||
$this->assertEquals(
|
||||
$this->getDatabase()->table('users')->find(1)->username,
|
||||
$admin['username']
|
||||
);
|
||||
}
|
||||
|
||||
private function getDatabase()
|
||||
{
|
||||
$factory = new ConnectionFactory(app());
|
||||
|
||||
return $factory->make($this->configuration->getDatabaseConfiguration());
|
||||
}
|
||||
}
|
91
framework/core/tests/Install/DefaultInstallationTest.php
Normal file
91
framework/core/tests/Install/DefaultInstallationTest.php
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* (c) Toby Zerner <toby.zerner@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Tests\Install;
|
||||
|
||||
use Flarum\Install\Installation;
|
||||
use Flarum\Tests\Test\TestCase;
|
||||
use Illuminate\Database\Connectors\ConnectionFactory;
|
||||
|
||||
class DefaultInstallationTest extends TestCase
|
||||
{
|
||||
protected $isInstalled = false;
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function allows_forum_installation()
|
||||
{
|
||||
if (file_exists(base_path('config.php'))) {
|
||||
unlink(base_path('config.php'));
|
||||
}
|
||||
|
||||
/** @var Installation $installation */
|
||||
$installation = app(Installation::class);
|
||||
|
||||
$installation
|
||||
->debugMode(true)
|
||||
->baseUrl('http://flarum.local')
|
||||
->databaseConfig($this->getDatabaseConfiguration())
|
||||
->adminUser($this->getAdmin())
|
||||
->settings($this->getSettings())
|
||||
->build()->run();
|
||||
|
||||
$this->assertFileExists(base_path('config.php'));
|
||||
|
||||
$admin = $this->getAdmin();
|
||||
|
||||
$this->assertEquals(
|
||||
$this->getDatabase()->table('users')->find(1)->username,
|
||||
$admin['username']
|
||||
);
|
||||
}
|
||||
|
||||
private function getDatabase()
|
||||
{
|
||||
$factory = new ConnectionFactory(app());
|
||||
|
||||
return $factory->make($this->getDatabaseConfiguration());
|
||||
}
|
||||
|
||||
private function getAdmin()
|
||||
{
|
||||
return [
|
||||
'username' => 'admin',
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password',
|
||||
'email' => 'admin@example.com',
|
||||
];
|
||||
}
|
||||
|
||||
private function getSettings()
|
||||
{
|
||||
return [
|
||||
'allow_post_editing' => 'reply',
|
||||
'allow_renaming' => '10',
|
||||
'allow_sign_up' => '1',
|
||||
'custom_less' => '',
|
||||
'default_locale' => 'en',
|
||||
'default_route' => '/all',
|
||||
'extensions_enabled' => '[]',
|
||||
'forum_title' => 'Development Forum',
|
||||
'forum_description' => '',
|
||||
'mail_driver' => 'log',
|
||||
'mail_from' => 'noreply@flarum.dev',
|
||||
'theme_colored_header' => '0',
|
||||
'theme_dark_mode' => '0',
|
||||
'theme_primary_color' => '#4D698E',
|
||||
'theme_secondary_color' => '#4D698E',
|
||||
'welcome_message' => 'This is beta software and you should not use it in production.',
|
||||
'welcome_title' => 'Welcome to Development Forum',
|
||||
];
|
||||
}
|
||||
}
|
|
@ -19,9 +19,10 @@ use Flarum\Foundation\SiteInterface;
|
|||
use Flarum\Foundation\UninstalledSite;
|
||||
use Flarum\Http\Server;
|
||||
use Flarum\Install\Console\DataProviderInterface;
|
||||
use Flarum\Install\Console\DefaultsDataProvider;
|
||||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Database\Connectors\ConnectionFactory;
|
||||
use Illuminate\Database\Connectors\MySqlConnector;
|
||||
use Illuminate\Database\MySqlConnection;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
|
||||
trait CreatesForum
|
||||
{
|
||||
|
@ -72,26 +73,24 @@ trait CreatesForum
|
|||
$this->app = $this->site->bootApp();
|
||||
}
|
||||
|
||||
protected function collectsConfiguration()
|
||||
protected function getDatabaseConfiguration()
|
||||
{
|
||||
$this->configuration = new DefaultsDataProvider();
|
||||
|
||||
$this->configuration->setDebugMode();
|
||||
$this->configuration->setSetting('mail_driver', 'log');
|
||||
|
||||
$database = $this->configuration->getDatabaseConfiguration();
|
||||
$database['host'] = env('DB_HOST', $database['host']);
|
||||
$database['database'] = env('DB_DATABASE', $database['database']);
|
||||
$database['username'] = env('DB_USERNAME', $database['username']);
|
||||
$database['password'] = env('DB_PASSWORD', $database['password']);
|
||||
$database['prefix'] = env('DB_PREFIX', $database['prefix']);
|
||||
$this->configuration->setDatabaseConfiguration($database);
|
||||
return [
|
||||
'driver' => 'mysql',
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'database' => env('DB_DATABASE', 'flarum'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => env('DB_PREFIX', ''),
|
||||
'port' => '3306',
|
||||
'strict' => false,
|
||||
];
|
||||
}
|
||||
|
||||
protected function refreshApplication()
|
||||
{
|
||||
$this->collectsConfiguration();
|
||||
|
||||
$this->seedsDatabase();
|
||||
|
||||
$this->createsSite();
|
||||
|
@ -108,23 +107,10 @@ trait CreatesForum
|
|||
|
||||
protected function getFlarumConfig()
|
||||
{
|
||||
$dbConfig = $this->configuration->getDatabaseConfiguration();
|
||||
|
||||
return [
|
||||
'debug' => $this->configuration->isDebugMode(),
|
||||
'database' => [
|
||||
'driver' => $dbConfig['driver'],
|
||||
'host' => $dbConfig['host'],
|
||||
'database' => $dbConfig['database'],
|
||||
'username' => $dbConfig['username'],
|
||||
'password' => $dbConfig['password'],
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => $dbConfig['prefix'],
|
||||
'port' => $dbConfig['port'],
|
||||
'strict' => false
|
||||
],
|
||||
'url' => $this->configuration->getBaseUrl(),
|
||||
'debug' => true,
|
||||
'database' => $this->getDatabaseConfiguration(),
|
||||
'url' => 'http://flarum.local',
|
||||
'paths' => [
|
||||
'api' => 'api',
|
||||
'admin' => 'admin',
|
||||
|
@ -138,13 +124,13 @@ trait CreatesForum
|
|||
return;
|
||||
}
|
||||
|
||||
$app = app(\Illuminate\Contracts\Foundation\Application::class);
|
||||
$dbConfig = $this->getDatabaseConfiguration();
|
||||
|
||||
$factory = new ConnectionFactory($app);
|
||||
$db = $factory->make($this->configuration->getDatabaseConfiguration());
|
||||
$pdo = (new MySqlConnector)->connect($dbConfig);
|
||||
$db = new MySqlConnection($pdo, $dbConfig['database'], $dbConfig['prefix'], $dbConfig);
|
||||
|
||||
$repository = new DatabaseMigrationRepository($db, 'migrations');
|
||||
$migrator = new Migrator($repository, $db, app('files'));
|
||||
$migrator = new Migrator($repository, $db, new Filesystem);
|
||||
|
||||
if (! $migrator->getRepository()->repositoryExists()) {
|
||||
$migrator->getRepository()->createRepository();
|
||||
|
|
Loading…
Reference in New Issue
Block a user