refactor config file type

This commit is contained in:
2025-09-05 23:51:21 +04:00
parent 1eb969480b
commit c3292dee5f
8 changed files with 94 additions and 179 deletions

View File

@@ -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"])