1
0
Files
Skill/manager/internal/config/repository_test.go

160 lines
3.4 KiB
Go

package config
import (
"os"
"testing"
"time"
"skillmgr/internal/types"
)
func setupRepoTestEnv(t *testing.T) (string, func()) {
t.Helper()
tmpDir, err := os.MkdirTemp("", "skillmgr-repo-test-*")
if err != nil {
t.Fatalf("创建临时目录失败: %v", err)
}
os.Setenv("SKILLMGR_TEST_ROOT", tmpDir)
cleanup := func() {
os.Unsetenv("SKILLMGR_TEST_ROOT")
os.RemoveAll(tmpDir)
}
return tmpDir, cleanup
}
func TestLoadRepositoryConfig_Empty(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
cfg, err := LoadRepositoryConfig()
if err != nil {
t.Fatalf("LoadRepositoryConfig 失败: %v", err)
}
if len(cfg.Repositories) != 0 {
t.Errorf("期望空仓库列表,得到 %d 个", len(cfg.Repositories))
}
}
func TestAddRepository_Success(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
repo := types.Repository{
Name: "test-repo",
URL: "https://github.com/test/repo.git",
Branch: "main",
AddedAt: time.Now(),
}
if err := AddRepository(repo); err != nil {
t.Fatalf("AddRepository 失败: %v", err)
}
// 验证已添加
cfg, _ := LoadRepositoryConfig()
if len(cfg.Repositories) != 1 {
t.Errorf("期望 1 个仓库,得到 %d 个", len(cfg.Repositories))
}
if cfg.Repositories[0].Name != "test-repo" {
t.Errorf("期望名称 'test-repo',得到 '%s'", cfg.Repositories[0].Name)
}
}
func TestAddRepository_RejectDuplicate(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
repo := types.Repository{
Name: "test-repo",
URL: "https://github.com/test/repo.git",
Branch: "main",
AddedAt: time.Now(),
}
// 第一次添加
if err := AddRepository(repo); err != nil {
t.Fatalf("第一次 AddRepository 失败: %v", err)
}
// 第二次添加应该失败
err := AddRepository(repo)
if err == nil {
t.Error("期望添加重复仓库时返回错误")
}
}
func TestRemoveRepository_Success(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
repo := types.Repository{
Name: "test-repo",
URL: "https://github.com/test/repo.git",
AddedAt: time.Now(),
}
AddRepository(repo)
if err := RemoveRepository("test-repo"); err != nil {
t.Fatalf("RemoveRepository 失败: %v", err)
}
cfg, _ := LoadRepositoryConfig()
if len(cfg.Repositories) != 0 {
t.Errorf("期望 0 个仓库,得到 %d 个", len(cfg.Repositories))
}
}
func TestRemoveRepository_NotFound(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
// RemoveRepository 实现中,不存在的仓库不报错
err := RemoveRepository("nonexistent")
if err != nil {
t.Errorf("RemoveRepository 不应该报错: %v", err)
}
}
func TestFindRepository_Found(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
repo := types.Repository{
Name: "test-repo",
URL: "https://github.com/test/repo.git",
AddedAt: time.Now(),
}
AddRepository(repo)
found, err := FindRepository("test-repo")
if err != nil {
t.Fatalf("FindRepository 失败: %v", err)
}
if found == nil || found.Name != "test-repo" {
t.Errorf("期望找到 'test-repo'")
}
}
func TestFindRepository_NotFound(t *testing.T) {
_, cleanup := setupRepoTestEnv(t)
defer cleanup()
// FindRepository 实现中,找不到时返回 nil, nil
found, err := FindRepository("nonexistent")
if err != nil {
t.Errorf("FindRepository 不应该报错: %v", err)
}
if found != nil {
t.Errorf("期望返回 nil")
}
}