All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
62 lines
2.3 KiB
Go
62 lines
2.3 KiB
Go
package systemconfig_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/infrastructure/systemconfig"
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
)
|
|
|
|
func TestRegistryRejectsDuplicateTypeConflictAndInvalidDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
registry := systemconfig.NewRegistry()
|
|
definition := systemconfig.Definition{
|
|
Key: "foundation.example.limit", Module: "foundation", ValueType: constants.SystemConfigTypeInt,
|
|
DefaultValue: "10", Description: "示例限制",
|
|
}
|
|
if err := registry.Register(definition); err != nil {
|
|
t.Fatalf("注册合法配置失败:%v", err)
|
|
}
|
|
if err := registry.Register(definition); err == nil {
|
|
t.Fatal("重复 Key 必须被拒绝")
|
|
}
|
|
conflict := definition
|
|
conflict.ValueType = constants.SystemConfigTypeString
|
|
if err := registry.Register(conflict); err == nil {
|
|
t.Fatal("同 Key 类型冲突必须被拒绝")
|
|
}
|
|
invalid := definition
|
|
invalid.Key = "foundation.example.invalid"
|
|
invalid.DefaultValue = "not-int"
|
|
if err := registry.Register(invalid); err == nil {
|
|
t.Fatal("非法默认值必须在注册阶段失败")
|
|
}
|
|
}
|
|
|
|
func TestValidateValueSupportsFourControlledTypesAndBounds(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
minimum, maximum := int64(1), int64(10)
|
|
cases := []systemconfig.Definition{
|
|
{Key: "a.b.string", Module: "a", ValueType: constants.SystemConfigTypeString, DefaultValue: "x", Description: "字符串"},
|
|
{Key: "a.b.int", Module: "a", ValueType: constants.SystemConfigTypeInt, DefaultValue: "5", Description: "整数", Min: &minimum, Max: &maximum},
|
|
{Key: "a.b.bool", Module: "a", ValueType: constants.SystemConfigTypeBool, DefaultValue: "true", Description: "布尔"},
|
|
{Key: "a.b.json", Module: "a", ValueType: constants.SystemConfigTypeJSON, DefaultValue: `{"enabled":true}`, Description: "JSON"},
|
|
}
|
|
for _, definition := range cases {
|
|
if err := systemconfig.ValidateValue(definition, definition.DefaultValue); err != nil {
|
|
t.Fatalf("合法 %s 值未通过:%v", definition.ValueType, err)
|
|
}
|
|
}
|
|
if err := systemconfig.ValidateValue(cases[1], "11"); err == nil {
|
|
t.Fatal("越界整数必须被拒绝")
|
|
}
|
|
if err := systemconfig.ValidateValue(cases[2], "yes"); err == nil {
|
|
t.Fatal("非法布尔值必须被拒绝")
|
|
}
|
|
if err := systemconfig.ValidateValue(cases[3], "{"); err == nil {
|
|
t.Fatal("非法 JSON 必须被拒绝")
|
|
}
|
|
}
|