Add server components
build-winui / winui (push) Has been cancelled

This commit is contained in:
QWQLwToo
2026-06-26 13:28:09 +08:00
parent 7ecc6a8923
commit 079ee4eaeb
168 changed files with 37475 additions and 0 deletions
@@ -0,0 +1,66 @@
package legacy
import (
"context"
"os"
"path/filepath"
"testing"
"ymhut-box/server/unified-management/internal/config"
"ymhut-box/server/unified-management/internal/db"
)
func TestSaveValidateAndRestoreLegacyJSON(t *testing.T) {
root := t.TempDir()
public := filepath.Join(root, "public")
if err := os.MkdirAll(public, 0o755); err != nil {
t.Fatal(err)
}
path := filepath.Join(public, "media-types.json")
if err := os.WriteFile(path, []byte(`{"layout_version":"1","categories":[]}`), 0o644); err != nil {
t.Fatal(err)
}
cfg := &config.Config{
StorageDir: filepath.Join(root, "storage"),
UpdatePublicDir: public,
Database: config.DatabaseConfig{
Provider: "sqlite",
SQLitePath: filepath.Join(root, "storage", "unified.sqlite"),
FailoverEnabled: true,
HealthIntervalSec: 3600,
MaxOpenConns: 1,
MaxIdleConns: 1,
ConnMaxLifetimeSeconds: 60,
},
}
store, err := db.Open(cfg)
if err != nil {
t.Fatal(err)
}
defer store.Close()
service := NewService(cfg, store)
if _, err := service.Validate(context.Background(), "media-types", SaveRequest{Raw: `{"not_categories":[]}`}); err == nil {
t.Fatal("expected validation failure")
}
saved, err := service.Save(context.Background(), "media-types", SaveRequest{Raw: `{"categories":[{"id":"image","name":"Image","subcategories":[]}]}`, Note: "test"}, "admin")
if err != nil {
t.Fatal(err)
}
if saved.Parsed["layout_version"] == nil {
t.Fatal("layout_version was not filled")
}
revisions, err := store.ListLegacyRevisions("media-types", 10)
if err != nil {
t.Fatal(err)
}
if len(revisions) < 2 {
t.Fatalf("expected auto backup and saved revision, got %d", len(revisions))
}
restored, err := service.Restore(context.Background(), "media-types", revisions[len(revisions)-1].ID, "admin")
if err != nil {
t.Fatal(err)
}
if restored.Parsed["categories"] == nil {
t.Fatal("restored document missing categories")
}
}