66 lines
2.8 KiB
PHP
66 lines
2.8 KiB
PHP
<?php
|
|
|
|
use App\Livewire\Admin\Integrations;
|
|
use App\Models\Operator;
|
|
use App\Support\OperatingMode;
|
|
use Livewire\Livewire;
|
|
|
|
// Die Rollen heißen exakt so (Operator::OPERATOR_ROLES), und die Fabrik setzt
|
|
// sie über ->role(), nicht über eine ->owner()-Abkürzung. Das Testpasswort ist
|
|
// `passwort-fuer-tests` — OperatorFactory::definition().
|
|
//
|
|
// ZWEI PLAN-FEHLER (Brief/Plan wörtlich übernommen, hier korrigiert):
|
|
//
|
|
// 1. Livewire::actingAs() ohne den zweiten Parameter meldet nur den
|
|
// 'web'-Guard an — genau die Falle, die tests/Pest.php oben bereits für
|
|
// operator()/admin() dokumentiert (§"Shared account helpers").
|
|
// confirmationGuard() dieser Seite ist 'operator'.
|
|
// 2. ConfirmsPassword::confirmPassword() nimmt KEIN Argument entgegen — sie
|
|
// liest die eigene Eigenschaft $confirmablePassword (so gesetzt in jedem
|
|
// bestehenden Aufrufer, siehe tests/Feature/Admin/IntegrationsPageTest.php:
|
|
// ->set('confirmablePassword', …)->call('confirmPassword')). Ein Aufruf
|
|
// als ->call('confirmPassword', 'passwort-fuer-tests') kompiliert (PHP
|
|
// verwirft überzählige Argumente stillschweigend), setzt die Eigenschaft
|
|
// aber nie — die Prüfung vergleicht gegen einen leeren String und scheitert.
|
|
//
|
|
// Beide Fehler zusammen ließen den zweiten Test bei OperatingMode::Live
|
|
// stehen, obwohl scheinbar alles aufgerufen wurde: confirmPassword()
|
|
// scheiterte am Passwortvergleich, switchMode() brach danach in
|
|
// guardSecrets() mit 403 ab, bevor es je etwas schrieb.
|
|
it('refuses to switch without the secrets capability', function () {
|
|
$admin = Operator::factory()->role('Admin')->create(); // hosts.manage, nicht secrets.manage
|
|
|
|
Livewire::actingAs($admin, 'operator')
|
|
->test(Integrations::class)
|
|
->call('switchMode', 'test')
|
|
->assertForbidden();
|
|
|
|
expect(OperatingMode::current())->toBe(OperatingMode::Live);
|
|
});
|
|
|
|
it('switches when the owner has confirmed their password', function () {
|
|
$owner = Operator::factory()->role('Owner')->create();
|
|
|
|
Livewire::actingAs($owner, 'operator')
|
|
->test(Integrations::class)
|
|
->set('confirmablePassword', 'passwort-fuer-tests')
|
|
->call('confirmPassword')
|
|
->call('switchMode', 'test');
|
|
|
|
expect(OperatingMode::current())->toBe(OperatingMode::Test);
|
|
});
|
|
|
|
it('refuses an unknown mode', function () {
|
|
// Ein String aus dem Browser. `staging` gibt es nicht, und from() würde
|
|
// hier eine Ausnahme werfen statt still nichts zu tun.
|
|
$owner = Operator::factory()->role('Owner')->create();
|
|
|
|
Livewire::actingAs($owner, 'operator')
|
|
->test(Integrations::class)
|
|
->set('confirmablePassword', 'passwort-fuer-tests')
|
|
->call('confirmPassword')
|
|
->call('switchMode', 'staging');
|
|
|
|
expect(OperatingMode::current())->toBe(OperatingMode::Live);
|
|
});
|