From 80dac33f0aa995bd63aef2201247e1ce0d7c08b6 Mon Sep 17 00:00:00 2001 From: Steve Cliff Date: Sat, 22 Aug 2026 12:31:08 +0100 Subject: [PATCH] Stop polling idle agent update controls --- internal/server/http/fleet_update_test.go | 32 ++++++++++++++++--- web/templates/pages/fleet_update.html | 20 ------------ .../partials/fleet_update_inner.html | 4 +-- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/internal/server/http/fleet_update_test.go b/internal/server/http/fleet_update_test.go index 602329c..29c5b74 100644 --- a/internal/server/http/fleet_update_test.go +++ b/internal/server/http/fleet_update_test.go @@ -21,7 +21,7 @@ import ( "gitea.dcglab.co.uk/steve/restic-manager/internal/version" ) -func TestFleetUpdatePagePreservesFiltersWithoutTypedConfirmation(t *testing.T) { +func TestFleetUpdateIdlePageDoesNotPollOrRequireTypedConfirmation(t *testing.T) { t.Parallel() _, baseURL, st := newTestServerWithUI(t) cookie := loginAsAdmin(t, st) @@ -44,9 +44,6 @@ func TestFleetUpdatePagePreservesFiltersWithoutTypedConfirmation(t *testing.T) { `id="fleet-filter-name"`, `id="fleet-filter-version"`, `id="fleet-filter-state"`, - "htmx:beforeSwap", - "fleetCaptureUIState()", - "fleetRestoreUIState()", "r.style.display=", } { if !strings.Contains(body, want) { @@ -56,6 +53,33 @@ func TestFleetUpdatePagePreservesFiltersWithoutTypedConfirmation(t *testing.T) { if strings.Contains(body, "Type selected count to confirm") || strings.Contains(body, `id="fleet-update-confirm"`) { t.Error("page still renders the typed-count confirmation") } + if strings.Contains(body, `hx-trigger="every 3s`) { + t.Error("idle selection page must not poll and replace operator input") + } +} + +func TestFleetUpdateRunningPagePollsForProgress(t *testing.T) { + t.Parallel() + _, baseURL, st := newTestServerWithUI(t) + cookie, userID := loginAsAdminWithID(t, st) + hostID := makeHost(t, st, "fleet-running-host") + if err := st.CreateFleetUpdate(context.Background(), store.FleetUpdate{ + ID: ulid.Make().String(), StartedByUserID: userID, TargetVersion: version.Version, + }, []string{hostID}); err != nil { + t.Fatalf("create fleet update: %v", err) + } + + req, _ := stdhttp.NewRequest("GET", baseURL+"/settings/fleet-update", nil) + req.AddCookie(cookie) + res, err := stdhttp.DefaultClient.Do(req) + if err != nil { + t.Fatalf("get fleet update page: %v", err) + } + defer res.Body.Close() + raw, _ := io.ReadAll(res.Body) + if body := string(raw); !strings.Contains(body, `hx-trigger="every 3s`) { + t.Error("running rollout page must poll for progress") + } } // fakeFleetWorker stands in for *fleetupdate.Worker in HTTP tests. diff --git a/web/templates/pages/fleet_update.html b/web/templates/pages/fleet_update.html index 98153f6..b8edd49 100644 --- a/web/templates/pages/fleet_update.html +++ b/web/templates/pages/fleet_update.html @@ -29,32 +29,12 @@ {{template "fleet_update_inner" .}} diff --git a/web/templates/partials/fleet_update_inner.html b/web/templates/partials/fleet_update_inner.html index a5fc396..abaab30 100644 --- a/web/templates/partials/fleet_update_inner.html +++ b/web/templates/partials/fleet_update_inner.html @@ -7,11 +7,11 @@ */}} {{define "fleet_update_inner"}} {{$page := .Page}} -
+ hx-swap="outerHTML"{{end}}> {{if and $page.Active (eq $page.Active.Status "running")}} -- 2.52.0