Inicial
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
DatabaseURL string
|
||||
RedisURL string
|
||||
JWTSecret string
|
||||
Port string
|
||||
AppEnv string
|
||||
InitialAdminEmail string
|
||||
InitialAdminPassword string
|
||||
}
|
||||
|
||||
func Load() (*Config, error) {
|
||||
dbURL := os.Getenv("DATABASE_URL")
|
||||
if dbURL == "" {
|
||||
return nil, errors.New("DATABASE_URL is required")
|
||||
}
|
||||
|
||||
jwtSecret := os.Getenv("JWT_SECRET")
|
||||
if jwtSecret == "" {
|
||||
return nil, errors.New("JWT_SECRET is required")
|
||||
}
|
||||
|
||||
redisURL := os.Getenv("REDIS_URL")
|
||||
if redisURL == "" {
|
||||
redisURL = "redis://localhost:6379"
|
||||
}
|
||||
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
}
|
||||
|
||||
appEnv := os.Getenv("APP_ENV")
|
||||
if appEnv == "" {
|
||||
appEnv = "development"
|
||||
}
|
||||
|
||||
return &Config{
|
||||
DatabaseURL: dbURL,
|
||||
RedisURL: redisURL,
|
||||
JWTSecret: jwtSecret,
|
||||
Port: port,
|
||||
AppEnv: appEnv,
|
||||
InitialAdminEmail: os.Getenv("INITIAL_ADMIN_EMAIL"),
|
||||
InitialAdminPassword: os.Getenv("INITIAL_ADMIN_PASSWORD"),
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package config_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/techxcar/backend/internal/config"
|
||||
)
|
||||
|
||||
func TestLoad_defaults(t *testing.T) {
|
||||
os.Setenv("DATABASE_URL", "postgres://test:test@localhost/test")
|
||||
os.Setenv("REDIS_URL", "redis://localhost:6379")
|
||||
os.Setenv("JWT_SECRET", "test-secret-32-chars-minimum-ok!")
|
||||
defer func() {
|
||||
os.Unsetenv("DATABASE_URL")
|
||||
os.Unsetenv("REDIS_URL")
|
||||
os.Unsetenv("JWT_SECRET")
|
||||
}()
|
||||
|
||||
cfg, err := config.Load()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "8080", cfg.Port)
|
||||
assert.Equal(t, "development", cfg.AppEnv)
|
||||
assert.Equal(t, "postgres://test:test@localhost/test", cfg.DatabaseURL)
|
||||
assert.Equal(t, "redis://localhost:6379", cfg.RedisURL)
|
||||
}
|
||||
|
||||
func TestLoad_missingDatabaseURL(t *testing.T) {
|
||||
os.Unsetenv("DATABASE_URL")
|
||||
os.Setenv("JWT_SECRET", "test-secret-32-chars-minimum-ok!")
|
||||
defer os.Unsetenv("JWT_SECRET")
|
||||
|
||||
_, err := config.Load()
|
||||
assert.ErrorContains(t, err, "DATABASE_URL")
|
||||
}
|
||||
|
||||
func TestLoad_missingJWTSecret(t *testing.T) {
|
||||
os.Setenv("DATABASE_URL", "postgres://test:test@localhost/test")
|
||||
os.Unsetenv("JWT_SECRET")
|
||||
defer os.Unsetenv("DATABASE_URL")
|
||||
|
||||
_, err := config.Load()
|
||||
assert.ErrorContains(t, err, "JWT_SECRET")
|
||||
}
|
||||
|
||||
func TestLoad_customPort(t *testing.T) {
|
||||
os.Setenv("DATABASE_URL", "postgres://test:test@localhost/test")
|
||||
os.Setenv("REDIS_URL", "redis://localhost:6379")
|
||||
os.Setenv("JWT_SECRET", "test-secret-32-chars-minimum-ok!")
|
||||
os.Setenv("PORT", "9090")
|
||||
defer func() {
|
||||
os.Unsetenv("DATABASE_URL")
|
||||
os.Unsetenv("REDIS_URL")
|
||||
os.Unsetenv("JWT_SECRET")
|
||||
os.Unsetenv("PORT")
|
||||
}()
|
||||
|
||||
cfg, err := config.Load()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "9090", cfg.Port)
|
||||
}
|
||||
Reference in New Issue
Block a user