test_config.py•3.47 kB
"""설정 모듈 테스트"""
import pytest
import os
from unittest.mock import patch
from src.config import DatabaseConfig, RedisConfig, APIConfig, AppConfig
class TestDatabaseConfig:
"""데이터베이스 설정 테스트"""
def test_default_values(self):
"""기본값 테스트"""
config = DatabaseConfig()
assert config.host == "localhost"
assert config.port == 5432
assert config.name == "market_stats"
assert config.user == "market_user"
def test_environment_variables(self):
"""환경변수 설정 테스트"""
with patch.dict(os.environ, {
"TIMESCALE_DB_HOST": "test-host",
"TIMESCALE_DB_PORT": "5433",
"TIMESCALE_DB_NAME": "test_db",
"TIMESCALE_DB_USER": "test_user",
"TIMESCALE_DB_PASSWORD": "test_pass"
}):
config = DatabaseConfig()
assert config.host == "test-host"
assert config.port == 5433
assert config.name == "test_db"
assert config.user == "test_user"
assert config.password == "test_pass"
def test_database_url_generation(self):
"""데이터베이스 URL 생성 테스트"""
config = DatabaseConfig(
host="localhost",
port=5432,
name="testdb",
user="testuser",
password="testpass"
)
expected_url = "postgresql://testuser:testpass@localhost:5432/testdb"
assert config.url == expected_url
class TestRedisConfig:
"""Redis 설정 테스트"""
def test_default_values(self):
"""기본값 테스트"""
config = RedisConfig()
assert config.host == "localhost"
assert config.port == 6379
assert config.db == 0
assert config.password is None
def test_redis_url_without_password(self):
"""비밀번호 없는 Redis URL 테스트"""
config = RedisConfig()
expected_url = "redis://localhost:6379/0"
assert config.url == expected_url
def test_redis_url_with_password(self):
"""비밀번호 있는 Redis URL 테스트"""
config = RedisConfig(password="secret")
expected_url = "redis://:secret@localhost:6379/0"
assert config.url == expected_url
class TestAPIConfig:
"""API 설정 테스트"""
def test_default_values(self):
"""기본값 테스트"""
config = APIConfig()
assert config.host == "0.0.0.0"
assert config.port == 8000
assert config.debug is False
assert config.secret_key == "dev-secret"
assert config.api_key_header == "X-API-Key"
class TestAppConfig:
"""전체 앱 설정 테스트"""
def test_config_initialization(self):
"""설정 초기화 테스트"""
config = AppConfig()
assert isinstance(config.database, DatabaseConfig)
assert isinstance(config.redis, RedisConfig)
assert isinstance(config.api, APIConfig)
def test_config_integration(self):
"""설정 통합 테스트"""
with patch.dict(os.environ, {
"TIMESCALE_DB_HOST": "db-host",
"REDIS_HOST": "redis-host",
"API_PORT": "9000"
}):
config = AppConfig()
assert config.database.host == "db-host"
assert config.redis.host == "redis-host"
assert config.api.port == 9000