Check / check (pull_request) Successful in 4m21s
The top bar's two sides were held apart only by justify-between, with no gap and no wrapping, so at 390 px "by @sneak" ended where the New App button began. The bar's row now wraps and has a gap: in a window too narrow for one row, New App and Logout move to a second row; on wider windows the bar looks as before. Model: opus-5-5
78 lines
2.4 KiB
Go
78 lines
2.4 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"
|
|
)
|
|
|
|
// 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, `<table class="table">`)
|
|
require.True(t, found, "dashboard has no app table")
|
|
|
|
cardTag := beforeTable[strings.LastIndex(beforeTable, "<div"):]
|
|
assert.Contains(t, cardTag, "overflow-x-auto")
|
|
assert.NotContains(t, cardTag, "overflow-hidden")
|
|
|
|
beforeURL, _, found := strings.Cut(body, ">"+repoURL+"</td>")
|
|
require.True(t, found, "dashboard has no repository cell")
|
|
|
|
cellTag := beforeURL[strings.LastIndex(beforeURL, "<td"):]
|
|
assert.Contains(t, cellTag, "whitespace-normal")
|
|
assert.Contains(t, cellTag, "break-all")
|
|
}
|
|
|
|
// TestTopBarWrapsWhenNarrow checks that the top bar keeps a gap between the
|
|
// µPaaS title and the New App and Logout buttons, and puts the buttons on a
|
|
// second row in a window too narrow for one, instead of letting them meet.
|
|
func TestTopBarWrapsWhenNarrow(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
testCtx := setupTestHandlers(t)
|
|
|
|
request := httptest.NewRequestWithContext(t.Context(), http.MethodGet, "/", nil)
|
|
recorder := httptest.NewRecorder()
|
|
|
|
testCtx.handlers.HandleDashboard().ServeHTTP(recorder, request)
|
|
|
|
require.Equal(t, http.StatusOK, recorder.Code)
|
|
|
|
_, afterNav, found := strings.Cut(recorder.Body.String(), `<nav class="app-bar">`)
|
|
require.True(t, found, "dashboard has no top bar")
|
|
|
|
rowTag, _, _ := strings.Cut(strings.TrimSpace(afterNav), ">")
|
|
assert.Contains(t, rowTag, "flex-wrap")
|
|
assert.Contains(t, rowTag, "gap-")
|
|
}
|