veza/veza-backend-api/internal/config/config_test.go
2025-12-03 20:29:37 +01:00

284 lines
7.1 KiB
Go

package config
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLoad(t *testing.T) {
// Sauvegarder les valeurs originales
originalDBPassword := os.Getenv("DB_PASSWORD")
originalJWTSecret := os.Getenv("JWT_SECRET")
originalAppPort := os.Getenv("APP_PORT")
// Nettoyer après le test
defer func() {
if originalDBPassword != "" {
os.Setenv("DB_PASSWORD", originalDBPassword)
} else {
os.Unsetenv("DB_PASSWORD")
}
if originalJWTSecret != "" {
os.Setenv("JWT_SECRET", originalJWTSecret)
} else {
os.Unsetenv("JWT_SECRET")
}
if originalAppPort != "" {
os.Setenv("APP_PORT", originalAppPort)
} else {
os.Unsetenv("APP_PORT")
}
}()
// Définir les variables requises
os.Setenv("DB_PASSWORD", "test_password")
os.Setenv("JWT_SECRET", "test_secret")
config, err := Load()
require.NoError(t, err)
require.NotNil(t, config)
// Vérifier les valeurs par défaut
assert.Equal(t, 8080, config.AppPort)
assert.Equal(t, "development", config.AppEnv)
assert.Equal(t, "localhost", config.DBHost)
assert.Equal(t, 5432, config.DBPort)
assert.Equal(t, "veza", config.DBUser)
assert.Equal(t, "veza_db", config.DBName)
assert.Equal(t, "redis://localhost:6379", config.RedisURL)
// Vérifier les valeurs requises
assert.Equal(t, "test_password", config.DBPassword)
assert.Equal(t, "test_secret", config.JWTSecret)
}
func TestLoad_WithCustomValues(t *testing.T) {
// Sauvegarder les valeurs originales
originalDBPassword := os.Getenv("DB_PASSWORD")
originalJWTSecret := os.Getenv("JWT_SECRET")
originalAppPort := os.Getenv("APP_PORT")
originalDBHost := os.Getenv("DB_HOST")
originalDBPort := os.Getenv("DB_PORT")
// Nettoyer après le test
defer func() {
if originalDBPassword != "" {
os.Setenv("DB_PASSWORD", originalDBPassword)
} else {
os.Unsetenv("DB_PASSWORD")
}
if originalJWTSecret != "" {
os.Setenv("JWT_SECRET", originalJWTSecret)
} else {
os.Unsetenv("JWT_SECRET")
}
if originalAppPort != "" {
os.Setenv("APP_PORT", originalAppPort)
} else {
os.Unsetenv("APP_PORT")
}
if originalDBHost != "" {
os.Setenv("DB_HOST", originalDBHost)
} else {
os.Unsetenv("DB_HOST")
}
if originalDBPort != "" {
os.Setenv("DB_PORT", originalDBPort)
} else {
os.Unsetenv("DB_PORT")
}
}()
// Définir des valeurs personnalisées
os.Setenv("DB_PASSWORD", "custom_password")
os.Setenv("JWT_SECRET", "custom_secret")
os.Setenv("APP_PORT", "9090")
os.Setenv("DB_HOST", "custom_host")
os.Setenv("DB_PORT", "3306")
config, err := Load()
require.NoError(t, err)
assert.Equal(t, 9090, config.AppPort)
assert.Equal(t, "custom_host", config.DBHost)
assert.Equal(t, 3306, config.DBPort)
assert.Equal(t, "custom_password", config.DBPassword)
assert.Equal(t, "custom_secret", config.JWTSecret)
}
func TestLoad_MissingRequiredVariable_DBPassword(t *testing.T) {
// Sauvegarder les valeurs originales
originalDBPassword := os.Getenv("DB_PASSWORD")
originalJWTSecret := os.Getenv("JWT_SECRET")
// Nettoyer après le test
defer func() {
if originalDBPassword != "" {
os.Setenv("DB_PASSWORD", originalDBPassword)
} else {
os.Unsetenv("DB_PASSWORD")
}
if originalJWTSecret != "" {
os.Setenv("JWT_SECRET", originalJWTSecret)
} else {
os.Unsetenv("JWT_SECRET")
}
}()
// Supprimer les variables requises
os.Unsetenv("DB_PASSWORD")
os.Setenv("JWT_SECRET", "test_secret")
// Devrait paniquer
assert.Panics(t, func() {
_, _ = Load()
}, "Should panic when DB_PASSWORD is missing")
}
func TestLoad_MissingRequiredVariable_JWTSecret(t *testing.T) {
// Sauvegarder les valeurs originales
originalDBPassword := os.Getenv("DB_PASSWORD")
originalJWTSecret := os.Getenv("JWT_SECRET")
// Nettoyer après le test
defer func() {
if originalDBPassword != "" {
os.Setenv("DB_PASSWORD", originalDBPassword)
} else {
os.Unsetenv("DB_PASSWORD")
}
if originalJWTSecret != "" {
os.Setenv("JWT_SECRET", originalJWTSecret)
} else {
os.Unsetenv("JWT_SECRET")
}
}()
// Supprimer les variables requises
os.Setenv("DB_PASSWORD", "test_password")
os.Unsetenv("JWT_SECRET")
// Devrait paniquer
assert.Panics(t, func() {
_, _ = Load()
}, "Should panic when JWT_SECRET is missing")
}
func TestGetEnv(t *testing.T) {
// Sauvegarder la valeur originale
originalValue := os.Getenv("TEST_VAR")
defer func() {
if originalValue != "" {
os.Setenv("TEST_VAR", originalValue)
} else {
os.Unsetenv("TEST_VAR")
}
}()
// Test avec valeur définie
os.Setenv("TEST_VAR", "test_value")
assert.Equal(t, "test_value", getEnv("TEST_VAR", "default"))
// Test sans valeur (devrait retourner défaut)
os.Unsetenv("TEST_VAR")
assert.Equal(t, "default", getEnv("TEST_VAR", "default"))
}
func TestGetEnvInt(t *testing.T) {
// Sauvegarder la valeur originale
originalValue := os.Getenv("TEST_INT")
defer func() {
if originalValue != "" {
os.Setenv("TEST_INT", originalValue)
} else {
os.Unsetenv("TEST_INT")
}
}()
// Test avec valeur entière valide
os.Setenv("TEST_INT", "42")
assert.Equal(t, 42, getEnvInt("TEST_INT", 10))
// Test sans valeur (devrait retourner défaut)
os.Unsetenv("TEST_INT")
assert.Equal(t, 10, getEnvInt("TEST_INT", 10))
// Test avec valeur invalide (devrait retourner défaut)
os.Setenv("TEST_INT", "not_a_number")
assert.Equal(t, 10, getEnvInt("TEST_INT", 10))
}
func TestGetEnvRequired(t *testing.T) {
// Sauvegarder la valeur originale
originalValue := os.Getenv("TEST_REQUIRED")
defer func() {
if originalValue != "" {
os.Setenv("TEST_REQUIRED", originalValue)
} else {
os.Unsetenv("TEST_REQUIRED")
}
}()
// Test avec valeur définie
os.Setenv("TEST_REQUIRED", "required_value")
assert.Equal(t, "required_value", getEnvRequired("TEST_REQUIRED"))
// Test sans valeur (devrait paniquer)
os.Unsetenv("TEST_REQUIRED")
assert.Panics(t, func() {
_ = getEnvRequired("TEST_REQUIRED")
}, "Should panic when required variable is missing")
}
func TestLoad_DefaultValues(t *testing.T) {
// Sauvegarder les valeurs originales
originalDBPassword := os.Getenv("DB_PASSWORD")
originalJWTSecret := os.Getenv("JWT_SECRET")
originalAppEnv := os.Getenv("APP_ENV")
originalRedisURL := os.Getenv("REDIS_URL")
// Nettoyer après le test
defer func() {
if originalDBPassword != "" {
os.Setenv("DB_PASSWORD", originalDBPassword)
} else {
os.Unsetenv("DB_PASSWORD")
}
if originalJWTSecret != "" {
os.Setenv("JWT_SECRET", originalJWTSecret)
} else {
os.Unsetenv("JWT_SECRET")
}
if originalAppEnv != "" {
os.Setenv("APP_ENV", originalAppEnv)
} else {
os.Unsetenv("APP_ENV")
}
if originalRedisURL != "" {
os.Setenv("REDIS_URL", originalRedisURL)
} else {
os.Unsetenv("REDIS_URL")
}
}()
// Définir seulement les variables requises
os.Setenv("DB_PASSWORD", "test")
os.Setenv("JWT_SECRET", "secret")
// Supprimer les variables optionnelles pour tester les valeurs par défaut
os.Unsetenv("APP_ENV")
os.Unsetenv("REDIS_URL")
config, err := Load()
require.NoError(t, err)
// Vérifier que les valeurs par défaut sont utilisées
assert.Equal(t, "development", config.AppEnv)
assert.Equal(t, "redis://localhost:6379", config.RedisURL)
}