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
77 lines
2.3 KiB
Go
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")
|
|
})
|
|
}
|