Plugins base (#613)

* wip

* wip

* cleanup

* notification channels

* phpstan

* services

* remove server types

* refactoring

* refactoring
This commit is contained in:
Saeed Vaziry
2025-06-14 14:35:18 +02:00
committed by GitHub
parent adc0653d15
commit 131b828807
311 changed files with 3976 additions and 2660 deletions

View File

@ -2,7 +2,11 @@
namespace Tests\Feature\API;
use App\Enums\ServerProvider;
use App\Models\ServerProvider;
use App\ServerProviders\DigitalOcean;
use App\ServerProviders\Hetzner;
use App\ServerProviders\Linode;
use App\ServerProviders\Vultr;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Laravel\Sanctum\Sanctum;
@ -70,8 +74,8 @@ public function test_see_providers_list(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var \App\Models\ServerProvider $provider */
$provider = \App\Models\ServerProvider::factory()->create([
/** @var ServerProvider $provider */
$provider = ServerProvider::factory()->create([
'user_id' => $this->user->id,
]);
@ -90,8 +94,8 @@ public function test_delete_provider(string $provider): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var \App\Models\ServerProvider $provider */
$provider = \App\Models\ServerProvider::factory()->create([
/** @var ServerProvider $provider */
$provider = ServerProvider::factory()->create([
'user_id' => $this->user->id,
'provider' => $provider,
]);
@ -108,8 +112,8 @@ public function test_cannot_delete_provider(string $provider): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var \App\Models\ServerProvider $provider */
$provider = \App\Models\ServerProvider::factory()->create([
/** @var ServerProvider $provider */
$provider = ServerProvider::factory()->create([
'user_id' => $this->user->id,
'provider' => $provider,
]);
@ -141,32 +145,32 @@ public static function data(): array
// ],
// ],
[
ServerProvider::LINODE,
Linode::id(),
[
'token' => 'token',
],
],
[
ServerProvider::LINODE,
Linode::id(),
[
'token' => 'token',
'global' => 1,
],
],
[
ServerProvider::DIGITALOCEAN,
DigitalOcean::id(),
[
'token' => 'token',
],
],
[
ServerProvider::VULTR,
Vultr::id(),
[
'token' => 'token',
],
],
[
ServerProvider::HETZNER,
Hetzner::id(),
[
'token' => 'token',
],

View File

@ -2,12 +2,9 @@
namespace Tests\Feature\API;
use App\Enums\Database;
use App\Enums\OperatingSystem;
use App\Enums\ServerProvider;
use App\Enums\ServerType;
use App\Enums\Webserver;
use App\Facades\SSH;
use App\ServerProviders\Custom;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
@ -52,44 +49,15 @@ public function test_create_server(): void
$this->json('POST', route('api.projects.servers.create', [
'project' => $this->user->current_project_id,
]), [
'provider' => ServerProvider::CUSTOM,
'provider' => Custom::id(),
'name' => 'test',
'ip' => '1.1.1.1',
'port' => '22',
'os' => OperatingSystem::UBUNTU22,
'webserver' => Webserver::NGINX,
'database' => Database::MYSQL80,
'php' => '8.2',
])
->assertSuccessful()
->assertJsonFragment([
'name' => 'test',
'type' => ServerType::REGULAR,
]);
}
public function test_create_server_with_caddy(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
SSH::fake('Active: active'); // fake output for service installations
$this->json('POST', route('api.projects.servers.create', [
'project' => $this->user->current_project_id,
]), [
'provider' => ServerProvider::CUSTOM,
'name' => 'test',
'ip' => '1.1.1.1',
'port' => '22',
'os' => OperatingSystem::UBUNTU22,
'webserver' => Webserver::CADDY,
'database' => Database::MYSQL80,
'php' => '8.2',
])
->assertSuccessful()
->assertJsonFragment([
'name' => 'test',
'type' => ServerType::REGULAR,
]);
}

View File

@ -4,10 +4,11 @@
use App\Enums\DeploymentStatus;
use App\Enums\LoadBalancerMethod;
use App\Enums\SourceControl;
use App\Facades\SSH;
use App\Models\Server;
use App\Models\Site;
use App\Models\SourceControl;
use App\SourceControlProviders\Github;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Laravel\Sanctum\Sanctum;
@ -42,9 +43,9 @@ public function test_create_site(array $inputs): void
Sanctum::actingAs($this->user, ['read', 'write']);
/** @var \App\Models\SourceControl $sourceControl */
$sourceControl = \App\Models\SourceControl::factory()->create([
'provider' => SourceControl::GITHUB,
/** @var SourceControl $sourceControl */
$sourceControl = SourceControl::factory()->create([
'provider' => Github::id(),
]);
$inputs['source_control'] = $sourceControl->id;

View File

@ -3,6 +3,9 @@
namespace Tests\Feature\API;
use App\Models\SourceControl;
use App\SourceControlProviders\Bitbucket;
use App\SourceControlProviders\Github;
use App\SourceControlProviders\Gitlab;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Laravel\Sanctum\Sanctum;
@ -137,11 +140,11 @@ public function test_edit_source_control(string $provider, array $input): void
public static function data(): array
{
return [
['github', ['token' => 'test']],
['github', ['token' => 'test', 'global' => '1']],
['gitlab', ['token' => 'test']],
['gitlab', ['token' => 'test', 'url' => 'https://git.example.com/']],
['bitbucket', ['username' => 'test', 'password' => 'test']],
[Github::id(), ['token' => 'test']],
[Github::id(), ['token' => 'test', 'global' => '1']],
[Gitlab::id(), ['token' => 'test']],
[Gitlab::id(), ['token' => 'test', 'url' => 'https://git.example.com/']],
[Bitbucket::id(), ['username' => 'test', 'password' => 'test']],
];
}
}

View File

@ -2,11 +2,12 @@
namespace Tests\Feature\API;
use App\Enums\StorageProvider;
use App\Facades\FTP;
use App\Models\Backup;
use App\Models\Database;
use App\Models\StorageProvider as StorageProviderModel;
use App\StorageProviders\Dropbox;
use App\StorageProviders\Local;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Laravel\Sanctum\Sanctum;
@ -25,11 +26,11 @@ public function test_create(array $input): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
if ($input['provider'] === StorageProvider::DROPBOX) {
if ($input['provider'] === Dropbox::id()) {
Http::fake();
}
if ($input['provider'] === StorageProvider::FTP) {
if ($input['provider'] === \App\StorageProviders\FTP::id()) {
FTP::fake();
}
@ -50,7 +51,7 @@ public function test_see_providers_list(): void
/** @var StorageProviderModel $provider */
$provider = StorageProviderModel::factory()->create([
'user_id' => $this->user->id,
'provider' => StorageProvider::DROPBOX,
'provider' => Dropbox::id(),
]);
$this->json('GET', route('api.projects.storage-providers', [
@ -115,14 +116,14 @@ public static function createData(): array
return [
[
[
'provider' => StorageProvider::LOCAL,
'provider' => Local::id(),
'name' => 'local-test',
'path' => '/home/vito/backups',
],
],
[
[
'provider' => StorageProvider::LOCAL,
'provider' => Local::id(),
'name' => 'local-test',
'path' => '/home/vito/backups',
'global' => 1,
@ -130,7 +131,7 @@ public static function createData(): array
],
[
[
'provider' => StorageProvider::FTP,
'provider' => \App\StorageProviders\FTP::id(),
'name' => 'ftp-test',
'host' => '1.2.3.4',
'port' => '22',
@ -143,7 +144,7 @@ public static function createData(): array
],
[
[
'provider' => StorageProvider::FTP,
'provider' => \App\StorageProviders\FTP::id(),
'name' => 'ftp-test',
'host' => '1.2.3.4',
'port' => '22',
@ -157,14 +158,14 @@ public static function createData(): array
],
[
[
'provider' => StorageProvider::DROPBOX,
'provider' => Dropbox::id(),
'name' => 'dropbox-test',
'token' => 'token',
],
],
[
[
'provider' => StorageProvider::DROPBOX,
'provider' => Dropbox::id(),
'name' => 'dropbox-test',
'token' => 'token',
'global' => 1,