mirror of
https://github.com/hacdias/webdav.git
synced 2026-09-22 03:20:41 +08:00
feat: add tests for json and toml config
This commit is contained in:
+81
-16
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user