package main // 覆盖裁决 1.4 在组合根侧的落点:qq-obv11 的四个端所需配置项由 .env 兜底进适配器配置, // 且默认值保持现状(transport=ws、mode=server),不改变已部署行为。 import "testing" // TestChannelAccountsFromEnv_QQObv11FourEnds 验证 env 兜底把 transport / mode / // listen_addr / remote_url / api_base_url / report_path 带进账号配置,并且默认口径不变。 func TestChannelAccountsFromEnv_QQObv11FourEnds(t *testing.T) { for _, k := range []string{ "CHANNEL_QQ_OBV11_TRANSPORT", "CHANNEL_QQ_OBV11_MODE", "CHANNEL_QQ_OBV11_LISTEN_ADDR", "CHANNEL_QQ_OBV11_REMOTE_URL", "CHANNEL_QQ_OBV11_API_BASE_URL", "CHANNEL_QQ_OBV11_REPORT_PATH", } { t.Setenv(k, "") } acct := qqObv11EnvAccount(t) if acct["transport"] != "ws" || acct["mode"] != "server" { t.Fatalf("defaults = transport:%v mode:%v, want ws/server", acct["transport"], acct["mode"]) } t.Setenv("CHANNEL_QQ_OBV11_TRANSPORT", "http") t.Setenv("CHANNEL_QQ_OBV11_MODE", "client") t.Setenv("CHANNEL_QQ_OBV11_API_BASE_URL", "http://127.0.0.1:3000") t.Setenv("CHANNEL_QQ_OBV11_REPORT_PATH", "/onebot/report") list := channelAccountsFromEnv()["qq-obv11"] if len(list) != 1 { t.Fatalf("qq-obv11 env accounts = %d, want 1", len(list)) } acct = list[0].Config if acct["transport"] != "http" || acct["mode"] != "client" { t.Errorf("transport/mode = %v/%v, want http/client", acct["transport"], acct["mode"]) } if acct["api_base_url"] != "http://127.0.0.1:3000" || acct["report_path"] != "/onebot/report" { t.Errorf("api_base_url/report_path = %v/%v, want the env values", acct["api_base_url"], acct["report_path"]) } // 端到端一次:env 配置经 DecodeConfig 进适配器后,四个端的开关仍然在。 built, err := buildAccountAdapter("qq-obv11", list[0], testLog()) if err != nil { t.Fatalf("buildAccountAdapter error: %v", err) } cfg := built.Config() if cfg["transport"] != "http" || cfg["mode"] != "client" { t.Errorf("adapter transport/mode = %v/%v, want http/client", cfg["transport"], cfg["mode"]) } if cfg["apiBaseURL"] != "http://127.0.0.1:3000" || cfg["reportPath"] != "/onebot/report" { t.Errorf("adapter apiBaseURL/reportPath = %v/%v, want the env values", cfg["apiBaseURL"], cfg["reportPath"]) } } // qqObv11EnvAccount 取出 env 兜底里合成的 qq-obv11 账号配置。 func qqObv11EnvAccount(t *testing.T) map[string]any { t.Helper() list := channelAccountsFromEnv()["qq-obv11"] if len(list) != 1 { t.Fatalf("qq-obv11 env accounts = %d, want 1", len(list)) } return list[0].Config }