package config import ( "os" "testing" "gopkg.in/yaml.v2" ) // settings.yml 里的 extend.syb 必须真的能绑进 ExtConfig.SYB。 // // yaml.v2 默认把字段名整体小写当作键名(BaseURL -> baseurl),大小写或拼写 // 一错,配置会静默地保持零值——服务照常启动,直到真去调顺云宝才报一个 // 看不出原因的错。这里直接拿仓库里真实的 settings.yml 校验绑定。 func TestSYBSettingsInRepoBindToExtendStruct(t *testing.T) { raw, err := os.ReadFile("settings.yml") if err != nil { t.Fatalf("读取 settings.yml 失败: %v", err) } var file struct { Settings struct { Extend Extend `yaml:"extend"` } `yaml:"settings"` } if err := yaml.Unmarshal(raw, &file); err != nil { t.Fatalf("解析 settings.yml 失败: %v", err) } syb := file.Settings.Extend.SYB if syb.BaseURL != "https://www.shunyunbaoerp.com" { t.Fatalf("baseurl 没有绑定成功: %q", syb.BaseURL) } if syb.PageSize != 50 { t.Fatalf("pagesize 没有绑定成功: %d", syb.PageSize) } if syb.MaxMatches != 10000 { t.Fatalf("maxmatches 没有绑定成功: %d", syb.MaxMatches) } if syb.OcrURL == "" { t.Fatal("ocrurl 没有绑定成功") } if syb.OcrMaxAttempts != 5 { t.Fatalf("ocrmaxattempts 没有绑定成功: %d", syb.OcrMaxAttempts) } } // `[必须]` 被 Git 跟踪的配置文件里不得出现顺云宝账号密码字段。 func TestSettingsFilesCarryNoSYBCredentials(t *testing.T) { for _, name := range []string{"settings.yml", "settings.full.yml", "settings.demo.yml", "settings.sqlite.yml"} { raw, err := os.ReadFile(name) if err != nil { continue } var file struct { Settings struct { Extend Extend `yaml:"extend"` } `yaml:"settings"` } if err := yaml.Unmarshal(raw, &file); err != nil { t.Fatalf("%s 解析失败: %v", name, err) } if file.Settings.Extend.SYB.Username != "" || file.Settings.Extend.SYB.Password != "" { t.Fatalf("%s 里出现了顺云宝凭据,凭据必须走环境变量", name) } } }