package db import ( "path/filepath" "testing" "time" "ymhut-box/server/unified-management/internal/config" ) func TestFeedbackSummaryPageOmitsHeavyDetailFields(t *testing.T) { store := openAdminPerformanceStore(t) defer store.Close() item := Feedback{Code: "FB-SUMMARY-1", Title: "Summary", Body: "large private body", SummaryText: "short", Status: "new"} if err := store.InsertFeedback(item); err != nil { t.Fatal(err) } items, total, err := store.ListFeedbackSummariesFiltered(1, 20, FeedbackFilters{}) if err != nil || total != 1 || len(items) != 1 { t.Fatalf("summary list total=%d items=%d err=%v", total, len(items), err) } if items[0].Body != "" || items[0].SummaryText != "short" { t.Fatalf("summary list loaded heavy fields: %#v", items[0]) } detail, err := store.GetFeedback("FB-SUMMARY-1") if err != nil || detail.Body != "large private body" { t.Fatalf("detail body=%q err=%v", detail.Body, err) } } func TestSystemLogsUseFilteredDatabasePagination(t *testing.T) { store := openAdminPerformanceStore(t) defer store.Close() if err := store.InsertAudit(AuditLog{Actor: "admin", Type: "release.saved", Target: "2.0", Message: "published"}); err != nil { t.Fatal(err) } if err := store.RecordSourceCall(SourceCall{SourceID: "music", Status: "ok", LatencyMS: 30, Client: "test"}); err != nil { t.Fatal(err) } page, err := store.ListSystemLogsPage(SystemLogFilters{Page: 1, PerPage: 1}) if err != nil || page.Total < 2 || len(page.Items) != 1 { t.Fatalf("system log page=%#v err=%v", page, err) } filtered, err := store.ListSystemLogsPage(SystemLogFilters{Page: 1, PerPage: 10, Category: "client", Query: "music"}) if err != nil || filtered.Total != 1 || filtered.Items[0].Category != "client" { t.Fatalf("filtered system logs=%#v err=%v", filtered, err) } } func TestDashboardWindowIncludesSummaryAndGeneratedMetadata(t *testing.T) { store := openAdminPerformanceStore(t) defer store.Close() source, err := store.UpsertSource(Source{CategoryID: "network", CategoryName: "网络", SourceID: "status", Name: "状态", APIURL: "https://example.com", Enabled: true, EnabledSet: true, ClientVisible: true, ClientVisibleSet: true}) if err != nil { t.Fatal(err) } if err := store.RecordSourceCheck(source.ID, "ok", 42, ""); err != nil { t.Fatal(err) } overview, err := store.DashboardOverviewWindow(60, time.Now().UTC().Add(-time.Hour).Format(time.RFC3339)) if err != nil { t.Fatal(err) } if overview["generatedAt"] == "" || len(overview["sourceRows"].([]map[string]any)) != 1 { t.Fatalf("dashboard metadata missing: %#v", overview) } } func openAdminPerformanceStore(t *testing.T) *Store { t.Helper() root := t.TempDir() store, err := Open(&config.Config{ StorageDir: root, Database: config.DatabaseConfig{Provider: "sqlite", SQLitePath: filepath.Join(root, "admin-performance.sqlite"), HealthIntervalSec: 3600, MaxOpenConns: 2, MaxIdleConns: 1}, }) if err != nil { t.Fatal(err) } return store }