Get database unit tests back into passing shape

This commit is contained in:
Dane Everitt 2020-06-24 20:47:52 -07:00
parent 756a21ff04
commit a5d9faf6b2
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
4 changed files with 20 additions and 73 deletions

1
.gitignore vendored
View file

@ -32,3 +32,4 @@ coverage.xml
resources/lang/locales.js resources/lang/locales.js
resources/assets/pterodactyl/scripts/helpers/ziggy.js resources/assets/pterodactyl/scripts/helpers/ziggy.js
resources/assets/scripts/helpers/ziggy.js resources/assets/scripts/helpers/ziggy.js
.phpunit.result.cache

File diff suppressed because one or more lines are too long

View file

@ -51,13 +51,14 @@ class DatabasePasswordServiceTest extends TestCase
*/ */
public function testPasswordIsChanged() public function testPasswordIsChanged()
{ {
$model = factory(Database::class)->make(); /** @var \Pterodactyl\Models\Database $model */
$model = factory(Database::class)->make(['max_connections' => 0]);
$this->connection->expects('transaction')->with(m::on(function ($closure) { $this->connection->expects('transaction')->with(m::on(function ($closure) {
return is_null($closure()); return is_null($closure());
})); }));
$this->dynamic->shouldReceive('set')->with('dynamic', $model->database_host_id)->once()->andReturnNull(); $this->dynamic->expects('set')->with('dynamic', $model->database_host_id)->andReturnNull();
$this->encrypter->expects('encrypt')->with(m::on(function ($string) { $this->encrypter->expects('encrypt')->with(m::on(function ($string) {
preg_match_all('/[!@+=.^-]/', $string, $matches, PREG_SET_ORDER); preg_match_all('/[!@+=.^-]/', $string, $matches, PREG_SET_ORDER);
@ -67,13 +68,13 @@ class DatabasePasswordServiceTest extends TestCase
return true; return true;
}))->andReturn('enc123'); }))->andReturn('enc123');
$this->repository->shouldReceive('withoutFreshModel')->withNoArgs()->once()->andReturnSelf(); $this->repository->expects('withoutFreshModel')->withNoArgs()->andReturnSelf();
$this->repository->shouldReceive('update')->with($model->id, ['password' => 'enc123'])->once()->andReturn(true); $this->repository->expects('update')->with($model->id, ['password' => 'enc123'])->andReturn(true);
$this->repository->shouldReceive('dropUser')->with($model->username, $model->remote)->once()->andReturn(true); $this->repository->expects('dropUser')->with($model->username, $model->remote)->andReturn(true);
$this->repository->shouldReceive('createUser')->with($model->username, $model->remote, m::any())->once()->andReturn(true); $this->repository->expects('createUser')->with($model->username, $model->remote, m::any(), 0)->andReturn(true);
$this->repository->shouldReceive('assignUserToDatabase')->with($model->database, $model->username, $model->remote)->once()->andReturn(true); $this->repository->expects('assignUserToDatabase')->with($model->database, $model->username, $model->remote)->andReturn(true);
$this->repository->shouldReceive('flush')->withNoArgs()->once()->andReturn(true); $this->repository->expects('flush')->withNoArgs()->andReturn(true);
$response = $this->getService()->handle($model); $response = $this->getService()->handle($model);
$this->assertNotEmpty($response); $this->assertNotEmpty($response);

View file

@ -10,6 +10,7 @@ use Pterodactyl\Services\Databases\DatabaseManagementService;
use Pterodactyl\Services\Databases\DeployServerDatabaseService; use Pterodactyl\Services\Databases\DeployServerDatabaseService;
use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface; use Pterodactyl\Contracts\Repository\DatabaseRepositoryInterface;
use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface; use Pterodactyl\Contracts\Repository\DatabaseHostRepositoryInterface;
use Pterodactyl\Exceptions\Service\Database\NoSuitableDatabaseHostException;
class DeployServerDatabaseServiceTest extends TestCase class DeployServerDatabaseServiceTest extends TestCase
{ {
@ -51,16 +52,9 @@ class DeployServerDatabaseServiceTest extends TestCase
*/ */
public function testNonRandomFoundHost($limit, $count) public function testNonRandomFoundHost($limit, $count)
{ {
config()->set('pterodactyl.client_features.databases.allow_random', false);
$server = factory(Server::class)->make(['database_limit' => $limit]); $server = factory(Server::class)->make(['database_limit' => $limit]);
$model = factory(Database::class)->make(); $model = factory(Database::class)->make();
$this->repository->shouldReceive('findCountWhere')
->once()
->with([['server_id', '=', $server->id]])
->andReturn($count);
$this->databaseHostRepository->shouldReceive('setColumns->findWhere') $this->databaseHostRepository->shouldReceive('setColumns->findWhere')
->once() ->once()
->with([['node_id', '=', $server->node_id]]) ->with([['node_id', '=', $server->node_id]])
@ -68,7 +62,7 @@ class DeployServerDatabaseServiceTest extends TestCase
$this->managementService->shouldReceive('create') $this->managementService->shouldReceive('create')
->once() ->once()
->with($server->id, [ ->with($server, [
'database_host_id' => $model->id, 'database_host_id' => $model->id,
'database' => 'testdb', 'database' => 'testdb',
'remote' => null, 'remote' => null,
@ -83,25 +77,20 @@ class DeployServerDatabaseServiceTest extends TestCase
/** /**
* Test that an exception is thrown if in non-random mode and no host is found. * Test that an exception is thrown if in non-random mode and no host is found.
*
* @expectedException \Pterodactyl\Exceptions\Service\Database\NoSuitableDatabaseHostException
*/ */
public function testNonRandomNoHost() public function testNonRandomNoHost()
{ {
config()->set('pterodactyl.client_features.databases.allow_random', false); $this->expectException(NoSuitableDatabaseHostException::class);
$server = factory(Server::class)->make(['database_limit' => 1]); $server = factory(Server::class)->make(['database_limit' => 1]);
$this->repository->shouldReceive('findCountWhere')
->once()
->with([['server_id', '=', $server->id]])
->andReturn(0);
$this->databaseHostRepository->shouldReceive('setColumns->findWhere') $this->databaseHostRepository->shouldReceive('setColumns->findWhere')
->once() ->once()
->with([['node_id', '=', $server->node_id]]) ->with([['node_id', '=', $server->node_id]])
->andReturn(collect()); ->andReturn(collect());
$this->databaseHostRepository->expects('setColumns->all')->withNoArgs()->andReturn(collect());
$this->getService()->handle($server, []); $this->getService()->handle($server, []);
} }
@ -113,11 +102,6 @@ class DeployServerDatabaseServiceTest extends TestCase
$server = factory(Server::class)->make(['database_limit' => 1]); $server = factory(Server::class)->make(['database_limit' => 1]);
$model = factory(Database::class)->make(); $model = factory(Database::class)->make();
$this->repository->shouldReceive('findCountWhere')
->once()
->with([['server_id', '=', $server->id]])
->andReturn(0);
$this->databaseHostRepository->shouldReceive('setColumns->findWhere') $this->databaseHostRepository->shouldReceive('setColumns->findWhere')
->once() ->once()
->with([['node_id', '=', $server->node_id]]) ->with([['node_id', '=', $server->node_id]])
@ -129,7 +113,7 @@ class DeployServerDatabaseServiceTest extends TestCase
$this->managementService->shouldReceive('create') $this->managementService->shouldReceive('create')
->once() ->once()
->with($server->id, [ ->with($server, [
'database_host_id' => $model->id, 'database_host_id' => $model->id,
'database' => 'testdb', 'database' => 'testdb',
'remote' => null, 'remote' => null,
@ -144,60 +128,22 @@ class DeployServerDatabaseServiceTest extends TestCase
/** /**
* Test that an exception is thrown when no host is found and random is allowed. * Test that an exception is thrown when no host is found and random is allowed.
*
* @expectedException \Pterodactyl\Exceptions\Service\Database\NoSuitableDatabaseHostException
*/ */
public function testRandomNoHost() public function testRandomNoHost()
{ {
$this->expectException(NoSuitableDatabaseHostException::class);
$server = factory(Server::class)->make(['database_limit' => 1]); $server = factory(Server::class)->make(['database_limit' => 1]);
$this->repository->shouldReceive('findCountWhere') $this->databaseHostRepository->expects('setColumns->findWhere')
->once()
->with([['server_id', '=', $server->id]])
->andReturn(0);
$this->databaseHostRepository->shouldReceive('setColumns->findWhere')
->once()
->with([['node_id', '=', $server->node_id]]) ->with([['node_id', '=', $server->node_id]])
->andReturn(collect()); ->andReturn(collect());
$this->databaseHostRepository->shouldReceive('setColumns->all') $this->databaseHostRepository->expects('setColumns->all')->withNoArgs()->andReturn(collect());
->once()
->andReturn(collect());
$this->getService()->handle($server, []); $this->getService()->handle($server, []);
} }
/**
* Test that a server over the database limit throws an exception.
*
* @dataProvider databaseExceedingLimitDataProvider
* @expectedException \Pterodactyl\Exceptions\Service\Database\TooManyDatabasesException
*/
public function testServerOverDatabaseLimit($limit, $count)
{
$server = factory(Server::class)->make(['database_limit' => $limit]);
$this->repository->shouldReceive('findCountWhere')
->once()
->with([['server_id', '=', $server->id]])
->andReturn($count);
$this->getService()->handle($server, []);
}
/**
* Test that an exception is thrown if the feature is not enabled.
*
* @expectedException \Pterodactyl\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException
*/
public function testFeatureNotEnabled()
{
config()->set('pterodactyl.client_features.databases.enabled', false);
$this->getService()->handle(factory(Server::class)->make(), []);
}
/** /**
* Provide limits and current database counts for testing. * Provide limits and current database counts for testing.
* *