vito/tests/Unit/Actions/Service/InstallTest.php
Saeed Vaziry 052e28d2e3
Monitoring & Service Management (#163)
Monitoring & Service Management
2024-04-13 11:47:56 +02:00

157 lines
4.3 KiB
PHP

<?php
namespace Tests\Unit\Actions\Service;
use App\Actions\Service\Install;
use App\Enums\ServiceStatus;
use App\Facades\SSH;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Illuminate\Validation\ValidationException;
use Tests\TestCase;
class InstallTest extends TestCase
{
use RefreshDatabase;
public function test_install_vito_agent(): void
{
SSH::fake('Active: active');
Http::fake([
'https://api.github.com/repos/vitodeploy/agent/tags' => Http::response([['name' => '0.1.0']]),
]);
$service = app(Install::class)->install($this->server, [
'type' => 'monitoring',
'name' => 'vito-agent',
'version' => 'latest',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'vito-agent',
'type' => 'monitoring',
'version' => '0.1.0',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
public function test_install_vito_agent_failed(): void
{
$this->expectExceptionMessage('Failed to fetch tags');
SSH::fake('Active: inactive');
Http::fake([
'https://api.github.com/repos/vitodeploy/agent/tags' => Http::response([]),
]);
app(Install::class)->install($this->server, [
'type' => 'monitoring',
'name' => 'vito-agent',
'version' => 'latest',
]);
}
public function test_install_nginx(): void
{
$this->server->webserver()->delete();
SSH::fake('Active: active');
$service = app(Install::class)->install($this->server, [
'type' => 'webserver',
'name' => 'nginx',
'version' => 'latest',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'nginx',
'type' => 'webserver',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
public function test_install_mysql(): void
{
$this->server->database()->delete();
SSH::fake('Active: active');
$service = app(Install::class)->install($this->server, [
'type' => 'database',
'name' => 'mysql',
'version' => '8.0',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'mysql',
'type' => 'database',
'version' => '8.0',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
public function test_install_mysql_failed(): void
{
$this->expectException(ValidationException::class);
app(Install::class)->install($this->server, [
'type' => 'database',
'name' => 'mysql',
'version' => '8.0',
]);
}
public function test_install_supervisor(): void
{
$this->server->processManager()->delete();
SSH::fake('Active: active');
$service = app(Install::class)->install($this->server, [
'type' => 'process_manager',
'name' => 'supervisor',
'version' => 'latest',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'supervisor',
'type' => 'process_manager',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
public function test_install_redis(): void
{
$this->server->memoryDatabase()->delete();
SSH::fake('Active: active');
$service = app(Install::class)->install($this->server, [
'type' => 'memory_database',
'name' => 'redis',
'version' => 'latest',
]);
$this->assertDatabaseHas('services', [
'server_id' => $this->server->id,
'name' => 'redis',
'type' => 'memory_database',
'version' => 'latest',
'status' => ServiceStatus::READY,
]);
$this->assertNotNull($service->type_data);
}
}