package gitea import ( "context" "net/http" "net/http/httptest" "testing" ) func TestRepositoryUsesTokenAndDecodesResponse(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/gitea/api/v1/repos/hop/demo" { t.Fatalf("path = %q", r.URL.Path) } if got := r.Header.Get("Authorization"); got != "token gitea-token" { t.Fatalf("authorization = %q", got) } w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`{"id":42,"owner":{"login":"hop"},"name":"demo","full_name":"hop/demo","clone_url":"http://gitea/hop/demo.git","default_branch":"main"}`)) })) defer server.Close() client, err := NewClient(server.URL+"/gitea", "gitea-token") if err != nil { t.Fatal(err) } repository, err := client.Repository(context.Background(), "hop", "demo") if err != nil { t.Fatal(err) } if repository.ID != 42 || repository.OwnerName() != "hop" || repository.DefaultBranch != "main" { t.Fatalf("unexpected repository: %#v", repository) } } func TestRepositoryRequiresToken(t *testing.T) { client, err := NewClient("http://gitea.test", "") if err != nil { t.Fatal(err) } if _, err := client.Repository(context.Background(), "hop", "demo"); err != ErrTokenNotConfigured { t.Fatalf("error = %v, want %v", err, ErrTokenNotConfigured) } } func TestViewerCanReadRepositoryForwardsSessionCookie(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/api/v1/repos/hop/private" { t.Fatalf("path = %q", r.URL.Path) } if got := r.Header.Get("Cookie"); got != "i_like_gitea=session" { t.Fatalf("cookie = %q", got) } w.WriteHeader(http.StatusOK) })) defer server.Close() client, err := NewClient(server.URL, "") if err != nil { t.Fatal(err) } allowed, err := client.ViewerCanReadRepository(context.Background(), "i_like_gitea=session", "hop", "private") if err != nil || !allowed { t.Fatalf("allowed = %t, err = %v", allowed, err) } } func TestViewerCannotReadMissingRepository(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) })) defer server.Close() client, err := NewClient(server.URL, "") if err != nil { t.Fatal(err) } allowed, err := client.ViewerCanReadRepository(context.Background(), "i_like_gitea=session", "hop", "missing") if err != nil || allowed { t.Fatalf("allowed = %t, err = %v", allowed, err) } }