package configkit_test import ( "encoding/json" "errors" "fmt" "io" "testing" configkit "gitea.maximumdirect.net/eric/ConfigKit" ) var ( _ error = (*configkit.LoadError)(nil) _ fmt.Formatter = configkit.Secret{} _ fmt.Stringer = configkit.Path{} _ json.Marshaler = configkit.Secret{} _ io.WriterTo = (*configkit.SecretsReport)(nil) ) type facadeCompatibilityConfig struct { Value string `yaml:"value"` Derived string `yaml:"derived"` } func TestFacadeCompatibility(t *testing.T) { t.Parallel() constructed := configkit.Options[facadeCompatibilityConfig]{ Definition: configkit.Definition[facadeCompatibilityConfig]{}, Filesystem: &configkit.FilesystemContext{BaseDir: "configs", Root: "configs"}, Overrides: []configkit.Override{{ Path: configkit.Keys("value"), Value: "override", Flag: "--value", }}, } if got := constructed.Overrides[0].Path.String(); got != "/value" { t.Fatalf("constructed override path = %q, want /value", got) } result, err := configkit.Load(configkit.Bytes("facade.yml", []byte("value: input\n")), configkit.Options[facadeCompatibilityConfig]{ Definition: configkit.Definition[facadeCompatibilityConfig]{ Resolve: func(configuration *facadeCompatibilityConfig, resolution *configkit.Resolution) error { configkit.Default(resolution, configkit.Keys("derived"), &configuration.Derived, configuration.Value+" default", "derive value") configkit.Normalize(resolution, configkit.Keys("value"), &configuration.Value, "normalized "+configuration.Value, "normalize value") return nil }, }, }) if err != nil { t.Fatalf("Load() error = %v", err) } if result.Config != (facadeCompatibilityConfig{Value: "normalized input", Derived: "input default"}) { t.Fatalf("Load() Config = %#v", result.Config) } _, err = configkit.Load[facadeCompatibilityConfig](configkit.Bytes("invalid.yml", []byte("value: [\n"))) var loadError *configkit.LoadError if !errors.As(err, &loadError) { t.Fatalf("Load() error = %T, want *configkit.LoadError", err) } }