From 356edb8b93a07633e161e31418b8d222a86bcbcc Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 21 Jul 2024 21:41:16 +0200 Subject: [PATCH] feat: add tests for json and toml config --- lib/config_test.go | 97 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 16 deletions(-) diff --git a/lib/config_test.go b/lib/config_test.go index 6e7ec63..4e3fb00 100644 --- a/lib/config_test.go +++ b/lib/config_test.go @@ -8,9 +8,9 @@ import ( "github.com/stretchr/testify/require" ) -func writeAndParseConfig(t *testing.T, content string) *Config { +func writeAndParseConfig(t *testing.T, content, extension string) *Config { tmpDir := t.TempDir() - tmpFile := filepath.Join(tmpDir, "config.yml") + tmpFile := filepath.Join(tmpDir, "config"+extension) err := os.WriteFile(tmpFile, []byte(content), 0666) require.NoError(t, err) @@ -24,7 +24,7 @@ func writeAndParseConfig(t *testing.T, content string) *Config { func TestConfigDefaults(t *testing.T) { t.Parallel() - cfg := writeAndParseConfig(t, "") + cfg := writeAndParseConfig(t, "", ".yml") require.NoError(t, cfg.Validate()) require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHeaders) @@ -35,7 +35,24 @@ func TestConfigDefaults(t *testing.T) { func TestConfigCascade(t *testing.T) { t.Parallel() - content := ` + check := func(t *testing.T, cfg *Config) { + require.True(t, cfg.Modify) + require.Equal(t, "/", cfg.Scope) + require.Len(t, cfg.Rules, 1) + + require.Len(t, cfg.Users, 2) + + require.True(t, cfg.Users[0].Modify) + require.Equal(t, "/", cfg.Users[0].Scope) + require.Len(t, cfg.Users[0].Rules, 1) + + require.False(t, cfg.Users[1].Modify) + require.Equal(t, "/basic", cfg.Users[1].Scope) + require.Len(t, cfg.Users[1].Rules, 0) + } + + t.Run("YAML", func(t *testing.T) { + content := ` auth: true scope: / modify: true @@ -52,20 +69,68 @@ users: modify: false rules: []` - cfg := writeAndParseConfig(t, content) - require.NoError(t, cfg.Validate()) + cfg := writeAndParseConfig(t, content, ".yml") + require.NoError(t, cfg.Validate()) - require.True(t, cfg.Modify) - require.Equal(t, "/", cfg.Scope) - require.Len(t, cfg.Rules, 1) + check(t, cfg) + }) - require.Len(t, cfg.Users, 2) + t.Run("JSON", func(t *testing.T) { + content := `{ + "auth": true, + "scope": "/", + "modify": true, + "rules": [ + { + "path": "/public/access/", + "modify": true + } + ], + "users": [ + { + "username": "admin", + "password": "admin" + }, + { + "username": "basic", + "password": "basic", + "scope": "/basic", + "modify": false, + "rules": [] + } + ] +}` - require.True(t, cfg.Users[0].Modify) - require.Equal(t, "/", cfg.Users[0].Scope) - require.Len(t, cfg.Users[0].Rules, 1) + cfg := writeAndParseConfig(t, content, ".json") + require.NoError(t, cfg.Validate()) - require.False(t, cfg.Users[1].Modify) - require.Equal(t, "/basic", cfg.Users[1].Scope) - require.Len(t, cfg.Users[1].Rules, 0) + check(t, cfg) + }) + + t.Run("`TOML", func(t *testing.T) { + content := `auth = true +scope = "/" +modify = true + +[[rules]] +path = "/public/access/" +modify = true + +[[users]] +username = "admin" +password = "admin" + +[[users]] +username = "basic" +password = "basic" +scope = "/basic" +modify = false +rules = [ ] +` + + cfg := writeAndParseConfig(t, content, ".toml") + require.NoError(t, cfg.Validate()) + + check(t, cfg) + }) }