feat: add wiki iter pages
All checks were successful
Security Scan / security (push) Successful in 11s
Test / test (push) Successful in 52s

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-01 07:01:59 +00:00
parent 6ce4d5ede3
commit 042e886b2f
2 changed files with 48 additions and 0 deletions

17
wiki.go
View file

@ -2,6 +2,7 @@ package forge
import (
"context"
"iter"
"dappco.re/go/core/forge/types"
)
@ -31,6 +32,22 @@ func (s *WikiService) ListPages(ctx context.Context, owner, repo string) ([]type
return out, nil
}
// IterPages returns an iterator over all wiki page metadata for a repository.
func (s *WikiService) IterPages(ctx context.Context, owner, repo string) iter.Seq2[types.WikiPageMetaData, error] {
return func(yield func(types.WikiPageMetaData, error) bool) {
items, err := s.ListPages(ctx, owner, repo)
if err != nil {
yield(*new(types.WikiPageMetaData), err)
return
}
for _, item := range items {
if !yield(item, nil) {
return
}
}
}
}
// GetPage returns a single wiki page by name.
func (s *WikiService) GetPage(ctx context.Context, owner, repo, pageName string) (*types.WikiPage, error) {
path := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/page/{pageName}", pathParams("owner", owner, "repo", repo, "pageName", pageName))

View file

@ -41,6 +41,37 @@ func TestWikiService_ListPages_Good(t *testing.T) {
}
}
func TestWikiService_IterPages_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
t.Errorf("expected GET, got %s", r.Method)
}
if r.URL.Path != "/api/v1/repos/core/go-forge/wiki/pages" {
t.Errorf("wrong path: %s", r.URL.Path)
}
json.NewEncoder(w).Encode([]types.WikiPageMetaData{
{Title: "Home", SubURL: "Home"},
{Title: "Setup", SubURL: "Setup"},
})
}))
defer srv.Close()
f := NewForge(srv.URL, "tok")
var titles []string
for page, err := range f.Wiki.IterPages(context.Background(), "core", "go-forge") {
if err != nil {
t.Fatal(err)
}
titles = append(titles, page.Title)
}
if len(titles) != 2 {
t.Fatalf("got %d pages, want 2", len(titles))
}
if titles[0] != "Home" || titles[1] != "Setup" {
t.Fatalf("unexpected titles: %+v", titles)
}
}
func TestWikiService_GetPage_Good(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {