mirror of
https://github.com/aykhans/dodo.git
synced 2025-09-06 11:04:22 +00:00
refactor config file type
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/url"
|
||||
@@ -173,17 +172,6 @@ func (parser ConfigCLIParser) Parse() (*config.Config, error) {
|
||||
configFileParsed, err := types.ParseConfigFile(configFile)
|
||||
|
||||
_ = utils.HandleErrorOrDie(err,
|
||||
utils.OnSentinelError(types.ErrConfigFileExtensionNotFound, func(err error) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
*types.NewFieldParseError(
|
||||
fmt.Sprintf("config-file[%d]", i),
|
||||
configFile,
|
||||
errors.New("file extension not found"),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
@@ -195,17 +183,6 @@ func (parser ConfigCLIParser) Parse() (*config.Config, error) {
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
utils.OnCustomError(func(err types.UnknownConfigFileTypeError) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
*types.NewFieldParseError(
|
||||
fmt.Sprintf("config-file[%d]", i),
|
||||
configFile,
|
||||
fmt.Errorf("file type '%s' not supported (supported types: %s)", err.Type, types.ConfigFileTypeYAML),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
)
|
||||
|
||||
if err == nil {
|
||||
|
@@ -317,31 +317,24 @@ func TestConfigCLIParser_Parse(t *testing.T) {
|
||||
assert.Len(t, config.Files, 1)
|
||||
})
|
||||
|
||||
t.Run("Parse with config-file flag invalid extension", func(t *testing.T) {
|
||||
t.Run("Parse with config-file flag without extension returns unknown type", func(t *testing.T) {
|
||||
parser := NewConfigCLIParser([]string{"dodo", "-f", "/path/to/config"})
|
||||
config, err := parser.Parse()
|
||||
|
||||
assert.Nil(t, config)
|
||||
var fieldErr types.FieldParseErrors
|
||||
require.ErrorAs(t, err, &fieldErr)
|
||||
assert.Len(t, fieldErr.Errors, 1)
|
||||
assert.Equal(t, "config-file[0]", fieldErr.Errors[0].Field)
|
||||
assert.Equal(t, "/path/to/config", fieldErr.Errors[0].Value)
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "file extension not found")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, types.ConfigFileTypeUnknown, config.Files[0].Type())
|
||||
})
|
||||
|
||||
t.Run("Parse with config-file flag unsupported file type", func(t *testing.T) {
|
||||
t.Run("Parse with config-file flag unsupported file type returns unknown type", func(t *testing.T) {
|
||||
parser := NewConfigCLIParser([]string{"dodo", "-f", "/path/to/config.json"})
|
||||
config, err := parser.Parse()
|
||||
|
||||
assert.Nil(t, config)
|
||||
var fieldErr types.FieldParseErrors
|
||||
require.ErrorAs(t, err, &fieldErr)
|
||||
assert.Len(t, fieldErr.Errors, 1)
|
||||
assert.Equal(t, "config-file[0]", fieldErr.Errors[0].Field)
|
||||
assert.Equal(t, "/path/to/config.json", fieldErr.Errors[0].Value)
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "file type")
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "not supported")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, types.ConfigFileTypeUnknown, config.Files[0].Type())
|
||||
})
|
||||
|
||||
t.Run("Parse with config-file flag remote URL", func(t *testing.T) {
|
||||
|
@@ -35,17 +35,6 @@ func (parser ConfigENVParser) Parse() (*config.Config, error) {
|
||||
configFileParsed, err := types.ParseConfigFile(configFile)
|
||||
|
||||
_ = utils.HandleErrorOrDie(err,
|
||||
utils.OnSentinelError(types.ErrConfigFileExtensionNotFound, func(err error) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
*types.NewFieldParseError(
|
||||
parser.getFullEnvName("CONFIG_FILE"),
|
||||
configFile,
|
||||
errors.New("file extension not found"),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
@@ -57,17 +46,6 @@ func (parser ConfigENVParser) Parse() (*config.Config, error) {
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
utils.OnCustomError(func(err types.UnknownConfigFileTypeError) error {
|
||||
fieldParseErrors = append(
|
||||
fieldParseErrors,
|
||||
*types.NewFieldParseError(
|
||||
parser.getFullEnvName("CONFIG_FILE"),
|
||||
configFile,
|
||||
fmt.Errorf("file type '%s' not supported (supported types: %s)", err.Type, types.ConfigFileTypeYAML),
|
||||
),
|
||||
)
|
||||
return nil
|
||||
}),
|
||||
)
|
||||
|
||||
if err == nil {
|
||||
|
@@ -74,39 +74,34 @@ func TestConfigENVParser_Parse_ConfigFile(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "/path/to/config.yaml", config.Files[0].String())
|
||||
assert.Equal(t, "/path/to/config.yaml", config.Files[0].Path())
|
||||
assert.Equal(t, types.ConfigFileTypeYAML, config.Files[0].Type())
|
||||
})
|
||||
|
||||
t.Run("Parse with config file without extension", func(t *testing.T) {
|
||||
t.Run("Parse with config file without extension returns unknown type", func(t *testing.T) {
|
||||
t.Setenv("CONFIG_FILE", "/path/to/config")
|
||||
|
||||
parser := NewConfigENVParser("")
|
||||
config, err := parser.Parse()
|
||||
|
||||
assert.Nil(t, config)
|
||||
var fieldErr types.FieldParseErrors
|
||||
require.ErrorAs(t, err, &fieldErr)
|
||||
assert.Len(t, fieldErr.Errors, 1)
|
||||
assert.Equal(t, "CONFIG_FILE", fieldErr.Errors[0].Field)
|
||||
assert.Equal(t, "/path/to/config", fieldErr.Errors[0].Value)
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "file extension not found")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "/path/to/config", config.Files[0].Path())
|
||||
assert.Equal(t, types.ConfigFileTypeUnknown, config.Files[0].Type())
|
||||
})
|
||||
|
||||
t.Run("Parse with unsupported config file type", func(t *testing.T) {
|
||||
t.Run("Parse with unsupported config file type returns unknown type", func(t *testing.T) {
|
||||
t.Setenv("CONFIG_FILE", "/path/to/config.json")
|
||||
|
||||
parser := NewConfigENVParser("")
|
||||
config, err := parser.Parse()
|
||||
|
||||
assert.Nil(t, config)
|
||||
var fieldErr types.FieldParseErrors
|
||||
require.ErrorAs(t, err, &fieldErr)
|
||||
assert.Len(t, fieldErr.Errors, 1)
|
||||
assert.Equal(t, "CONFIG_FILE", fieldErr.Errors[0].Field)
|
||||
assert.Equal(t, "/path/to/config.json", fieldErr.Errors[0].Value)
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "file type")
|
||||
assert.Contains(t, fieldErr.Errors[0].Err.Error(), "not supported")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "/path/to/config.json", config.Files[0].Path())
|
||||
assert.Equal(t, types.ConfigFileTypeUnknown, config.Files[0].Type())
|
||||
})
|
||||
|
||||
t.Run("Parse with remote config file URL", func(t *testing.T) {
|
||||
@@ -118,7 +113,7 @@ func TestConfigENVParser_Parse_ConfigFile(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, config)
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "https://example.com/config.yaml", config.Files[0].String())
|
||||
assert.Equal(t, "https://example.com/config.yaml", config.Files[0].Path())
|
||||
assert.Equal(t, types.ConfigFileTypeYAML, config.Files[0].Type())
|
||||
assert.Equal(t, types.ConfigFileLocationRemote, config.Files[0].LocationType())
|
||||
})
|
||||
@@ -661,7 +656,7 @@ func TestConfigENVParser_Parse_AllFields(t *testing.T) {
|
||||
|
||||
// Verify all fields
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "/path/to/config.yaml", config.Files[0].String())
|
||||
assert.Equal(t, "/path/to/config.yaml", config.Files[0].Path())
|
||||
|
||||
require.NotNil(t, config.Yes)
|
||||
assert.True(t, *config.Yes)
|
||||
@@ -728,7 +723,7 @@ func TestConfigENVParser_Parse_AllFields(t *testing.T) {
|
||||
|
||||
// Verify all fields
|
||||
assert.Len(t, config.Files, 1)
|
||||
assert.Equal(t, "/app/config.yml", config.Files[0].String())
|
||||
assert.Equal(t, "/app/config.yml", config.Files[0].Path())
|
||||
|
||||
require.NotNil(t, config.Yes)
|
||||
assert.False(t, *config.Yes)
|
||||
@@ -765,7 +760,7 @@ func TestConfigENVParser_Parse_AllFields(t *testing.T) {
|
||||
func TestConfigENVParser_Parse_MultipleErrors(t *testing.T) {
|
||||
t.Run("Parse with multiple field errors", func(t *testing.T) {
|
||||
// Set multiple invalid values
|
||||
t.Setenv("CONFIG_FILE", "/path/to/config") // Missing extension
|
||||
t.Setenv("CONFIG_FILE", "/path/to/config") // Now this is valid (returns unknown type)
|
||||
t.Setenv("YES", "invalid_bool")
|
||||
t.Setenv("SKIP_VERIFY", "not_a_bool")
|
||||
t.Setenv("URL", "://invalid-url")
|
||||
@@ -782,8 +777,8 @@ func TestConfigENVParser_Parse_MultipleErrors(t *testing.T) {
|
||||
var fieldErr types.FieldParseErrors
|
||||
require.ErrorAs(t, err, &fieldErr)
|
||||
|
||||
// Should have 9 errors
|
||||
assert.Len(t, fieldErr.Errors, 9)
|
||||
// Should have 8 errors (CONFIG_FILE is no longer an error)
|
||||
assert.Len(t, fieldErr.Errors, 8)
|
||||
|
||||
// Check that all expected fields have errors
|
||||
errorFields := make(map[string]bool)
|
||||
@@ -791,7 +786,7 @@ func TestConfigENVParser_Parse_MultipleErrors(t *testing.T) {
|
||||
errorFields[e.Field] = true
|
||||
}
|
||||
|
||||
assert.True(t, errorFields["CONFIG_FILE"])
|
||||
assert.False(t, errorFields["CONFIG_FILE"]) // CONFIG_FILE should not have an error
|
||||
assert.True(t, errorFields["YES"])
|
||||
assert.True(t, errorFields["SKIP_VERIFY"])
|
||||
assert.True(t, errorFields["URL"])
|
||||
|
Reference in New Issue
Block a user