160 lines
3.4 KiB
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")
|
|
}
|
|
}
|