mirror of
https://gitea.com/gitea/tea.git
synced 2026-06-06 03:08:44 +02:00
Merge branch 'main' into lunny/add_reply_code_review
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
// Copyright 2026 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package task
|
||||
|
||||
import (
|
||||
stdctx "context"
|
||||
"fmt"
|
||||
|
||||
"gitea.dev/sdk"
|
||||
teaContext "gitea.dev/tea/modules/context"
|
||||
)
|
||||
|
||||
// WikiWriteClient defines the wiki write methods required by task helpers.
|
||||
type WikiWriteClient interface {
|
||||
CreatePage(ctx stdctx.Context, owner, repo string, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, *gitea.Response, error)
|
||||
EditPage(ctx stdctx.Context, owner, repo, pageName string, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, *gitea.Response, error)
|
||||
DeletePage(ctx stdctx.Context, owner, repo, pageName string) (*gitea.Response, error)
|
||||
}
|
||||
|
||||
// CreateWikiPage creates a wiki page and returns the created page.
|
||||
func CreateWikiPage(ctx *teaContext.TeaContext, client WikiWriteClient, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, error) {
|
||||
if opt.Title == "" {
|
||||
return nil, fmt.Errorf("title is required")
|
||||
}
|
||||
if opt.ContentBase64 == "" {
|
||||
return nil, fmt.Errorf("content is required")
|
||||
}
|
||||
page, _, err := client.CreatePage(stdctx.Background(), ctx.Owner, ctx.Repo, opt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not create wiki page: %s", err)
|
||||
}
|
||||
return page, nil
|
||||
}
|
||||
|
||||
// EditWikiPage edits a wiki page and returns the updated page.
|
||||
func EditWikiPage(ctx *teaContext.TeaContext, client WikiWriteClient, pageName string, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, error) {
|
||||
if pageName == "" {
|
||||
return nil, fmt.Errorf("page name is required")
|
||||
}
|
||||
if opt.ContentBase64 == "" {
|
||||
return nil, fmt.Errorf("content is required")
|
||||
}
|
||||
page, _, err := client.EditPage(stdctx.Background(), ctx.Owner, ctx.Repo, pageName, opt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not edit wiki page: %s", err)
|
||||
}
|
||||
return page, nil
|
||||
}
|
||||
|
||||
// DeleteWikiPage deletes a wiki page.
|
||||
func DeleteWikiPage(ctx *teaContext.TeaContext, client WikiWriteClient, pageName string) error {
|
||||
if pageName == "" {
|
||||
return fmt.Errorf("page name is required")
|
||||
}
|
||||
_, err := client.DeletePage(stdctx.Background(), ctx.Owner, ctx.Repo, pageName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not delete wiki page: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
// Copyright 2026 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package task
|
||||
|
||||
import (
|
||||
stdctx "context"
|
||||
"testing"
|
||||
|
||||
"gitea.dev/sdk"
|
||||
teaContext "gitea.dev/tea/modules/context"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type fakeWikiWriteClient struct {
|
||||
owner string
|
||||
repo string
|
||||
pageName string
|
||||
create gitea.CreateWikiPageOptions
|
||||
edit gitea.CreateWikiPageOptions
|
||||
created *gitea.WikiPage
|
||||
edited *gitea.WikiPage
|
||||
deleted bool
|
||||
}
|
||||
|
||||
func (f *fakeWikiWriteClient) CreatePage(_ stdctx.Context, owner, repo string, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, *gitea.Response, error) {
|
||||
f.owner = owner
|
||||
f.repo = repo
|
||||
f.create = opt
|
||||
return f.created, nil, nil
|
||||
}
|
||||
|
||||
func (f *fakeWikiWriteClient) EditPage(_ stdctx.Context, owner, repo, pageName string, opt gitea.CreateWikiPageOptions) (*gitea.WikiPage, *gitea.Response, error) {
|
||||
f.owner = owner
|
||||
f.repo = repo
|
||||
f.pageName = pageName
|
||||
f.edit = opt
|
||||
return f.edited, nil, nil
|
||||
}
|
||||
|
||||
func (f *fakeWikiWriteClient) DeletePage(_ stdctx.Context, owner, repo, pageName string) (*gitea.Response, error) {
|
||||
f.owner = owner
|
||||
f.repo = repo
|
||||
f.pageName = pageName
|
||||
f.deleted = true
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func newWikiTaskContext() *teaContext.TeaContext {
|
||||
return &teaContext.TeaContext{Owner: "octo", Repo: "tea"}
|
||||
}
|
||||
|
||||
func TestCreateWikiPageCallsSDK(t *testing.T) {
|
||||
client := &fakeWikiWriteClient{created: &gitea.WikiPage{Title: "Home"}}
|
||||
page, err := CreateWikiPage(newWikiTaskContext(), client, gitea.CreateWikiPageOptions{Title: "Home", ContentBase64: "IyBIb21l"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "octo", client.owner)
|
||||
assert.Equal(t, "tea", client.repo)
|
||||
assert.Equal(t, "Home", client.create.Title)
|
||||
assert.Equal(t, "Home", page.Title)
|
||||
}
|
||||
|
||||
func TestEditWikiPageCallsSDK(t *testing.T) {
|
||||
client := &fakeWikiWriteClient{edited: &gitea.WikiPage{Title: "Home"}}
|
||||
page, err := EditWikiPage(newWikiTaskContext(), client, "Home", gitea.CreateWikiPageOptions{ContentBase64: "IyBVcGRhdGVk"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "octo", client.owner)
|
||||
assert.Equal(t, "tea", client.repo)
|
||||
assert.Equal(t, "Home", client.pageName)
|
||||
assert.Equal(t, "IyBVcGRhdGVk", client.edit.ContentBase64)
|
||||
assert.Equal(t, "Home", page.Title)
|
||||
}
|
||||
|
||||
func TestDeleteWikiPageCallsSDK(t *testing.T) {
|
||||
client := &fakeWikiWriteClient{}
|
||||
err := DeleteWikiPage(newWikiTaskContext(), client, "Home")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "octo", client.owner)
|
||||
assert.Equal(t, "tea", client.repo)
|
||||
assert.Equal(t, "Home", client.pageName)
|
||||
assert.True(t, client.deleted)
|
||||
}
|
||||
Reference in New Issue
Block a user