Welle 3 · Tests der Update-Tabelle mit Query-Client (die Tabelle hat seit heute eigene Abfragen)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 18:34:54 +02:00
co-authored by Claude Opus 5.5
parent 9da666d04e
commit dd23f3fb4c
@@ -1,8 +1,13 @@
import type { ReactElement } from "react"
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"
import { fireEvent, render, screen, within } from "@testing-library/react"
import type { Sammellauf, ZielStand } from "@/lib/typen"
import { SammellaufFortschritt } from "./Sammellauf"
import { UpdateTabelle } from "./UpdateTabelle"
// Seit 25.09.2026 hat die Tabelle eigene Knöpfe mit Abfragen („Version überspringen“, „Was ist neu?“).
const mitAbfragen = (ui: ReactElement) => render(<QueryClientProvider client={new QueryClient()}>{ui}</QueryClientProvider>)
const pakete = {
methode: "POST", pfad: "/api/homelab/ziele/ct-102/os-update", label: "Jetzt updaten",
frage: "48 Pakete im Gast jetzt einspielen? Vorher wird ein Snapshot angelegt.",
@@ -27,7 +32,7 @@ const gitea: ZielStand = {
describe("UpdateTabelle", () => {
it("zeigt je Gerät die App-Version, den Paketstand und warum ein Knopf fehlt", () => {
render(<UpdateTabelle ziele={[gitea, netbird]} laufend={new Map()} gesperrt={false} onAktion={() => {}} />)
mitAbfragen(<UpdateTabelle ziele={[gitea, netbird]} laufend={new Map()} gesperrt={false} onAktion={() => {}} />)
const zeilen = screen.getAllByRole("row").slice(1)
// Was sich einspielen lässt, steht oben — auch wenn es später geliefert wurde.
expect(within(zeilen[0]).getByRole("rowheader")).toHaveTextContent("NetBird")
@@ -42,7 +47,7 @@ describe("UpdateTabelle", () => {
it("fragt vor dem Einspielen mit dem Text des Geräts", () => {
const start = vi.fn()
render(<UpdateTabelle ziele={[netbird]} laufend={new Map()} gesperrt={false} onAktion={start} />)
mitAbfragen(<UpdateTabelle ziele={[netbird]} laufend={new Map()} gesperrt={false} onAktion={start} />)
fireEvent.click(screen.getByRole("button", { name: "Pakete einspielen" }))
const dialog = screen.getByRole("dialog")
expect(within(dialog).getByText(/Vorher wird ein Snapshot angelegt/)).toBeInTheDocument()
@@ -51,7 +56,7 @@ describe("UpdateTabelle", () => {
})
it("zeigt den laufenden Schritt statt der Knöpfe", () => {
render(<UpdateTabelle ziele={[netbird]} laufend={new Map([["ct-102", "Snapshot …"]])} gesperrt={false} onAktion={() => {}} />)
mitAbfragen(<UpdateTabelle ziele={[netbird]} laufend={new Map([["ct-102", "Snapshot …"]])} gesperrt={false} onAktion={() => {}} />)
expect(screen.getByRole("status")).toHaveTextContent("Läuft: Snapshot …")
expect(screen.queryByRole("button", { name: "Pakete einspielen" })).not.toBeInTheDocument()
})