135 lines
3.3 KiB
Go
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")
|
|
}
|
|
})
|
|
}
|