From 13d2619df30bc5514f415203dde4e09bf1683aab Mon Sep 17 00:00:00 2001 From: clawbot Date: Fri, 2 Oct 2026 00:47:42 +0000 Subject: [PATCH] Keep the Applications list's table inside its card (closes #262) Table cells never wrap, so a long repository URL made the table wider than its card, which hides what does not fit and so cut off the Actions column and the Deploy buttons. The repository URL now wraps within its column, with a minimum width of 8rem so it stays readable in a narrow window, and the card scrolls sideways when the table still does not fit. A handler test checks both. Every class used was already in the committed static/css/tailwind.css. Model: opus-5-5 --- TODO.md | 5 ++ internal/handlers/dashboard_layout_test.go | 56 ++++++++++++++++++++++ templates/dashboard.html | 4 +- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 internal/handlers/dashboard_layout_test.go diff --git a/TODO.md b/TODO.md index bf60f7f..cd9c6c5 100644 --- a/TODO.md +++ b/TODO.md @@ -20,6 +20,11 @@ regress. # Completed Steps +- 2026-10-02: On the Applications list, a long repository URL now wraps within + its column instead of making the table wider than its card, which cut off the + Actions column and the Deploy buttons. In a window too narrow for the table, + the card scrolls sideways instead of cutting the table off (#262). + - 2026-10-01: Built images are tagged `upaas-:`, git's short form of the commit built, instead of the deployment number. A redeploy of a commit gives its tag to the new image; the old one is kept while the app runs diff --git a/internal/handlers/dashboard_layout_test.go b/internal/handlers/dashboard_layout_test.go new file mode 100644 index 0000000..3ea0a0d --- /dev/null +++ b/internal/handlers/dashboard_layout_test.go @@ -0,0 +1,56 @@ +package handlers_test + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "sneak.berlin/go/upaas/internal/service/app" +) + +// TestDashboardTableFitsCard checks that the card around the app table +// scrolls sideways instead of hiding what does not fit, and that a long +// repository URL wraps instead of pushing the action buttons out. +func TestDashboardTableFitsCard(t *testing.T) { + t.Parallel() + + testCtx := setupTestHandlers(t) + + repoURL := "https://git.example.com/user/" + + "a-repository-name-long-enough-to-push-the-action-buttons-out.git" + + _, err := testCtx.appSvc.CreateApp(t.Context(), app.CreateAppInput{ + Name: "long-url-app", + RepoURL: repoURL, + }) + require.NoError(t, err) + + request := httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/", nil) + recorder := httptest.NewRecorder() + + testCtx.handlers.HandleDashboard().ServeHTTP(recorder, request) + + require.Equal(t, http.StatusOK, recorder.Code) + + body := recorder.Body.String() + + beforeTable, _, found := strings.Cut(body, ``) + require.True(t, found, "dashboard has no app table") + + cardTag := beforeTable[strings.LastIndex(beforeTable, ""+repoURL+"") + require.True(t, found, "dashboard has no repository cell") + + cellTag := beforeURL[strings.LastIndex(beforeURL, " {{if .AppStats}} -
+
@@ -41,7 +41,7 @@ {{.App.Name}} - +
{{.App.RepoURL}}{{.App.RepoURL}} {{.App.Branch}} {{if eq .App.Status "running"}}