codex / tests /test_email_service_catalog.py
webhook's picture
Upload 137 files
89419ea verified
Raw History Blame Contribute Delete
5.31 kB
from contextlib import contextmanager
from pathlib import Path
import src.config.settings as settings_module
from src.core import email_service_catalog
from src.database.models import Base, CpaService, EmailService, Sub2ApiService, TeamManagerService
from src.database.session import DatabaseSessionManager
class DummySettings:
external_api_enabled = True
@contextmanager
def _session_context(manager):
session = manager.SessionLocal()
try:
yield session
finally:
session.close()
def _make_db(name: str):
runtime_dir = Path("tests_runtime")
runtime_dir.mkdir(exist_ok=True)
db_path = runtime_dir / name
if db_path.exists():
db_path.unlink()
manager = DatabaseSessionManager(f"sqlite:///{db_path}")
Base.metadata.create_all(bind=manager.engine)
return manager
def test_build_external_capabilities_does_not_expose_legacy_tempmail_placeholder(monkeypatch):
manager = _make_db("email_service_catalog_no_legacy_tempmail.db")
monkeypatch.setattr(email_service_catalog, "get_db", lambda: _session_context(manager))
monkeypatch.setattr(email_service_catalog, "get_settings", lambda: DummySettings())
payload = email_service_catalog.build_external_capabilities()
assert payload["email_types"] == []
def test_build_external_capabilities_survives_temp_mail_configs_without_worker_credentials(monkeypatch):
manager = _make_db("email_service_catalog_capabilities.db")
with manager.session_scope() as session:
session.add_all([
EmailService(
service_type="temp_mail",
name="Temp pool",
config={"domains": ["alpha.example.com", "beta.example.com"]},
enabled=True,
priority=0,
),
CpaService(name="CPA", api_url="https://cpa.test", api_token="token", enabled=True, priority=0),
Sub2ApiService(name="Sub2", api_url="https://sub2.test", api_key="key", enabled=True, priority=0),
TeamManagerService(name="TM", api_url="https://tm.test", api_key="key", enabled=True, priority=0),
])
monkeypatch.setattr(email_service_catalog, "get_db", lambda: _session_context(manager))
monkeypatch.setattr(email_service_catalog, "get_settings", lambda: DummySettings())
payload = email_service_catalog.build_external_capabilities()
assert all(item["type"] != "tempmail" for item in payload["email_types"])
temp_mail = next(item for item in payload["email_types"] if item["type"] == "temp_mail")
assert temp_mail["available"] is True
assert temp_mail["count"] == 1
assert temp_mail["services"][0]["domain_count"] == 2
assert temp_mail["services"][0]["domains_preview"] == ["alpha.example.com", "beta.example.com"]
assert temp_mail["services"][0]["domain_source"] == "config_domains"
settings = payload["settings"]
assert settings["external_api_enabled"] is True
assert {provider["provider"] for provider in payload["upload_providers"]} == {"cpa", "sub2api", "tm"}
def test_build_external_capabilities_uses_worker_domain_summary_when_credentials_exist(monkeypatch):
manager = _make_db("email_service_catalog_worker_domains.db")
with manager.session_scope() as session:
session.add(
EmailService(
service_type="temp_mail",
name="Temp worker",
config={
"base_url": "https://apmail.889110.xyz",
"admin_password": "admin888",
"domain": "fallback.example.com",
},
enabled=True,
priority=0,
)
)
monkeypatch.setattr(email_service_catalog, "get_db", lambda: _session_context(manager))
monkeypatch.setattr(email_service_catalog, "get_settings", lambda: DummySettings())
monkeypatch.setattr(email_service_catalog.TempMailService, "_fetch_domains_from_worker", lambda self: {"domains": ["w1.example.com", "w2.example.com"]})
payload = email_service_catalog.build_external_capabilities()
temp_mail = next(item for item in payload["email_types"] if item["type"] == "temp_mail")
assert temp_mail["services"][0]["domain_source"] == "worker_api"
assert temp_mail["services"][0]["domains_preview"] == ["w1.example.com", "w2.example.com"]
def test_build_external_capabilities_temp_mail_gracefully_handles_empty_summary(monkeypatch):
manager = _make_db("email_service_catalog_empty_domains.db")
with manager.session_scope() as session:
session.add(
EmailService(
service_type="temp_mail",
name="Temp empty",
config={},
enabled=True,
priority=0,
)
)
monkeypatch.setattr(email_service_catalog, "get_db", lambda: _session_context(manager))
monkeypatch.setattr(email_service_catalog, "get_settings", lambda: DummySettings())
payload = email_service_catalog.build_external_capabilities()
temp_mail = next(item for item in payload["email_types"] if item["type"] == "temp_mail")
assert temp_mail["services"][0]["domain_source"] == "none"
assert temp_mail["services"][0]["domain_count"] == 0
assert temp_mail["services"][0]["domains_preview"] == []