108 lines
2.7 KiB
Go
108 lines
2.7 KiB
Go
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestLoadEnvFiles(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
env string
|
||
|
|
wantErr bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "development environment",
|
||
|
|
env: "development",
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "production environment",
|
||
|
|
env: "production",
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "test environment",
|
||
|
|
env: "test",
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "environment without file (should not error)",
|
||
|
|
env: "staging",
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "custom environment",
|
||
|
|
env: "custom",
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, tt := range tests {
|
||
|
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
|
// Sauvegarder la valeur originale de TEST_VAR si elle existe
|
||
|
|
originalValue := os.Getenv("TEST_VAR")
|
||
|
|
defer func() {
|
||
|
|
if originalValue != "" {
|
||
|
|
os.Setenv("TEST_VAR", originalValue)
|
||
|
|
} else {
|
||
|
|
os.Unsetenv("TEST_VAR")
|
||
|
|
}
|
||
|
|
}()
|
||
|
|
|
||
|
|
// Unset TEST_VAR avant le test pour éviter les valeurs système
|
||
|
|
os.Unsetenv("TEST_VAR")
|
||
|
|
|
||
|
|
// Test: LoadEnvFiles ne devrait pas causer d'erreur même si les fichiers n'existent pas
|
||
|
|
err := LoadEnvFiles(tt.env)
|
||
|
|
if tt.wantErr {
|
||
|
|
require.Error(t, err)
|
||
|
|
} else {
|
||
|
|
// Si le fichier n'existe pas, ce n'est pas une erreur
|
||
|
|
require.NoError(t, err)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestLoadEnvFiles_Priority(t *testing.T) {
|
||
|
|
// Tester que les variables d'environnement système ont priorité sur les fichiers .env
|
||
|
|
// Sauvegarder la valeur originale
|
||
|
|
originalValue := os.Getenv("TEST_PRIORITY")
|
||
|
|
defer func() {
|
||
|
|
if originalValue != "" {
|
||
|
|
os.Setenv("TEST_PRIORITY", originalValue)
|
||
|
|
} else {
|
||
|
|
os.Unsetenv("TEST_PRIORITY")
|
||
|
|
}
|
||
|
|
}()
|
||
|
|
|
||
|
|
// Définir variable système avant de charger les fichiers
|
||
|
|
os.Setenv("TEST_PRIORITY", "system_value")
|
||
|
|
|
||
|
|
// Charger les fichiers (même si .env.development n'existe pas, ça ne devrait pas causer d'erreur)
|
||
|
|
err := LoadEnvFiles("development")
|
||
|
|
require.NoError(t, err)
|
||
|
|
|
||
|
|
// La variable système doit toujours être présente (godotenv ne surcharge pas les variables existantes)
|
||
|
|
value := os.Getenv("TEST_PRIORITY")
|
||
|
|
assert.Equal(t, "system_value", value, "System environment variable should have priority")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestLoadEnvFiles_NoErrorOnMissingFile(t *testing.T) {
|
||
|
|
// Tester que LoadEnvFiles ne cause pas d'erreur si les fichiers n'existent pas
|
||
|
|
err := LoadEnvFiles("nonexistent_env_12345")
|
||
|
|
// Ne devrait pas causer d'erreur si les fichiers n'existent pas
|
||
|
|
assert.NoError(t, err)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestLoadEnvFiles_EmptyEnvironment(t *testing.T) {
|
||
|
|
// Tester avec un environnement vide
|
||
|
|
err := LoadEnvFiles("")
|
||
|
|
// Ne devrait pas causer d'erreur
|
||
|
|
assert.NoError(t, err)
|
||
|
|
}
|