82 lines
2.4 KiB
Go
82 lines
2.4 KiB
Go
package skills
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"infinite-canvas/backend/internal/model"
|
|
"infinite-canvas/backend/internal/repository"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestBuiltinMarkdownPackagesPreserveHistoryAndUserState(t *testing.T) {
|
|
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "skills.db")), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { _ = sqlDB.Close() })
|
|
if err := db.AutoMigrate(&model.Skill{}, &model.UserSkillState{}, &model.SkillVersion{}, &model.SkillFile{}, &model.BuiltinSkillTombstone{}, &model.User{}, &model.UserIdentity{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
svc := New(repository.New(db), t.TempDir(), nil)
|
|
packages, err := loadBuiltinSkillPackages(nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := svc.EnsureBuiltinSkills(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := svc.EnsureSkillPackages(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
const historyID = "16000000000081"
|
|
state := model.UserSkillState{ID: "test-state", UserID: "test-user", SkillID: historyID, Added: true, Liked: true}
|
|
if err := db.Create(&state).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := svc.EnsureBuiltinSkills(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var count int64
|
|
if err := db.Model(&model.Skill{}).Count(&count).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if count != int64(len(packages)) {
|
|
t.Fatalf("builtin skill count = %d, want %d", count, len(packages))
|
|
}
|
|
var saved model.UserSkillState
|
|
if err := db.First(&saved, "id = ?", state.ID).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !saved.Added || !saved.Liked {
|
|
t.Fatalf("user state lost: %#v", saved)
|
|
}
|
|
var skill model.Skill
|
|
if err := db.First(&skill, "id = ?", historyID).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if skill.CurrentVersionID == "" || skill.FileCount < 1 {
|
|
t.Fatalf("history skill package not initialized: %#v", skill)
|
|
}
|
|
}
|
|
|
|
func TestBuiltinSkillPackageMetadataParser(t *testing.T) {
|
|
body := []byte("---\nname: 测试\ndescription: 描述\nmetadata:\n version: \"1.0.0\"\n tag: drama\n---\n\n正文\n")
|
|
metadata, err := parseBuiltinSkillMetadata(body)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if metadata.Name != "测试" || metadata.Description != "描述" || metadata.Version != "1.0.0" || metadata.Tag != "drama" {
|
|
t.Fatalf("metadata = %#v", metadata)
|
|
}
|
|
if _, err := parseBuiltinSkillMetadata([]byte("# no frontmatter")); err == nil {
|
|
t.Fatal("expected missing frontmatter error")
|
|
}
|
|
}
|