95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func TestLoadDesktopConfigAtPath_WithMetadata(t *testing.T) {
|
|
dir := t.TempDir()
|
|
configPath := filepath.Join(dir, "config.yaml")
|
|
|
|
cfg := DefaultConfig()
|
|
cfg.Server.Port = 8888
|
|
data, err := yaml.Marshal(cfg)
|
|
require.NoError(t, err)
|
|
require.NoError(t, os.WriteFile(configPath, data, 0o600))
|
|
|
|
loaded, meta, err := loadConfigWithMetadata(loadOptions{
|
|
configPathOverride: configPath,
|
|
useCLI: false,
|
|
useEnv: false,
|
|
useConfigFlag: false,
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 8888, loaded.Server.Port)
|
|
assert.Equal(t, configPath, meta.ConfigPath)
|
|
}
|
|
|
|
func TestSaveConfigToPath(t *testing.T) {
|
|
dir := t.TempDir()
|
|
configPath := filepath.Join(dir, "sub", "config.yaml")
|
|
|
|
cfg := DefaultConfig()
|
|
cfg.Server.Port = 7777
|
|
|
|
err := SaveConfigToPath(cfg, configPath)
|
|
require.NoError(t, err)
|
|
|
|
data, err := os.ReadFile(configPath)
|
|
require.NoError(t, err)
|
|
assert.Contains(t, string(data), "7777")
|
|
}
|
|
|
|
func TestSaveConfigToPath_InvalidDir(t *testing.T) {
|
|
cfg := DefaultConfig()
|
|
err := SaveConfigToPath(cfg, "/dev/null/impossible/config.yaml")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestDurationConversion(t *testing.T) {
|
|
cfg := DefaultConfig()
|
|
dto := configToDTO(cfg)
|
|
|
|
parsed, err := time.ParseDuration(dto.Server.ReadTimeout)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, cfg.Server.ReadTimeout, parsed)
|
|
|
|
parsed, err = time.ParseDuration(dto.Database.ConnMaxLifetime)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, cfg.Database.ConnMaxLifetime, parsed)
|
|
}
|
|
|
|
func configToDTO(c *Config) struct {
|
|
Server struct {
|
|
Port int `json:"port"`
|
|
ReadTimeout string `json:"read_timeout"`
|
|
WriteTimeout string `json:"write_timeout"`
|
|
}
|
|
Database struct {
|
|
ConnMaxLifetime string `json:"conn_max_lifetime"`
|
|
}
|
|
} {
|
|
var result struct {
|
|
Server struct {
|
|
Port int `json:"port"`
|
|
ReadTimeout string `json:"read_timeout"`
|
|
WriteTimeout string `json:"write_timeout"`
|
|
}
|
|
Database struct {
|
|
ConnMaxLifetime string `json:"conn_max_lifetime"`
|
|
}
|
|
}
|
|
result.Server.Port = c.Server.Port
|
|
result.Server.ReadTimeout = c.Server.ReadTimeout.String()
|
|
result.Server.WriteTimeout = c.Server.WriteTimeout.String()
|
|
result.Database.ConnMaxLifetime = c.Database.ConnMaxLifetime.String()
|
|
return result
|
|
}
|