import { expect, test } from "@playwright/test"; import { anmelden, E2E_PRAEFIX, keinQuerscrollen } from "./helfer"; /** * Braucht einen Server mit Verbindungstest (der Assistent zeigt sonst nur einen Hinweis). Gibt es * keinen, wird der Ablauf übersprungen und sagt das. */ test("Vorlage im Assistenten anwenden und als neue Vorlage speichern", async ({ page }) => { // Der Dry-Run plant wirklich gegen den Proxmox-Host – auf dem langsamen Testhost dauert das. test.setTimeout(120_000); const name = `${E2E_PRAEFIX}-${test.info().project.name}`; await anmelden(page, "/vorlagen"); await expect(page.getByText("Docker-Host klein")).toBeVisible(); await keinQuerscrollen(page); await page.getByRole("link", { name: "Ausrollen mit dieser Vorlage" }).first().click(); if (await page.getByText("Erst einen Server anlegen").isVisible()) test.skip(true, "Kein getesteter Server vorhanden"); await expect(page.getByLabel("Vorlage")).toHaveValue("docker-host-klein"); // Vorbelegung: Ressourcen aus der Vorlage for (let i = 0; i < 3; i++) await page.getByRole("button", { name: "Weiter" }).click(); await page.getByLabel("Name (Hostname)").fill("pd-vorlage"); await page.getByRole("button", { name: "Weiter" }).click(); await expect(page.getByLabel("RAM (MB)")).toHaveValue("4096"); await expect(page.getByLabel("Disk (GB)")).toHaveValue("40"); // Zur Zusammenfassung springen geht nicht ohne Schlüssel – Schritt 7 ausfüllen. await page.getByRole("button", { name: /07 Zugang/ }).click(); await page .getByLabel("Öffentliche SSH-Schlüssel") .fill("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEFTdkCuqQ6mF7I8QzmkNaQpKj7S/I2+yuxWeYasJjLd e2e@test"); await page.getByRole("button", { name: "Weiter" }).click(); await expect(page.getByLabel("Docker CE")).toBeChecked(); await page.getByRole("button", { name: "Weiter" }).click(); await expect(page.getByText(/--preset docker-host-klein/)).toBeVisible({ timeout: 90_000 }); await page.getByRole("button", { name: "Als Vorlage speichern" }).click(); await page.getByLabel("Kurzname (für --preset)").fill(name); await page.getByLabel("Titel").fill(`E2E ${test.info().project.name}`); await page.getByRole("button", { name: "Speichern" }).click(); await expect(page.getByText(/gespeichert/)).toBeVisible(); await page.goto("/vorlagen"); await expect(page.getByText(`--preset ${name}`)).toBeVisible(); page.once("dialog", (d) => void d.accept()); await page .locator("li", { hasText: `--preset ${name}` }) .getByRole("button", { name: "Löschen" }) .click(); await expect(page.getByText(`--preset ${name}`)).toHaveCount(0); });