test: add unit tests for database and Gitea client
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
108
internal/database/database_test.go
Normal file
108
internal/database/database_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
20
internal/gitea/client_test.go
Normal file
20
internal/gitea/client_test.go
Normal 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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user