package config import ( "strings" "testing" "time" ) // TestLoad_DocumentGCKeys 钉住文档回收(GC)两个新键(切片 S7)的三态: // 默认(1h / 168h = 7 天)、显式覆盖、以及「0 = 关闭」——后者尤其重要:0 必须被 // 解码成 0(而不是被当成未配置、悄悄回落到默认开启)。 func TestLoad_DocumentGCKeys(t *testing.T) { t.Setenv("JWT_SECRET", strings.Repeat("s", 40)) cfg, err := Load("") if err != nil { t.Fatalf("Load() error: %v", err) } if cfg.Server.DocumentGCInterval != time.Hour { t.Errorf("DocumentGCInterval = %v, want 1h(默认)", cfg.Server.DocumentGCInterval) } if cfg.Server.DocumentRetention != 168*time.Hour { t.Errorf("DocumentRetention = %v, want 168h(默认 7 天)", cfg.Server.DocumentRetention) } t.Setenv("DOCUMENT_GC_INTERVAL", "30m") t.Setenv("DOCUMENT_RETENTION", "24h") cfg, err = Load("") if err != nil { t.Fatalf("Load() with overrides: %v", err) } if cfg.Server.DocumentGCInterval != 30*time.Minute || cfg.Server.DocumentRetention != 24*time.Hour { t.Errorf("覆盖后的取值为 (%v,%v), want (30m,24h)", cfg.Server.DocumentGCInterval, cfg.Server.DocumentRetention) } // 0 = 关闭:必须原样抵达配置(GC 的「关闭」判据是 ≤0)。 t.Setenv("DOCUMENT_GC_INTERVAL", "0") t.Setenv("DOCUMENT_RETENTION", "0") cfg, err = Load("") if err != nil { t.Fatalf("Load() with zeros: %v", err) } if cfg.Server.DocumentGCInterval != 0 || cfg.Server.DocumentRetention != 0 { t.Errorf("显式 0 后的取值为 (%v,%v), want (0,0)(0 = 关闭 GC,不是「回落默认」)", cfg.Server.DocumentGCInterval, cfg.Server.DocumentRetention) } }