Add dedicated show/edit pages for cloud provider tokens and cloud-init scripts, including descriptions and UUID routes. Generate private keys directly from the index and surface cloud provider API loading errors in server creation flows.
122 lines
4 KiB
PHP
122 lines
4 KiB
PHP
<?php
|
|
|
|
use App\Livewire\Security\CloudInitScript\Show;
|
|
use App\Livewire\Security\CloudInitScriptForm;
|
|
use App\Livewire\Security\CloudInitScripts;
|
|
use App\Models\CloudInitScript;
|
|
use App\Models\InstanceSettings;
|
|
use App\Models\Team;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Once;
|
|
use Livewire\Livewire;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
beforeEach(function () {
|
|
InstanceSettings::unguarded(fn () => InstanceSettings::query()->create([
|
|
'id' => 0,
|
|
]));
|
|
|
|
Once::flush();
|
|
|
|
$this->team = Team::factory()->create();
|
|
$this->user = User::factory()->create();
|
|
$this->team->members()->attach($this->user->id, ['role' => 'owner']);
|
|
|
|
$this->actingAs($this->user);
|
|
session(['currentTeam' => $this->team]);
|
|
});
|
|
|
|
test('cloud-init scripts page lists every supported cloud provider integration', function () {
|
|
Livewire::test(CloudInitScripts::class)
|
|
->assertSee('Hetzner')
|
|
->assertSee('Vultr')
|
|
->assertSee('DigitalOcean')
|
|
->assertDontSee('Currently working only with Hetzner');
|
|
});
|
|
|
|
test('cloud-init script form does not show a cancel button in the modal', function () {
|
|
Livewire::test(CloudInitScriptForm::class)
|
|
->assertSee('Create Script')
|
|
->assertDontSee('Cancel');
|
|
});
|
|
|
|
test('cloud-init script cards link to the script detail page without inline actions or created time', function () {
|
|
$script = CloudInitScript::query()->create([
|
|
'team_id' => $this->team->id,
|
|
'name' => 'Docker Host Setup',
|
|
'script' => "#cloud-config\npackages:\n - htop\n",
|
|
]);
|
|
|
|
Livewire::test(CloudInitScripts::class)
|
|
->assertSee('Docker Host Setup')
|
|
->assertSee(route('security.cloud-init-scripts.show', ['cloud_init_script_uuid' => $script->uuid]), false)
|
|
->assertDontSee('Created')
|
|
->assertDontSee('Edit')
|
|
->assertDontSee('Delete');
|
|
});
|
|
|
|
test('cloud-init script detail page shows editable script fields', function () {
|
|
$script = CloudInitScript::query()->create([
|
|
'team_id' => $this->team->id,
|
|
'name' => 'Docker Host Setup',
|
|
'script' => "#cloud-config\npackages:\n - htop\n",
|
|
]);
|
|
|
|
$this->get(route('security.cloud-init-scripts.show', ['cloud_init_script_uuid' => $script->uuid]))
|
|
->assertSuccessful()
|
|
->assertSee('Cloud-Init Script')
|
|
->assertSee('Docker Host Setup')
|
|
->assertSee('Save')
|
|
->assertSee('Delete');
|
|
});
|
|
|
|
test('cloud-init script detail page updates a script', function () {
|
|
$script = CloudInitScript::query()->create([
|
|
'team_id' => $this->team->id,
|
|
'name' => 'Docker Host Setup',
|
|
'script' => "#cloud-config\npackages:\n - htop\n",
|
|
]);
|
|
|
|
Livewire::test(Show::class, ['cloud_init_script_uuid' => $script->uuid])
|
|
->set('name', 'Updated Host Setup')
|
|
->set('script', "#cloud-config\npackages:\n - curl\n")
|
|
->call('save')
|
|
->assertHasNoErrors()
|
|
->assertDispatched('success');
|
|
|
|
$script->refresh();
|
|
|
|
expect($script->name)->toBe('Updated Host Setup')
|
|
->and($script->script)->toContain('curl');
|
|
});
|
|
|
|
test('cloud-init script detail page deletes a script', function () {
|
|
$script = CloudInitScript::query()->create([
|
|
'team_id' => $this->team->id,
|
|
'name' => 'Docker Host Setup',
|
|
'script' => "#cloud-config\npackages:\n - htop\n",
|
|
]);
|
|
|
|
Livewire::test(Show::class, ['cloud_init_script_uuid' => $script->uuid])
|
|
->call('delete')
|
|
->assertRedirectToRoute('security.cloud-init-scripts');
|
|
|
|
$this->assertModelMissing($script);
|
|
});
|
|
|
|
test('cloud-init scripts page backfills missing script uuids before rendering links', function () {
|
|
$script = CloudInitScript::query()->create([
|
|
'team_id' => $this->team->id,
|
|
'name' => 'Legacy Script',
|
|
'script' => "#cloud-config\npackages:\n - htop\n",
|
|
]);
|
|
|
|
CloudInitScript::query()->whereKey($script->id)->update(['uuid' => null]);
|
|
|
|
Livewire::test(CloudInitScripts::class)
|
|
->assertSee('Legacy Script');
|
|
|
|
expect($script->refresh()->uuid)->not->toBeNull();
|
|
});
|