diff --git a/wiki.go b/wiki.go index ce9ce3a..2243b3d 100644 --- a/wiki.go +++ b/wiki.go @@ -3,6 +3,7 @@ package forge import ( "context" "iter" + "strconv" "dappco.re/go/core/forge/types" ) @@ -58,6 +59,20 @@ func (s *WikiService) GetPage(ctx context.Context, owner, repo, pageName string) return &out, nil } +// GetPageRevisions returns the revision history for a wiki page. +// Page is optional; pass a value greater than zero to request a specific page of results. +func (s *WikiService) GetPageRevisions(ctx context.Context, owner, repo, pageName string, page int) (*types.WikiCommitList, error) { + path := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/revisions/{pageName}", pathParams("owner", owner, "repo", repo, "pageName", pageName)) + if page > 0 { + path += "?page=" + strconv.Itoa(page) + } + var out types.WikiCommitList + if err := s.client.Get(ctx, path, &out); err != nil { + return nil, err + } + return &out, nil +} + // CreatePage creates a new wiki page. func (s *WikiService) CreatePage(ctx context.Context, owner, repo string, opts *types.CreateWikiPageOptions) (*types.WikiPage, error) { path := ResolvePath("/api/v1/repos/{owner}/{repo}/wiki/new", pathParams("owner", owner, "repo", repo)) diff --git a/wiki_test.go b/wiki_test.go index 2de0e29..ca2ab13 100644 --- a/wiki_test.go +++ b/wiki_test.go @@ -105,6 +105,43 @@ func TestWikiService_GetPage_Good(t *testing.T) { } } +func TestWikiService_GetPageRevisions_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/revisions/Home" { + t.Errorf("wrong path: %s", r.URL.Path) + } + if got := r.URL.Query().Get("page"); got != "2" { + t.Errorf("got page=%q, want %q", got, "2") + } + json.NewEncoder(w).Encode(types.WikiCommitList{ + Count: 2, + WikiCommits: []*types.WikiCommit{ + {ID: "abc123", Message: "Initial import"}, + {ID: "def456", Message: "Updated home page"}, + }, + }) + })) + defer srv.Close() + + f := NewForge(srv.URL, "tok") + revisions, err := f.Wiki.GetPageRevisions(context.Background(), "core", "go-forge", "Home", 2) + if err != nil { + t.Fatal(err) + } + if revisions.Count != 2 { + t.Fatalf("got count=%d, want 2", revisions.Count) + } + if len(revisions.WikiCommits) != 2 { + t.Fatalf("got %d revisions, want 2", len(revisions.WikiCommits)) + } + if revisions.WikiCommits[0].ID != "abc123" || revisions.WikiCommits[1].Message != "Updated home page" { + t.Fatalf("got %#v", revisions.WikiCommits) + } +} + func TestWikiService_CreatePage_Good(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost {