turash/bugulma/backend/pkg/config/config_test.go
Damir Mukimov f434b26dd4
Some checks failed
CI/CD Pipeline / frontend-lint (push) Successful in 1m38s
CI/CD Pipeline / backend-lint (push) Failing after 1m41s
CI/CD Pipeline / backend-build (push) Has been skipped
CI/CD Pipeline / frontend-build (push) Failing after 26s
CI/CD Pipeline / e2e-test (push) Has been skipped
Enhance configuration management and testing for backend
- Update .gitignore to selectively ignore pkg/ directories at the root level
- Modify CI workflow to verify all Go packages can be listed
- Introduce configuration management with a new config package, including loading environment variables
- Add comprehensive tests for configuration loading and environment variable handling
- Implement Neo4j database interaction functions with corresponding tests for data extraction
2025-12-26 13:18:00 +01:00

105 lines
3.3 KiB
Go

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)
}