From 8e846d07cf30862b1a3521b8e2e0948632ef5bd6 Mon Sep 17 00:00:00 2001 From: clawbot Date: Tue, 29 Sep 2026 10:00:48 +0000 Subject: [PATCH] Show the deploy branch in the app page title (closes #240) The app page shows the app's configured branch as a neutral label next to the status badge, so it can be read without opening the edit page. The line under the title now shows only the repository. A new test renders the app page for an app on a non-main branch and checks the branch is in the title row. Model: opus-5-5 --- TODO.md | 3 ++ internal/handlers/app_branch_test.go | 46 ++++++++++++++++++++++++++++ templates/app_detail.html | 5 +-- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 internal/handlers/app_branch_test.go diff --git a/TODO.md b/TODO.md index 54cdfbd..15b6e9e 100644 --- a/TODO.md +++ b/TODO.md @@ -20,6 +20,9 @@ regress. # Completed Steps +- 2026-09-29: The app page shows the app's branch as a label in its title, next + to the status badge, instead of after the repository under it (#240). + - 2026-09-29: An app's deployments page now lists only its 10 most recent deployments, newest first, instead of 50 (#238). diff --git a/internal/handlers/app_branch_test.go b/internal/handlers/app_branch_test.go new file mode 100644 index 0000000..c529006 --- /dev/null +++ b/internal/handlers/app_branch_test.go @@ -0,0 +1,46 @@ +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" +) + +// TestAppPageTitleShowsBranch checks that an app's branch can be read from +// the app page title, next to the status badge, without opening the edit page. +func TestAppPageTitleShowsBranch(t *testing.T) { + t.Parallel() + + testCtx := setupTestHandlers(t) + + createdApp, err := testCtx.appSvc.CreateApp(t.Context(), app.CreateAppInput{ + Name: "branch-shown-app", + RepoURL: "git@example.com:user/branch-shown-app.git", + Branch: "staging", + }) + require.NoError(t, err) + + request := httptest.NewRequestWithContext( + t.Context(), http.MethodGet, "/apps/"+createdApp.ID, nil, + ) + request = addChiURLParams(request, map[string]string{"id": createdApp.ID}) + recorder := httptest.NewRecorder() + + testCtx.handlers.HandleAppDetail().ServeHTTP(recorder, request) + + require.Equal(t, http.StatusOK, recorder.Code) + + // The title row runs from the app name heading to the end of its div. + _, afterHeading, found := strings.Cut(recorder.Body.String(), "") + assert.Contains(t, titleRow, `x-text="statusLabel"`) + assert.Contains(t, titleRow, ">staging") +} diff --git a/templates/app_detail.html b/templates/app_detail.html index ecb085e..02d65c5 100644 --- a/templates/app_detail.html +++ b/templates/app_detail.html @@ -26,11 +26,12 @@
-
+

{{.App.Name}}

+ {{.App.Branch}}
-

{{.App.RepoURL}}@{{.App.Branch}}

+

{{.App.RepoURL}}

Edit -- 2.54.0