61 lines
2.5 KiB
PHP
61 lines
2.5 KiB
PHP
<?php // tests/Feature/Security/SecurityPageTest.php
|
|
|
|
use App\Livewire\Security;
|
|
use App\Models\Customer;
|
|
use App\Models\Instance;
|
|
use App\Models\SecurityBlock;
|
|
use Livewire\Livewire;
|
|
|
|
// Abweichung vom Auftragszettel: Customer::factory()->create() verknuepft
|
|
// keinen User (user_id bleibt NULL, siehe CustomerFactory) — jeder bestehende
|
|
// Test, der einen Kunden anmeldet, ruft dafuer ensureUser() (Muster:
|
|
// tests/Feature/CustomerTwoFactorTest.php::portalUser()). Der RUECKGABEWERT
|
|
// wird gebraucht, nicht $customer->user danach: ensureUser() selbst liest
|
|
// $this->user als ersten Schritt ("if ($this->user) return $this->user;"),
|
|
// bevor user_id gesetzt ist — das cacht die Beziehung als null, und ein
|
|
// spaeteres update() raeumt einen bereits geladenen Beziehungs-Cache nicht
|
|
// weg. $customer->user bliebe also null, obwohl user_id laengst gesetzt ist.
|
|
|
|
it('zeigt dem Inhaber die Sperren seiner eigenen Instanz', function () {
|
|
$customer = Customer::factory()->create();
|
|
$user = $customer->ensureUser();
|
|
$instance = Instance::factory()->for($customer)->create();
|
|
$block = SecurityBlock::factory()->for($instance)->create(['ip' => '203.0.113.7']);
|
|
|
|
Livewire::actingAs($user)->test(Security::class)->assertSee('203.0.113.7');
|
|
});
|
|
|
|
it('zeigt einem Inhaber die Sperren eines FREMDEN Kunden nicht', function () {
|
|
$meine = Customer::factory()->create();
|
|
$user = $meine->ensureUser();
|
|
$fremde = Instance::factory()->create();
|
|
SecurityBlock::factory()->for($fremde)->create(['ip' => '198.51.100.9']);
|
|
|
|
Livewire::actingAs($user)->test(Security::class)->assertDontSee('198.51.100.9');
|
|
});
|
|
|
|
it('laesst einen Inhaber eine fremde Sperre nicht aufheben', function () {
|
|
$meine = Customer::factory()->create();
|
|
$user = $meine->ensureUser();
|
|
$fremd = SecurityBlock::factory()->for(Instance::factory()->create())->create();
|
|
|
|
Livewire::actingAs($user)->test(Security::class)
|
|
->call('onReleaseConfirmed', $fremd->uuid)
|
|
->assertForbidden();
|
|
|
|
expect($fremd->fresh()->released_at)->toBeNull();
|
|
});
|
|
|
|
it('hebt eine eigene Sperre auf und traegt ein, wer es war', function () {
|
|
$customer = Customer::factory()->create();
|
|
$user = $customer->ensureUser();
|
|
$instance = Instance::factory()->for($customer)->create();
|
|
$block = SecurityBlock::factory()->for($instance)->create();
|
|
|
|
Livewire::actingAs($user)->test(Security::class)
|
|
->call('onReleaseConfirmed', $block->uuid);
|
|
|
|
expect($block->fresh()->released_at)->not->toBeNull()
|
|
->and($block->fresh()->released_by_id)->toBe($user->id);
|
|
});
|