Files
proxdeploy/tests/e2e/vorlagen.spec.ts
T
florian.wildeandClaude Opus 5.5 1b1ee4b876 feat(vorlagen): Vorlagen (Presets) für Assistent, API und CLI
Gespeicherte Kombinationen aus Distribution, Ressourcen und Profilen.
Im Assistenten mit einem Klick vorbelegt oder dort gespeichert; die API
nimmt „vorlage“ entgegen (Grundlage für --preset der CLI). Eine Vorlage
liegt unter der Anfrage – was die Anfrage selbst sagt, gewinnt.

Beim ersten Start wird das Beispiel „Docker-Host klein“ aus der Vorgabe
angelegt, einmalig.

Closes #012

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:44:33 +02:00

50 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 }) => {
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: 30_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);
});