CluPilotCloud/tests/Feature/Admin/DatacenterTest.php

62 lines
2.1 KiB
PHP

<?php
use App\Livewire\Admin\Datacenters;
use App\Livewire\Admin\HostCreate;
use App\Models\Datacenter;
use App\Models\User;
use Livewire\Livewire;
// admin() helper is defined in HostManagementTest (global Pest function).
it('gates the datacenters page', function () {
$this->get(route('admin.datacenters'))->assertRedirect('/login');
$this->actingAs(User::factory()->create(['is_admin' => false]))->get(route('admin.datacenters'))->assertForbidden();
$this->actingAs(admin())->get(route('admin.datacenters'))->assertOk()->assertSee(__('datacenters.title'));
});
it('creates a datacenter', function () {
Livewire::actingAs(admin())
->test(Datacenters::class)
->set('code', 'NBG')
->set('name', 'Nürnberg')
->set('location', 'DE')
->call('save')
->assertHasNoErrors();
expect(Datacenter::query()->where('code', 'nbg')->where('name', 'Nürnberg')->exists())->toBeTrue();
});
it('rejects a duplicate datacenter code', function () {
Datacenter::query()->firstOrCreate(['code' => 'fsn'], ['name' => 'Falkenstein']);
Livewire::actingAs(admin())
->test(Datacenters::class)
->set('code', 'fsn')->set('name', 'Falkenstein')
->call('save')
->assertHasErrors(['code']);
});
it('toggles a datacenter active flag', function () {
$dc = Datacenter::factory()->create(['active' => true]);
Livewire::actingAs(admin())->test(Datacenters::class)->call('toggle', $dc->uuid);
expect($dc->fresh()->active)->toBeFalse();
});
it('offers only known datacenter codes when adding a host', function () {
Datacenter::query()->firstOrCreate(['code' => 'fsn'], ['name' => 'Falkenstein']);
// unknown code rejected
Livewire::actingAs(admin())
->test(HostCreate::class)
->set('name', 'pve-x')->set('datacenter', 'ghost')->set('public_ip', '203.0.113.5')->set('root_password', 'supersecret')
->call('save')
->assertHasErrors(['datacenter']);
// known code accepted (defaults to the first active datacenter on mount)
Livewire::actingAs(admin())
->test(HostCreate::class)
->assertSet('datacenter', 'fsn');
});