Files
upaas/internal/handlers/app_branch_test.go
T
sneak f68e755bd2
Check / check (pull_request) Skipped
Show the deploy branch in the app page title and early in the app list (closes #240)
The app page shows the configured branch as a neutral label next to the
status badge; the line under the title now shows only the repository.
The app list moves the Branch column to right after Name and lets the
table scroll sideways inside its card, so narrow screens no longer cut
columns off. A new test renders both pages for an app on a non-main
branch.

Model: opus-5-5
2026-09-29 09:47:13 +00:00

77 lines
2.3 KiB
Go

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"
)
// TestAppBranchIsShown checks that an app's branch can be read from the app
// page title and from the app list without opening the edit page.
func TestAppBranchIsShown(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)
t.Run("in the app page title next to the status badge", func(t *testing.T) {
t.Parallel()
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(), "<h1")
require.True(t, found, "app page has no heading")
titleRow, _, _ := strings.Cut(afterHeading, "</div>")
assert.Contains(t, titleRow, `x-text="statusLabel"`)
assert.Contains(t, titleRow, ">staging</span>")
})
t.Run("in the app list before the repository", func(t *testing.T) {
t.Parallel()
request := httptest.NewRequestWithContext(
t.Context(), http.MethodGet, "/", nil,
)
recorder := httptest.NewRecorder()
testCtx.handlers.HandleDashboard().ServeHTTP(recorder, request)
require.Equal(t, http.StatusOK, recorder.Code)
_, afterRowStart, found := strings.Cut(
recorder.Body.String(), `<tr class="table-row-hover">`,
)
require.True(t, found, "app list has no row for the app")
row, _, _ := strings.Cut(afterRowStart, "</tr>")
branchAt := strings.Index(row, ">staging</td>")
repoAt := strings.Index(row, createdApp.RepoURL)
require.NotEqual(t, -1, branchAt, "branch missing from the app's row")
require.NotEqual(t, -1, repoAt, "repository missing from the app's row")
assert.Less(t, branchAt, repoAt, "branch should come before repository")
})
}