68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
||
|
||
use App\Models\Cluster;
|
||
use App\Models\User;
|
||
use function Pest\Laravel\actingAs;
|
||
use function Pest\Laravel\get;
|
||
use function Pest\Livewire\livewire;
|
||
|
||
it('redirects guests to login', function () {
|
||
get(route('clusters.create'))->assertRedirect(route('login'));
|
||
});
|
||
|
||
it('renders step 1 chrome', function () {
|
||
$user = User::factory()->create(['email_verified_at' => now()]);
|
||
|
||
actingAs($user)->get(route('clusters.create'))
|
||
->assertStatus(200)
|
||
->assertSeeText('Cluster anlegen')
|
||
->assertSeeText('Basis')
|
||
->assertSeeText('Cluster Name')
|
||
->assertSeeText('Environment')
|
||
->assertSeeText('Zusammenfassung');
|
||
});
|
||
|
||
it('walks through 4 steps', function () {
|
||
livewire('pages.clusters.create')
|
||
->assertSet('step', 1)
|
||
->set('name', 'Prod Acme')
|
||
->call('nextStep')
|
||
->assertSet('step', 2)
|
||
->call('nextStep')
|
||
->assertSet('step', 3)
|
||
->call('nextStep')
|
||
->assertSet('step', 4)
|
||
->assertSeeText('Review')
|
||
->call('prevStep')
|
||
->assertSet('step', 3);
|
||
});
|
||
|
||
it('rejects an empty name on step 1', function () {
|
||
livewire('pages.clusters.create')
|
||
->set('name', '')
|
||
->call('nextStep')
|
||
->assertHasErrors('name')
|
||
->assertSet('step', 1);
|
||
});
|
||
|
||
it('creates the cluster on final step', function () {
|
||
livewire('pages.clusters.create')
|
||
->set('name', 'Wizard Created')
|
||
->set('env', 'staging')
|
||
->set('region', 'eu-west-1')
|
||
->set('size', 'large')
|
||
->set('nodes', 3)
|
||
->set('step', 4)
|
||
->call('create')
|
||
->assertRedirect(route('servers.index'));
|
||
|
||
expect(Cluster::where('name', 'Wizard Created')->exists())->toBeTrue();
|
||
});
|
||
|
||
it('computes monthly price from size × nodes', function () {
|
||
$c = livewire('pages.clusters.create')
|
||
->set('size', 'small')
|
||
->set('nodes', 4);
|
||
expect($c->get('monthlyPrice'))->toBe(196);
|
||
});
|