package config import ( "testing" ) // TestLoadMemoryReviewConfigDefaults 锁定 D3「入库前审查」(design/23 §15.1 D3) // 的 env 契约默认值。它们必须与 memory 包的兜底默认值一致 —— 两处不一致会让 // 「没配这个键」与「配了但解析失败」走向不同的行为。 func TestLoadMemoryReviewConfigDefaults(t *testing.T) { cfg, err := LoadMemoryReviewConfig("") if err != nil { t.Fatalf("LoadMemoryReviewConfig() error: %v", err) } if !cfg.Enabled { t.Error("MEMORY_REVIEW_ENABLED 默认应为 true(主人 2026-10-05 裁定「入库前审查」;T0 零模型调用)") } if cfg.QueueSize != 256 { t.Errorf("MEMORY_REVIEW_QUEUE_SIZE = %d, want 256", cfg.QueueSize) } if cfg.ScanLimit != 200 { t.Errorf("MEMORY_REVIEW_SCAN_LIMIT = %d, want 200(§15 D3-4 每条审查有界)", cfg.ScanLimit) } if cfg.TimeoutSec != 20 { t.Errorf("MEMORY_REVIEW_TIMEOUT_SEC = %d, want 20(§15 D3-5 超时即不改写)", cfg.TimeoutSec) } } // TestLoadMemoryReviewConfigEnvOverrides 锁定键名与类型:写进 .env 的旋钮真的 // 生效(键名写错会静默沿用默认值,这类错误只能靠这条用例抓住)。 func TestLoadMemoryReviewConfigEnvOverrides(t *testing.T) { t.Setenv("MEMORY_REVIEW_ENABLED", "false") t.Setenv("MEMORY_REVIEW_QUEUE_SIZE", "8") t.Setenv("MEMORY_REVIEW_SCAN_LIMIT", "32") t.Setenv("MEMORY_REVIEW_TIMEOUT_SEC", "3") cfg, err := LoadMemoryReviewConfig("") if err != nil { t.Fatalf("LoadMemoryReviewConfig() error: %v", err) } if cfg.Enabled || cfg.QueueSize != 8 || cfg.ScanLimit != 32 || cfg.TimeoutSec != 3 { t.Fatalf("MEMORY_REVIEW_* 未生效:%+v", cfg) } }