完成一个简易的全局skill、command管理器
This commit is contained in:
159
manager/internal/config/repository_test.go
Normal file
159
manager/internal/config/repository_test.go
Normal file
@@ -0,0 +1,159 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user