diff --git a/cmd/server_test.go b/cmd/server_test.go index 52f1fcc251..81b834151d 100644 --- a/cmd/server_test.go +++ b/cmd/server_test.go @@ -213,6 +213,32 @@ func TestExecute_Flags(t *testing.T) { } } +func TestUserConfigAllTested(t *testing.T) { + t.Log("All settings in userConfig should be tested.") + + u := reflect.TypeOf(server.UserConfig{}) + + for i := 0; i < u.NumField(); i++ { + + userConfigKey := u.Field(i).Tag.Get("mapstructure") + t.Run(userConfigKey, func(t *testing.T) { + // By default, we expect all fields in UserConfig to have flags defined in server.go and tested here in server_test.go + // Some fields are too complicated to have flags, so are only expressible in the config yaml + flagKey := u.Field(i).Tag.Get("flag") + if flagKey == "false" { + return + } + // If a setting is configured in server.UserConfig, it should be tested here. If there is no corresponding const + // for specifying the flag, that probably means one *also* needs to be added to server.go + if _, ok := testFlags[userConfigKey]; !ok { + t.Errorf("server.UserConfig has field with mapstructure %s that is not tested, and potentially also not configured as a flag. Either add it to testFlags (and potentially as a const in cmd/server), or remove it from server.UserConfig", userConfigKey) + } + }) + + } + +} + func TestExecute_ConfigFile(t *testing.T) { t.Log("Should use all the values from the config file.") // Use yaml package to quote values that need quoting diff --git a/server/user_config.go b/server/user_config.go index cf2366fb76..977b008610 100644 --- a/server/user_config.go +++ b/server/user_config.go @@ -108,7 +108,7 @@ type UserConfig struct { VarFileAllowlist string `mapstructure:"var-file-allowlist"` VCSStatusName string `mapstructure:"vcs-status-name"` DefaultTFVersion string `mapstructure:"default-tf-version"` - Webhooks []WebhookConfig `mapstructure:"webhooks"` + Webhooks []WebhookConfig `mapstructure:"webhooks" flag:"false"` WebBasicAuth bool `mapstructure:"web-basic-auth"` WebUsername string `mapstructure:"web-username"` WebPassword string `mapstructure:"web-password"`