package gitea_test import ( "context" "net/http" "net/http/httptest" "sync/atomic" "testing" "gitea.d-ma.be/mathias/gitea-mcp/internal/gitea" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestSearchRepos(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { assert.Equal(t, "/api/v1/repos/search", r.URL.Path) assert.Equal(t, "infra", r.URL.Query().Get("q")) assert.Equal(t, "mathias", r.URL.Query().Get("owner")) w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`{"data":[{"name":"infra","full_name":"mathias/infra","default_branch":"main"}],"ok":true}`)) })) defer srv.Close() c := gitea.NewClient(srv.URL, "tok") repos, err := c.SearchRepos(context.Background(), "infra", "mathias", 1, 30) require.NoError(t, err) require.Len(t, repos, 1) assert.Equal(t, "mathias/infra", repos[0].FullName) } func TestListRepos(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { assert.Equal(t, "/api/v1/users/mathias/repos", r.URL.Path) assert.Equal(t, "1", r.URL.Query().Get("page")) assert.Equal(t, "10", r.URL.Query().Get("limit")) w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`[{"name":"infra","full_name":"mathias/infra","default_branch":"main","description":"d","private":true}]`)) })) defer srv.Close() c := gitea.NewClient(srv.URL, "tok") repos, err := c.ListRepos(context.Background(), "mathias", 1, 10) require.NoError(t, err) require.Len(t, repos, 1) assert.Equal(t, "mathias/infra", repos[0].FullName) assert.Equal(t, "main", repos[0].DefaultBranch) } func TestDefaultBranchCachesAcrossCalls(t *testing.T) { var hits int32 srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { atomic.AddInt32(&hits, 1) w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`{"name":"infra","full_name":"o/infra","default_branch":"trunk"}`)) })) defer srv.Close() c := gitea.NewClient(srv.URL, "tok") for i := 0; i < 5; i++ { b, err := c.DefaultBranch(context.Background(), "o", "infra") require.NoError(t, err) assert.Equal(t, "trunk", b) } assert.Equal(t, int32(1), atomic.LoadInt32(&hits), "5 calls should cause exactly 1 server hit due to cache") }