package config import ( "os" "testing" "github.com/stretchr/testify/assert" ) func TestGetEnv(t *testing.T) { // Test when environment variable is set os.Setenv("TEST_VAR", "test_value") defer os.Unsetenv("TEST_VAR") result := getEnv("TEST_VAR", "fallback") assert.Equal(t, "test_value", result) // Test when environment variable is not set result = getEnv("NON_EXISTENT_VAR", "fallback") assert.Equal(t, "fallback", result) } func TestLoad(t *testing.T) { // Clear any existing test environment variables testVars := []string{ "SERVER_PORT", "JWT_SECRET", "CORS_ORIGIN", "POSTGRES_HOST", "POSTGRES_PORT", "POSTGRES_USER", "POSTGRES_PASSWORD", "POSTGRES_DB", "POSTGRES_SSLMODE", "NEO4J_URI", "NEO4J_USERNAME", "NEO4J_PASSWORD", "NEO4J_DATABASE", "NEO4J_ENABLED", } for _, v := range testVars { os.Unsetenv(v) } // Test with all defaults config := Load() assert.Equal(t, "8080", config.ServerPort) assert.Equal(t, "your-secret-key-change-in-production", config.JWTSecret) assert.Equal(t, "http://localhost:3000", config.CORSOrigin) assert.Equal(t, "localhost", config.PostgresHost) assert.Equal(t, "5432", config.PostgresPort) assert.Equal(t, "bugulma", config.PostgresUser) assert.Equal(t, "bugulma", config.PostgresPassword) assert.Equal(t, "bugulma_city", config.PostgresDB) assert.Equal(t, "disable", config.PostgresSSLMode) assert.Equal(t, "neo4j://localhost:7687", config.Neo4jURI) assert.Equal(t, "neo4j", config.Neo4jUsername) assert.Equal(t, "password", config.Neo4jPassword) assert.Equal(t, "neo4j", config.Neo4jDatabase) assert.False(t, config.Neo4jEnabled) } func TestLoad_WithEnvironmentVariables(t *testing.T) { // Set test environment variables os.Setenv("SERVER_PORT", "9090") os.Setenv("JWT_SECRET", "test-secret") os.Setenv("CORS_ORIGIN", "http://test.com") os.Setenv("POSTGRES_HOST", "test-host") os.Setenv("POSTGRES_PORT", "9999") os.Setenv("POSTGRES_USER", "test-user") os.Setenv("POSTGRES_PASSWORD", "test-pass") os.Setenv("POSTGRES_DB", "test-db") os.Setenv("POSTGRES_SSLMODE", "require") os.Setenv("NEO4J_URI", "neo4j://test:7688") os.Setenv("NEO4J_USERNAME", "test-user") os.Setenv("NEO4J_PASSWORD", "test-pass") os.Setenv("NEO4J_DATABASE", "test-db") os.Setenv("NEO4J_ENABLED", "true") defer func() { // Clean up testVars := []string{ "SERVER_PORT", "JWT_SECRET", "CORS_ORIGIN", "POSTGRES_HOST", "POSTGRES_PORT", "POSTGRES_USER", "POSTGRES_PASSWORD", "POSTGRES_DB", "POSTGRES_SSLMODE", "NEO4J_URI", "NEO4J_USERNAME", "NEO4J_PASSWORD", "NEO4J_DATABASE", "NEO4J_ENABLED", } for _, v := range testVars { os.Unsetenv(v) } }() // Test with environment variables set config := Load() assert.Equal(t, "9090", config.ServerPort) assert.Equal(t, "test-secret", config.JWTSecret) assert.Equal(t, "http://test.com", config.CORSOrigin) assert.Equal(t, "test-host", config.PostgresHost) assert.Equal(t, "9999", config.PostgresPort) assert.Equal(t, "test-user", config.PostgresUser) assert.Equal(t, "test-pass", config.PostgresPassword) assert.Equal(t, "test-db", config.PostgresDB) assert.Equal(t, "require", config.PostgresSSLMode) assert.Equal(t, "neo4j://test:7688", config.Neo4jURI) assert.Equal(t, "test-user", config.Neo4jUsername) assert.Equal(t, "test-pass", config.Neo4jPassword) assert.Equal(t, "test-db", config.Neo4jDatabase) assert.True(t, config.Neo4jEnabled) }