gitlink-cli/shortcuts/wiki/wiki_test.go

172 lines
5.1 KiB
Go

package wiki
import (
"encoding/base64"
"net/http"
"testing"
"github.com/gitlink-org/gitlink-cli/shortcuts/common"
)
func TestWikiList(t *testing.T) {
server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == "GET" && r.URL.Path == "/owner/repo.json":
common.WriteJSON(t, w, map[string]interface{}{
"id": float64(123),
"name": "repo",
})
case r.Method == "GET" && r.URL.Path == "/wiki/open/wikiPages":
common.WriteJSON(t, w, map[string]interface{}{
"data": []interface{}{
map[string]interface{}{"title": "Home", "sub_url": "Home"},
map[string]interface{}{"title": "Guide", "sub_url": "Guide"},
},
})
default:
t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path)
}
})
defer server.Close()
ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{})
err := common.RunShortcut(t, Shortcuts(), "list", ctx)
if err != nil {
t.Fatalf("list failed: %v", err)
}
}
func TestWikiView(t *testing.T) {
server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == "GET" && r.URL.Path == "/owner/repo.json":
common.WriteJSON(t, w, map[string]interface{}{
"id": float64(123),
})
case r.Method == "GET" && r.URL.Path == "/wiki/open/getWiki":
pageName := r.URL.Query().Get("pageName")
if pageName != "Home" {
t.Fatalf("expected pageName=Home, got %s", pageName)
}
common.WriteJSON(t, w, map[string]interface{}{
"data": map[string]interface{}{
"title": "Home",
"content_base64": base64.StdEncoding.EncodeToString([]byte("Welcome")),
},
})
default:
t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path)
}
})
defer server.Close()
ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{
"name": "Home",
})
err := common.RunShortcut(t, Shortcuts(), "view", ctx)
if err != nil {
t.Fatalf("view failed: %v", err)
}
}
func TestWikiCreate(t *testing.T) {
var createPayload map[string]interface{}
server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == "GET" && r.URL.Path == "/owner/repo.json":
common.WriteJSON(t, w, map[string]interface{}{
"id": float64(123),
})
case r.Method == "POST" && r.URL.Path == "/wiki/open/createWiki":
createPayload = common.DecodeJSON(t, r)
common.WriteJSON(t, w, map[string]interface{}{
"code": 201,
"data": map[string]interface{}{"title": "NewPage"},
})
default:
t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path)
}
})
defer server.Close()
ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{
"name": "NewPage",
"content": "Hello Wiki",
})
err := common.RunShortcut(t, Shortcuts(), "create", ctx)
if err != nil {
t.Fatalf("create failed: %v", err)
}
common.AssertEqual(t, createPayload["pageName"], "NewPage")
common.AssertEqual(t, createPayload["owner"], "owner")
common.AssertEqual(t, createPayload["repo"], "repo")
expectedContent := base64.StdEncoding.EncodeToString([]byte("Hello Wiki"))
common.AssertEqual(t, createPayload["content_base64"], expectedContent)
}
func TestWikiUpdate(t *testing.T) {
var updatePayload map[string]interface{}
server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == "GET" && r.URL.Path == "/owner/repo.json":
common.WriteJSON(t, w, map[string]interface{}{
"id": float64(123),
})
case r.Method == "PUT" && r.URL.Path == "/wiki/open/updateWiki":
updatePayload = common.DecodeJSON(t, r)
common.WriteJSON(t, w, map[string]interface{}{
"code": 200,
})
default:
t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path)
}
})
defer server.Close()
ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{
"name": "Home",
"content": "Updated content",
"message": "Update wiki page",
})
err := common.RunShortcut(t, Shortcuts(), "update", ctx)
if err != nil {
t.Fatalf("update failed: %v", err)
}
common.AssertEqual(t, updatePayload["pageName"], "Home")
common.AssertEqual(t, updatePayload["message"], "Update wiki page")
}
func TestWikiDelete(t *testing.T) {
var deletePayload map[string]interface{}
server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) {
switch {
case r.Method == "GET" && r.URL.Path == "/owner/repo.json":
common.WriteJSON(t, w, map[string]interface{}{
"id": float64(123),
})
case r.Method == "DELETE" && r.URL.Path == "/wiki/open/deleteWiki":
deletePayload = common.DecodeJSON(t, r)
common.WriteJSON(t, w, map[string]interface{}{
"code": 204,
})
default:
t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path)
}
})
defer server.Close()
ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{
"name": "OldPage",
})
err := common.RunShortcut(t, Shortcuts(), "delete", ctx)
if err != nil {
t.Fatalf("delete failed: %v", err)
}
common.AssertEqual(t, deletePayload["pageName"], "OldPage")
common.AssertEqual(t, deletePayload["projectId"], float64(123))
}