Files
Agent-System/internal/sysadmin/store_pg_test.go
T
weichen f1404d5bd2 feat(sysadmin): add system admin aggregation API and system_settings store
- new internal/sysadmin package (overview/kb/features/settings) with small
  port interfaces; business packages stay unaware of sysadmin
- new routes /api/v1/admin/system/{overview,kb,features,settings} guarded
  by requireSystemAdmin
- goose 00049: system_settings table (key/jsonb value, updated_by/at)
- SettingSpec whitelist registry with DB > env > default precedence
- register sysadmin in module-boundaries.yaml (archtest rules)
2026-09-17 06:56:46 +00:00

58 lines
1.5 KiB
Go

package sysadmin
import (
"context"
"encoding/json"
"testing"
"chat-agent-system/internal/db"
"github.com/jackc/pgx/v5/pgxpool"
)
func TestPGSettingsStore_RoundTrip(t *testing.T) {
dsn := db.SkipIfNoTestDatabaseURL(t)
db.RefuseSharedEnvDSN(t, dsn)
ctx := context.Background()
pool, err := pgxpool.New(ctx, dsn)
if err != nil {
t.Fatalf("connect: %v", err)
}
defer pool.Close()
if err := db.RunMigrationsOnceForTest(ctx, pool, dsn); err != nil {
t.Fatalf("migrate: %v", err)
}
store := newPGSettingsStore(pool)
key := "ui.maintenance_notice"
if _, _, _, err := store.Get(ctx, key); err != ErrSettingNotFound {
t.Fatalf("expected ErrSettingNotFound, got %v", err)
}
if _, err := store.Upsert(ctx, key, json.RawMessage(`"维护中"`), 1); err != nil {
t.Fatalf("upsert: %v", err)
}
raw, updatedBy, updatedAt, err := store.Get(ctx, key)
if err != nil {
t.Fatalf("get: %v", err)
}
if string(raw) != `"维护中"` {
t.Fatalf("unexpected value: %s", raw)
}
if updatedBy == nil || *updatedBy != 1 {
t.Fatalf("expected updatedBy=1, got %+v", updatedBy)
}
if updatedAt == nil {
t.Fatal("expected updatedAt")
}
if _, err := store.Upsert(ctx, key, json.RawMessage(`"恢复"`), 2); err != nil {
t.Fatalf("second upsert: %v", err)
}
raw, updatedBy, _, err = store.Get(ctx, key)
if err != nil {
t.Fatalf("get after overwrite: %v", err)
}
if string(raw) != `"恢复"` || updatedBy == nil || *updatedBy != 2 {
t.Fatalf("expected overwrite, got %s by %+v", raw, updatedBy)
}
}