Show the deploy branch in the app page title and early in the app list (closes #240)
Check / check (pull_request) Skipped
Check / check (pull_request) Skipped
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
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user