重构项目

This commit is contained in:
dragon
2025-05-08 17:36:24 +08:00
parent ddd5d4af5b
commit 9413188aa9
15 changed files with 404 additions and 103 deletions

80
tests/core/dummy.go Normal file
View File

@@ -0,0 +1,80 @@
package core
import (
"bytes"
"io"
"mime"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strconv"
"time"
"gopkg.d7z.net/gitea-pages/pkg/core"
)
type ProviderDummy struct {
BaseDir string `yaml:"workdir"`
}
func NewDummy() (*ProviderDummy, error) {
temp, err := os.MkdirTemp("", "dummy")
if err != nil {
return nil, err
}
return &ProviderDummy{
BaseDir: temp,
}, nil
}
func (p *ProviderDummy) Repos(owner string) (map[string]string, error) {
dir, err := os.ReadDir(filepath.Join(p.BaseDir, owner))
if err != nil {
return nil, err
}
repos := make(map[string]string)
for _, d := range dir {
if d.IsDir() {
repos[d.Name()] = "main"
}
}
return repos, nil
}
func (p *ProviderDummy) Branches(owner, repo string) (map[string]*core.BranchInfo, error) {
dir, err := os.ReadDir(filepath.Join(p.BaseDir, owner, repo))
if err != nil {
return nil, err
}
branches := make(map[string]*core.BranchInfo)
for _, d := range dir {
if d.IsDir() {
branches[d.Name()] = &core.BranchInfo{
ID: d.Name(),
LastModified: time.Time{},
}
}
}
return branches, nil
}
func (p *ProviderDummy) Open(_ *http.Client, owner, repo, commit, path string, _ http.Header) (*http.Response, error) {
open, err := os.Open(filepath.Join(p.BaseDir, owner, repo, commit, path))
if err != nil {
return nil, err
}
all, err := io.ReadAll(open)
defer open.Close()
recorder := httptest.NewRecorder()
recorder.Body = bytes.NewBuffer(all)
recorder.Header().Add("Content-Type", mime.TypeByExtension(filepath.Ext(path)))
stat, _ := open.Stat()
recorder.Header().Add("Content-Length", strconv.FormatInt(stat.Size(), 10))
recorder.Header().Add("Last-Modified", stat.ModTime().Format(http.TimeFormat))
return recorder.Result(), nil
}
func (p *ProviderDummy) Close() error {
return os.RemoveAll(p.BaseDir)
}

78
tests/core/test.go Normal file
View File

@@ -0,0 +1,78 @@
package core
import (
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"go.uber.org/zap"
"gopkg.d7z.net/gitea-pages/pkg"
)
type TestServer struct {
server *pkg.Server
dummy *ProviderDummy
}
type SvcOpts func(options *pkg.ServerOptions)
func NewDefaultTestServer() *TestServer {
return NewTestServer("example.com")
}
func NewTestServer(domain string, opts ...SvcOpts) *TestServer {
atom := zap.NewAtomicLevel()
atom.SetLevel(zap.DebugLevel)
cfg := zap.NewProductionConfig()
cfg.Level = atom
logger, _ := cfg.Build()
zap.ReplaceGlobals(logger)
options := pkg.DefaultOptions(domain)
for _, opt := range opts {
opt(&options)
}
dummy, err := NewDummy()
if err != nil {
zap.S().Fatal(err)
}
server := pkg.NewPageServer(dummy, options)
return &TestServer{
dummy: dummy,
server: server,
}
}
func (t *TestServer) AddFile(path, data string) {
join := filepath.Join(t.dummy.BaseDir, path)
err := os.MkdirAll(filepath.Dir(join), 0o755)
if err != nil {
panic(err)
}
err = os.WriteFile(join, []byte(data), 0o644)
if err != nil {
panic(err)
}
}
func (t *TestServer) OpenFile(url string) ([]byte, *http.Response, error) {
recorder := httptest.NewRecorder()
t.server.ServeHTTP(recorder, httptest.NewRequest("GET", url, nil))
response := recorder.Result()
if response.Body != nil {
defer response.Body.Close()
}
if response.StatusCode != http.StatusOK {
return nil, response, fmt.Errorf(response.Status)
}
all, _ := io.ReadAll(response.Body)
return all, response, nil
}
func (t *TestServer) Close() error {
return t.server.Close()
}

18
tests/get_meta_test.go Normal file
View File

@@ -0,0 +1,18 @@
package tests
import (
"testing"
"github.com/stretchr/testify/assert"
"gopkg.d7z.net/gitea-pages/tests/core"
)
func Test_get_simple_html(t *testing.T) {
server := core.NewDefaultTestServer()
defer server.Close()
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
assert.NoError(t, err)
assert.Equal(t, "hello world", string(data))
}