warehouse/config/env_test.go
2024-11-13 21:16:22 +01:00

135 lines
3.3 KiB
Go

package config
import (
"os"
"testing"
"time"
)
func TestReadEnv(t *testing.T) {
// Set up environment variables
os.Setenv("CONFIG_PATH", "/path/to/config")
os.Setenv("ENV", "dev")
os.Setenv("PORT", "80")
os.Setenv("BASE_URL", "https://example.com")
os.Setenv("ACCESS_ORIGIN", "lou-taylor.ch")
os.Setenv("DB_HOST", "localhost")
os.Setenv("DB_PORT", "5432")
os.Setenv("DB_USER", "testuser")
os.Setenv("DB_PASSWORD", "password")
os.Setenv("DB_NAME", "testdb")
os.Setenv("ADMIN_NAME", "admin")
os.Setenv("ADMIN_PASSWORD", "adminpass")
os.Setenv("JWT_SECRET", "supersecret")
os.Setenv("JWT_VALID_PERIOD", "24h")
os.Setenv("IMAGE_QUALITY", "85.5")
os.Setenv("IMAGE_MAX_WIDTH", "1920")
os.Setenv("IMAGE_SAVE_PATH", "/path/to/images")
// Initialize an empty Config struct
c := New()
// Call ReadEnv to populate the config from environment variables
err := c.ReadEnv()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if c.BaseUrl != "https://example.com" {
t.Errorf("expected BaseUrl to be 'https://example.com', got %v", c.BaseUrl)
}
if c.Port != 80 {
t.Errorf("expected Port to be 80, got %d", c.Port)
}
}
func TestHelperFunctions(t *testing.T) {
t.Run("stringVar", func(t *testing.T) {
// Set up environment variable
os.Setenv("TEST_STRING", "test_value")
var result string
stringVar(&result, "TEST_STRING")
if result != "test_value" {
t.Errorf("expected 'test_value', got '%v'", result)
}
// Test empty environment variable case
os.Setenv("TEST_STRING_EMPTY", "")
stringVar(&result, "TEST_STRING_EMPTY")
if result != "test_value" { // result shouldn't change
t.Errorf("expected 'test_value', got '%v'", result)
}
})
t.Run("float64Var", func(t *testing.T) {
// Set up valid float environment variable
os.Setenv("TEST_FLOAT", "42.42")
var result float64
err := float64Var(&result, "TEST_FLOAT")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if result != 42.42 {
t.Errorf("expected 42.42, got '%v'", result)
}
// Test invalid float value
os.Setenv("TEST_FLOAT_INVALID", "invalid_float")
err = float64Var(&result, "TEST_FLOAT_INVALID")
if err == nil {
t.Errorf("expected error for invalid float, but got nil")
}
})
t.Run("intVar", func(t *testing.T) {
// Set up valid integer environment variable
os.Setenv("TEST_INT", "123")
var result int
err := intVar(&result, "TEST_INT")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if result != 123 {
t.Errorf("expected 123, got '%v'", result)
}
// Test invalid int value
os.Setenv("TEST_INT_INVALID", "invalid_int")
err = intVar(&result, "TEST_INT_INVALID")
if err == nil {
t.Errorf("expected error for invalid int, but got nil")
}
})
t.Run("durationVar", func(t *testing.T) {
// Set up valid duration environment variable
os.Setenv("TEST_DURATION", "2h")
var result time.Duration
err := durationVar(&result, "TEST_DURATION")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
expectedDuration := 2 * time.Hour
if result != expectedDuration {
t.Errorf("expected %v, got '%v'", expectedDuration, result)
}
// Test invalid duration value
os.Setenv("TEST_DURATION_INVALID", "invalid_duration")
err = durationVar(&result, "TEST_DURATION_INVALID")
if err == nil {
t.Errorf("expected error for invalid duration, but got nil")
}
})
}