Zwei fehlende Pruefungen aus der Nachbesserung nachgezogen

owner und admin teilen sich dieselbe Nextcloud-Gruppe (admin) — richtig
geloest durch array_unique plus Zielausschluss, aber bislang ungeprueft: ein
Rollenwechsel nach admin darf group:removeuser admin nie auslösen. Und eine
Instanz ohne Host muss false liefern, ohne einen einzigen Befehl abzusetzen.

Beide Mutationsproben im Fix-Bericht dokumentiert, inklusive einer ehrlich
vermerkten Einschraenkung: der host===null-Teil der Waechterbedingung in
run() ist fuer sich genommen nicht unabhaengig von PHPs eigener Typpruefung
beweisbar, weil ProxmoxClient::forHost() ohnehin einen TypeError wirft, den
derselbe catch(Throwable) faengt. Der vmid-Teil derselben Bedingung ist es
sehr wohl, empirisch bestaetigt.
feat/versandtakt
nexxo 2026-08-03 21:32:42 +02:00
parent 4023a0939c
commit e1052f6c4e
1 changed files with 29 additions and 0 deletions

View File

@ -83,6 +83,35 @@ it('LOESCHT den eigenen Speicherplatz, wenn readonly verlassen wird', function (
->and($befehle)->not->toContain('0 B');
});
it('nimmt admin nicht kurz aus der eigenen Gruppe, wenn owner und admin auf denselben Namen zeigen', function () {
// owner und admin teilen sich dieselbe Nextcloud-Gruppe (admin). Ohne
// array_unique liefe hier group:removeuser admin VOR group:adduser admin
// — der Benutzer fiele kurz aus genau der Gruppe heraus, in die er
// gerade soll.
[$pve, $instance] = gastBereit();
$sitz = Seat::factory()->create(['role' => 'admin', 'nc_username' => 'anna@firma.tld']);
app(NextcloudUsers::class)->applyRole($instance, $sitz);
$befehle = implode("\n", $pve->guestCommands);
expect($befehle)->not->toContain("group:removeuser 'admin'")
->and($befehle)->toContain("group:adduser 'admin'");
});
it('laesst eine Instanz ohne Host unangetastet', function () {
// run() steigt vor dem Verbindungsaufbau aus, wenn es keinen Host gibt —
// es darf dabei kein einziger Befehl abgesetzt werden, denn es gibt
// nichts, worueber forHost() eine Verbindung aufbauen koennte.
$pve = new FakeProxmoxClient;
app()->instance(ProxmoxClient::class, $pve);
$instance = Instance::factory()->create(['status' => 'active', 'vmid' => 201, 'host_id' => null]);
$sitz = Seat::factory()->create(['nc_username' => 'anna@firma.tld']);
expect(app(NextcloudUsers::class)->applyRole($instance, $sitz))->toBeFalse()
->and($pve->guestCommands)->toBe([]);
});
it('wirft Sitzungen beim Sperren SOFORT hinaus', function () {
// user:disable allein laesst laufende Sitzungen bis zu fuenf Minuten
// weiterleben. Bei einem Mitarbeiter, der gerade gegangen ist, sind fuenf