package database import ( "context" "os" "path/filepath" "strings" "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 { if strings.Contains(err.Error(), "CGO_ENABLED=0") { t.Skip("go-sqlite3 requires cgo for the database integration test") } 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) } }