Scout/internal/registry/projects_test.go

111 lines
2.8 KiB
Go

package registry
import (
"strings"
"testing"
)
func TestProjectRegistryKeepsProjectsIsolated(t *testing.T) {
root := t.TempDir()
projects, err := NewProjectRegistry(root)
if err != nil {
t.Fatal(err)
}
_, ssl, err := projects.Ensure("ssl", "SSL", "证书项目")
if err != nil {
t.Fatal(err)
}
_, smail, err := projects.Ensure("smail", "Smail", "邮件项目")
if err != nil {
t.Fatal(err)
}
if _, err := ssl.AddPackage(Package{
Name: "shared",
Version: "1.0.0",
Platform: "linux",
Architecture: "amd64",
Status: "published",
}, strings.NewReader("ssl")); err != nil {
t.Fatal(err)
}
if _, err := smail.AddPackage(Package{
Name: "shared",
Version: "1.0.0",
Platform: "linux",
Architecture: "amd64",
Status: "published",
}, strings.NewReader("smail")); err != nil {
t.Fatal(err)
}
sslItem, ok := ssl.Latest("shared")
if !ok || sslItem.SHA256 == "" {
t.Fatal("SSL 项目未保存包")
}
smailItem, ok := smail.Latest("shared")
if !ok || smailItem.SHA256 == "" {
t.Fatal("Smail 项目未保存包")
}
if sslItem.SHA256 == smailItem.SHA256 {
t.Fatal("不同项目不应共享同一个包内容")
}
if len(projects.List()) != 2 {
t.Fatalf("项目数量错误:%d", len(projects.List()))
}
reloaded, err := NewProjectRegistry(root)
if err != nil {
t.Fatal(err)
}
store, ok := reloaded.Store("ssl")
if !ok {
t.Fatal("重载后找不到 SSL 项目")
}
if item, ok := store.Latest("shared"); !ok || item.SHA256 == "" {
t.Fatalf("项目包重载结果异常:%+v", item)
}
}
func TestValidateProjectID(t *testing.T) {
for _, value := range []string{"ssl", "Smail_2", "release.center"} {
if err := ValidateProjectID(value); err != nil {
t.Errorf("项目标识 %q 不应失败:%v", value, err)
}
}
for _, value := range []string{"", "../ssl", "项目", "a/b"} {
if err := ValidateProjectID(value); err == nil {
t.Errorf("项目标识 %q 应该失败", value)
}
}
}
func TestProjectRegistryUpdatePersistsStatus(t *testing.T) {
root := t.TempDir()
projects, err := NewProjectRegistry(root)
if err != nil {
t.Fatal(err)
}
created, err := projects.Create(Project{ID: "ssl", Name: "SSL", Description: "证书项目"})
if err != nil {
t.Fatal(err)
}
updated, err := projects.Update("ssl", Project{
Name: "SSL 发布中心",
Description: "证书项目更新",
Status: "disabled",
})
if err != nil {
t.Fatal(err)
}
if updated.ID != created.ID || updated.Status != "disabled" || updated.Name != "SSL 发布中心" {
t.Fatalf("项目更新结果错误:%+v", updated)
}
loaded, err := NewProjectRegistry(root)
if err != nil {
t.Fatal(err)
}
persisted, ok := loaded.Get("ssl")
if !ok || persisted.Status != "disabled" || persisted.Description != "证书项目更新" {
t.Fatalf("项目更新未持久化:%+v %v", persisted, ok)
}
}