60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package config_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/shcizo/package-updater/internal/config"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoad_RequiresAPIKey(t *testing.T) {
|
|
t.Setenv("UPDATER_API_KEY", "")
|
|
_, err := config.Load()
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "UPDATER_API_KEY")
|
|
}
|
|
|
|
func TestLoad_AppliesDefaults(t *testing.T) {
|
|
t.Setenv("UPDATER_API_KEY", "secret")
|
|
t.Setenv("STACKS_ROOT", "")
|
|
t.Setenv("PORT", "")
|
|
t.Setenv("LOG_LEVEL", "")
|
|
t.Setenv("UPDATE_TIMEOUT", "")
|
|
t.Setenv("OPT_IN_LABEL", "")
|
|
|
|
cfg, err := config.Load()
|
|
require.NoError(t, err)
|
|
require.Equal(t, "secret", cfg.APIKey)
|
|
require.Equal(t, "/home/shcizo/self-hosted", cfg.StacksRoot)
|
|
require.Equal(t, "8080", cfg.Port)
|
|
require.Equal(t, "info", cfg.LogLevel)
|
|
require.Equal(t, 5*time.Minute, cfg.UpdateTimeout)
|
|
require.Equal(t, "se.shcizo.auto-update", cfg.OptInLabel)
|
|
}
|
|
|
|
func TestLoad_OverridesViaEnv(t *testing.T) {
|
|
t.Setenv("UPDATER_API_KEY", "secret")
|
|
t.Setenv("STACKS_ROOT", "/srv/stacks")
|
|
t.Setenv("PORT", "9090")
|
|
t.Setenv("LOG_LEVEL", "debug")
|
|
t.Setenv("UPDATE_TIMEOUT", "30s")
|
|
t.Setenv("OPT_IN_LABEL", "io.example.update")
|
|
|
|
cfg, err := config.Load()
|
|
require.NoError(t, err)
|
|
require.Equal(t, "/srv/stacks", cfg.StacksRoot)
|
|
require.Equal(t, "9090", cfg.Port)
|
|
require.Equal(t, "debug", cfg.LogLevel)
|
|
require.Equal(t, 30*time.Second, cfg.UpdateTimeout)
|
|
require.Equal(t, "io.example.update", cfg.OptInLabel)
|
|
}
|
|
|
|
func TestLoad_InvalidTimeoutErrors(t *testing.T) {
|
|
t.Setenv("UPDATER_API_KEY", "secret")
|
|
t.Setenv("UPDATE_TIMEOUT", "not-a-duration")
|
|
_, err := config.Load()
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "UPDATE_TIMEOUT")
|
|
}
|