Files
GitM/internal/database/database_test.go
panw 5eff309a9f feat: 添加同步进度显示和中文界面支持
refactor: 重构同步引擎以支持进度跟踪
style: 更新前端界面为中文
docs: 更新README为中文文档
2026-04-01 10:43:51 +08:00

110 lines
2.3 KiB
Go

package database
import (
"os"
"path/filepath"
"testing"
"gitm/internal/models"
)
func TestDatabase(t *testing.T) {
tmpDB := filepath.Join(os.TempDir(), "test_gitm.db")
defer os.Remove(tmpDB)
if err := Initialize(tmpDB); err != nil {
t.Fatalf("Initialize failed: %v", err)
}
defer Close()
t.Run("Settings", func(t *testing.T) {
if err := SetSetting("test_key", "test_value"); err != nil {
t.Fatal(err)
}
val, err := GetSetting("test_key")
if err != nil {
t.Fatal(err)
}
if val != "test_value" {
t.Errorf("expected test_value, got %s", val)
}
})
t.Run("ServerCRUD", func(t *testing.T) {
s := &models.GiteaServer{Name: "Test", URL: "https://test.com", Token: "tok", Status: "active"}
if err := CreateServer(s); err != nil {
t.Fatal(err)
}
if s.ID == 0 {
t.Error("ID not set")
}
got, err := GetServer(s.ID)
if err != nil {
t.Fatal(err)
}
if got.Name != "Test" {
t.Error("name mismatch")
}
servers, err := GetServers()
if err != nil {
t.Fatal(err)
}
if len(servers) != 1 {
t.Errorf("expected 1, got %d", len(servers))
}
if err := DeleteServer(s.ID); err != nil {
t.Fatal(err)
}
})
t.Run("RepoCRUD", func(t *testing.T) {
s := &models.GiteaServer{Name: "RepoTest", URL: "https://test.com", Token: "tok", Status: "active"}
CreateServer(s)
r := &models.Repo{ServerID: s.ID, Name: "repo1", FullName: "user/repo1", CloneURL: "https://test.com/user/repo1.git", SyncStatus: "pending"}
if err := CreateRepo(r); err != nil {
t.Fatal(err)
}
got, err := GetRepoByFullName(s.ID, "user/repo1")
if err != nil {
t.Fatal(err)
}
if got == nil || got.Name != "repo1" {
t.Error("repo not found")
}
repos, err := GetReposByServer(s.ID)
if err != nil {
t.Fatal(err)
}
if len(repos) != 1 {
t.Errorf("expected 1, got %d", len(repos))
}
DeleteServer(s.ID)
})
t.Run("SyncLogs", func(t *testing.T) {
s := &models.GiteaServer{Name: "LogTest", URL: "https://test.com", Token: "tok", Status: "active"}
CreateServer(s)
l := &models.SyncLog{ServerID: s.ID, Status: "success", Message: "test"}
if err := CreateSyncLog(l); err != nil {
t.Fatal(err)
}
logs, err := GetSyncLogs(s.ID, 10, 0)
if err != nil {
t.Fatal(err)
}
if len(logs) != 1 {
t.Errorf("expected 1, got %d", len(logs))
}
DeleteServer(s.ID)
})
}