test: add unit tests for database and Gitea client

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
panw
2026-03-31 16:44:43 +08:00
parent 932b367806
commit 6e8cbb38d4
2 changed files with 128 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
package database
import (
"os"
"testing"
"gitm/internal/models"
)
func TestDatabase(t *testing.T) {
tmpDB := "/tmp/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)
})
}

View File

@@ -0,0 +1,20 @@
package gitea
import "testing"
func TestNewClient(t *testing.T) {
client, err := NewClient("https://gitea.com", "")
if err != nil {
t.Fatal(err)
}
if client == nil {
t.Error("client is nil")
}
}
func TestNewClientInvalidURL(t *testing.T) {
_, err := NewClient("://invalid", "")
if err == nil {
t.Error("expected error for invalid URL")
}
}