feat: add wiki iter pages
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
6ce4d5ede3
commit
042e886b2f
2 changed files with 48 additions and 0 deletions
17
wiki.go
17
wiki.go
|
|
@ -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))
|
||||
|
|
|
|||
31
wiki_test.go
31
wiki_test.go
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue