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>
50 lines
2.5 KiB
TypeScript
50 lines
2.5 KiB
TypeScript
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);
|
||
});
|