81 lines
2.9 KiB
Go
81 lines
2.9 KiB
Go
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
|
|
}
|