Tests cover providers, dedup, Telegram, scoring, main runner, and Airbnb stubs. Ticketmaster and SeatGeek use configurable lat/lon/radius (Thornhill default). Pipeline filters noise listings, merges same-day sports duplicates, optional MIN_ALERT_SCORE, and Telegram severity summary. Made-with: Cursor
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
"""Tests for the configuration module."""
|
|
|
|
import os
|
|
from unittest.mock import patch
|
|
|
|
from src.config import Settings, load_settings
|
|
|
|
|
|
class TestSettings:
|
|
def test_defaults(self):
|
|
with patch.dict(os.environ, {}, clear=True):
|
|
settings = Settings(
|
|
_env_file=None, # type: ignore[call-arg]
|
|
)
|
|
assert settings.ticketmaster_key == ""
|
|
assert settings.seatgeek_client_id == ""
|
|
assert settings.telegram_bot_token == ""
|
|
assert settings.telegram_chat_id == ""
|
|
assert settings.airbnb_listing_id == ""
|
|
assert settings.airbnb_base_price == 150
|
|
assert settings.price_increase_pct == 20
|
|
assert settings.search_lat == 43.8083
|
|
assert settings.search_lon == -79.4220
|
|
assert settings.search_radius_km == 30
|
|
assert settings.min_alert_score == 0.0
|
|
assert settings.lookahead_days == 30
|
|
assert settings.log_level == "INFO"
|
|
|
|
def test_loads_from_env(self):
|
|
env = {
|
|
"TICKETMASTER_KEY": "tm-key-123",
|
|
"SEATGEEK_CLIENT_ID": "sg-id-456",
|
|
"TELEGRAM_BOT_TOKEN": "bot-token",
|
|
"TELEGRAM_CHAT_ID": "12345",
|
|
"AIRBNB_LISTING_ID": "listing-789",
|
|
"AIRBNB_BASE_PRICE": "200",
|
|
"PRICE_INCREASE_PCT": "30",
|
|
"SEARCH_LAT": "44.0",
|
|
"SEARCH_LON": "-80.0",
|
|
"SEARCH_RADIUS_KM": "50",
|
|
"MIN_ALERT_SCORE": "0.45",
|
|
"LOOKAHEAD_DAYS": "14",
|
|
"LOG_LEVEL": "DEBUG",
|
|
}
|
|
with patch.dict(os.environ, env, clear=True):
|
|
settings = Settings(_env_file=None) # type: ignore[call-arg]
|
|
|
|
assert settings.ticketmaster_key == "tm-key-123"
|
|
assert settings.seatgeek_client_id == "sg-id-456"
|
|
assert settings.telegram_bot_token == "bot-token"
|
|
assert settings.telegram_chat_id == "12345"
|
|
assert settings.airbnb_listing_id == "listing-789"
|
|
assert settings.airbnb_base_price == 200
|
|
assert settings.price_increase_pct == 30
|
|
assert settings.search_lat == 44.0
|
|
assert settings.search_lon == -80.0
|
|
assert settings.search_radius_km == 50
|
|
assert settings.min_alert_score == 0.45
|
|
assert settings.lookahead_days == 14
|
|
assert settings.log_level == "DEBUG"
|
|
|
|
def test_load_settings_returns_settings_instance(self):
|
|
settings = load_settings()
|
|
assert isinstance(settings, Settings)
|