feat(verlauf): Filter, Wiederholen und Aufräumen

Verlauf filterbar (URL, API, proxdeploy history); Wiederholen füllt den Assistenten aus einem alten Auftrag; Aufräumen löscht nach Fehlschlag oder Abbruch den halb angelegten Gast – nur, wenn dessen Beschreibung auf den Auftrag verweist. Deshalb setzt das Klonen die Beschreibung jetzt sofort. Auf pve-demo geprüft (CT 109).

Closes #014

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 16:39:58 +02:00
co-authored by Claude Opus 5.5
parent 8dca30e254
commit 7f6cf00a0e
32 changed files with 1488 additions and 53 deletions
+31
View File
@@ -0,0 +1,31 @@
import { expect, test } from "@playwright/test";
import { anmelden, keinQuerscrollen } from "./helfer";
test("Verlauf: Filter stehen in der URL und überleben das Neuladen", async ({ page }) => {
await anmelden(page, "/auftraege");
await expect(page.getByRole("heading", { name: "Verlauf" })).toBeVisible();
await page.getByLabel("Typ").selectOption("vm");
await expect(page).toHaveURL(/typ=vm/);
await page.getByLabel("Status").selectOption("ERFOLGREICH");
await expect(page).toHaveURL(/typ=vm.*status=ERFOLGREICH|status=ERFOLGREICH.*typ=vm/);
await page.reload();
await expect(page.getByLabel("Typ")).toHaveValue("vm");
await expect(page.getByLabel("Status")).toHaveValue("ERFOLGREICH");
await keinQuerscrollen(page);
await page.getByRole("button", { name: "Filter zurücksetzen" }).click();
await expect(page).toHaveURL(/\/auftraege$/);
});
test("Wiederholen füllt den Assistenten mit den alten Werten, Name leer", async ({ page }) => {
await anmelden(page, "/auftraege?typ=vm&status=ERFOLGREICH");
const erster = page.locator("main ul li a").first();
if ((await erster.count()) === 0) test.skip(true, "Kein erfolgreicher VM-Auftrag vorhanden");
await erster.click();
await page.getByRole("link", { name: "Wiederholen" }).click();
await expect(page).toHaveURL(/\/ausrollen\?wiederholen=/);
await expect(page.getByText(/Wiederholung von d-/)).toBeVisible();
await keinQuerscrollen(page);
for (let i = 0; i < 3; i++) await page.getByRole("button", { name: "Weiter" }).click();
await expect(page.getByLabel("Name (Hostname)")).toHaveValue("");
await expect(page.getByRole("button", { name: "Weiter" })).toBeDisabled();
});