feat: add gitea skill discovery

This commit is contained in:
2026-05-13 16:20:37 +08:00
parent 187c14122e
commit 81ed974603
3 changed files with 280 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
package gitea
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestListOrgSkillsFiltersReposWithoutSkillMD(t *testing.T) {
mux := http.NewServeMux()
mux.HandleFunc("/api/v1/orgs/skills/repos", func(w http.ResponseWriter, r *http.Request) {
if got := r.URL.Query().Get("page"); got != "1" {
t.Fatalf("page = %q, want 1", got)
}
_ = json.NewEncoder(w).Encode([]apiRepo{
{Name: "good", FullName: "skills/good", CloneURL: "https://example/good.git", DefaultBranch: "main"},
{Name: "bad", FullName: "skills/bad", CloneURL: "https://example/bad.git", DefaultBranch: "main"},
})
})
mux.HandleFunc("/api/v1/repos/skills/good/contents/SKILL.md", func(w http.ResponseWriter, r *http.Request) {
if got := r.URL.Query().Get("ref"); got != "main" {
t.Fatalf("ref = %q, want main", got)
}
w.WriteHeader(http.StatusOK)
})
mux.HandleFunc("/api/v1/repos/skills/bad/contents/SKILL.md", func(w http.ResponseWriter, r *http.Request) {
http.NotFound(w, r)
})
server := httptest.NewServer(mux)
defer server.Close()
client := NewClient(server.URL, Auth{Type: AuthPassword, Username: "alice", Secret: "secret"})
repos, err := client.ListOrgSkills(context.Background(), "skills")
if err != nil {
t.Fatalf("ListOrgSkills returned error: %v", err)
}
if len(repos) != 1 || repos[0].Name != "good" {
t.Fatalf("repos = %+v, want only good", repos)
}
if repos[0].CloneURL != "https://example/good.git" {
t.Fatalf("CloneURL = %q", repos[0].CloneURL)
}
}
func TestListOrgSkillsUsesTokenAuth(t *testing.T) {
mux := http.NewServeMux()
mux.HandleFunc("/api/v1/orgs/skills/repos", func(w http.ResponseWriter, r *http.Request) {
if got := r.Header.Get("Authorization"); got != "token abc123" {
t.Fatalf("Authorization = %q, want token abc123", got)
}
_ = json.NewEncoder(w).Encode([]apiRepo{})
})
server := httptest.NewServer(mux)
defer server.Close()
client := NewClient(server.URL, Auth{Type: AuthToken, Secret: "abc123"})
if _, err := client.ListOrgSkills(context.Background(), "skills"); err != nil {
t.Fatalf("ListOrgSkills returned error: %v", err)
}
}
func TestTestConnectionChecksCurrentUserAndOrg(t *testing.T) {
mux := http.NewServeMux()
mux.HandleFunc("/api/v1/user", func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(apiUser{UserName: "alice"})
})
mux.HandleFunc("/api/v1/orgs/skills", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
server := httptest.NewServer(mux)
defer server.Close()
client := NewClient(server.URL, Auth{Type: AuthPassword, Username: "alice", Secret: "secret"})
result, err := client.TestConnection(context.Background(), "skills")
if err != nil {
t.Fatalf("TestConnection returned error: %v", err)
}
if !result.OK || result.Username != "alice" || result.Org != "skills" {
t.Fatalf("result = %+v", result)
}
}