57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"home-vue-go/internal/config"
|
|
)
|
|
|
|
func TestSiteSettingsMigrationAndBooleanPersistence(t *testing.T) {
|
|
dataDir := t.TempDir()
|
|
writeJSON := func(name, value string) {
|
|
t.Helper()
|
|
if err := os.WriteFile(filepath.Join(dataDir, name), []byte(value), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
writeJSON("footer_year.json", `{"start":"2020","end":"2024"}`)
|
|
writeJSON("visit_timer.json", `{"showVisitTimer":false}`)
|
|
writeJSON("rotating_texts.json", `{"texts":["legacy text"]}`)
|
|
|
|
cfg := config.New(dataDir)
|
|
db, err := Init(cfg.DatabasePath, cfg)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
settings, err := db.LoadSiteSettings(context.Background())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if settings.FooterYearStart != "2020" || settings.FooterYearEnd != "2024" || settings.ShowVisitTimer || len(settings.RotatingTexts) != 1 {
|
|
t.Fatalf("legacy settings were not migrated: %+v", settings)
|
|
}
|
|
|
|
settings.ShowAbout = false
|
|
settings.ShowSites = false
|
|
settings.ShowContacts = false
|
|
settings.ShowThemeToggle = false
|
|
settings.ShowFooter = false
|
|
settings.AnalyticsProvider = "umami"
|
|
settings.UmamiCredential = "v1:stored-secret"
|
|
if err := db.SaveSiteSettings(context.Background(), settings); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
loaded, err := db.LoadSiteSettings(context.Background())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if loaded.ShowAbout || loaded.ShowSites || loaded.ShowContacts || loaded.ShowThemeToggle || loaded.ShowFooter || loaded.AnalyticsProvider != "umami" || loaded.UmamiCredential != "v1:stored-secret" {
|
|
t.Fatalf("false values or private payload were not persisted: %+v", loaded)
|
|
}
|
|
}
|