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(), "") assert.Contains(t, titleRow, `x-text="statusLabel"`) assert.Contains(t, titleRow, ">staging") }) 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(), ``, ) require.True(t, found, "app list has no row for the app") row, _, _ := strings.Cut(afterRowStart, "") branchAt := strings.Index(row, ">staging") 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") }) }