67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
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")
|
|
}
|
|
}
|