Files
gitea-tea/internal/services/status_test.go
T

81 lines
2.9 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package services
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"gitea.dev/tea/internal/transport"
"github.com/stretchr/testify/require"
)
func TestPullStatusFiltersRequestedReviewsBeforeLimiting(t *testing.T) {
pages := []string{}
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/api/v1/user":
_, _ = w.Write([]byte(`{"login":"alice"}`))
case "/api/v1/repos/alice/project/issues":
require.Equal(t, "pulls", r.URL.Query().Get("type"))
require.Equal(t, "open", r.URL.Query().Get("state"))
require.Equal(t, "1", r.URL.Query().Get("limit"))
require.True(t, r.URL.Query().Get("created_by") == "alice" || r.URL.Query().Get("assigned_by") == "alice")
_, _ = w.Write([]byte(`[]`))
case "/api/v1/repos/issues/search":
require.Equal(t, "true", r.URL.Query().Get("review_requested"))
require.Equal(t, "alice", r.URL.Query().Get("owner"))
require.Equal(t, "100", r.URL.Query().Get("limit"))
page := r.URL.Query().Get("page")
pages = append(pages, page)
switch page {
case "1":
_, _ = w.Write([]byte(`[{"id":1,"number":1,"repository":{"full_name":"alice/other"}}]`))
case "2":
_, _ = w.Write([]byte(`[{"id":2,"number":2,"repository":{"full_name":"Alice/Project"}},{"id":3,"number":3,"repository":{"full_name":"alice/project"}}]`))
default:
t.Fatal("status fetched beyond the requested limit")
}
default:
t.Fatalf("unexpected path %s", r.URL.Path)
}
}))
defer server.Close()
result, err := (Status{Client: transport.New(server.URL, "token", false), Repository: "alice/project"}).Pulls(context.Background(), 1)
require.NoError(t, err)
require.Empty(t, result.Authored)
require.Empty(t, result.Assigned)
require.Len(t, result.ReviewRequested, 1)
require.Equal(t, int64(2), result.ReviewRequested[0].ID)
require.Equal(t, []string{"1", "2"}, pages)
}
func TestStatusSummarySkipsRunsWhenActionsAreDisabled(t *testing.T) {
accounts := 0
client := newTestClient(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch {
case r.URL.Path == "/api/v1/user":
accounts++
_, _ = w.Write([]byte(`{"login":"alice"}`))
case r.URL.Path == "/api/v1/repos/alice/project":
_, _ = w.Write([]byte(`{"has_actions":false}`))
case r.URL.Path == "/api/v1/repos/alice/project/issues":
_, _ = w.Write([]byte(`[{"id":4,"number":4}]`))
case r.URL.Path == "/api/v1/repos/issues/search":
_, _ = w.Write([]byte(`[]`))
default:
t.Errorf("unexpected request %s", r.URL.Path)
w.WriteHeader(http.StatusTeapot)
}
}))
result, err := (Status{Client: client, Repository: "alice/project"}).Summary(context.Background(), 30, "alice/project", false)
require.NoError(t, err)
require.False(t, result.RunsIncluded)
require.Empty(t, result.FailingRuns)
require.Len(t, result.AssignedIssues, 1)
require.Equal(t, 1, accounts)
}