feat: add tests for json and toml config

This commit is contained in:
Henrique Dias
2024-07-21 21:41:16 +02:00
parent b16c041d0c
commit 356edb8b93
+79 -14
View File
@@ -8,9 +8,9 @@ import (
"github.com/stretchr/testify/require" "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() tmpDir := t.TempDir()
tmpFile := filepath.Join(tmpDir, "config.yml") tmpFile := filepath.Join(tmpDir, "config"+extension)
err := os.WriteFile(tmpFile, []byte(content), 0666) err := os.WriteFile(tmpFile, []byte(content), 0666)
require.NoError(t, err) require.NoError(t, err)
@@ -24,7 +24,7 @@ func writeAndParseConfig(t *testing.T, content string) *Config {
func TestConfigDefaults(t *testing.T) { func TestConfigDefaults(t *testing.T) {
t.Parallel() t.Parallel()
cfg := writeAndParseConfig(t, "") cfg := writeAndParseConfig(t, "", ".yml")
require.NoError(t, cfg.Validate()) require.NoError(t, cfg.Validate())
require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHeaders) require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHeaders)
@@ -35,6 +35,23 @@ func TestConfigDefaults(t *testing.T) {
func TestConfigCascade(t *testing.T) { func TestConfigCascade(t *testing.T) {
t.Parallel() t.Parallel()
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 := ` content := `
auth: true auth: true
scope: / scope: /
@@ -52,20 +69,68 @@ users:
modify: false modify: false
rules: []` rules: []`
cfg := writeAndParseConfig(t, content) cfg := writeAndParseConfig(t, content, ".yml")
require.NoError(t, cfg.Validate()) require.NoError(t, cfg.Validate())
require.True(t, cfg.Modify) check(t, cfg)
require.Equal(t, "/", cfg.Scope) })
require.Len(t, cfg.Rules, 1)
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) cfg := writeAndParseConfig(t, content, ".json")
require.Equal(t, "/", cfg.Users[0].Scope) require.NoError(t, cfg.Validate())
require.Len(t, cfg.Users[0].Rules, 1)
require.False(t, cfg.Users[1].Modify) check(t, cfg)
require.Equal(t, "/basic", cfg.Users[1].Scope) })
require.Len(t, cfg.Users[1].Rules, 0)
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)
})
} }