"""Unit-тесты логики инициализации GlitchTip SDK. Проверяем что init-блок в main.py / celery_app.py вызывает sentry_sdk.init() только при непустом GLITCHTIP_DSN. """ from unittest.mock import patch import sentry_sdk def test_sdk_imports_without_error() -> None: """Все интеграции импортируются без ModuleNotFoundError.""" from sentry_sdk.integrations.celery import CeleryIntegration from sentry_sdk.integrations.fastapi import FastApiIntegration from sentry_sdk.integrations.httpx import HttpxIntegration from sentry_sdk.integrations.logging import LoggingIntegration from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration from sentry_sdk.integrations.starlette import StarletteIntegration # Проверяем что классы инстанцируются без ошибок assert StarletteIntegration() assert FastApiIntegration() assert CeleryIntegration() assert SqlalchemyIntegration() assert HttpxIntegration() assert LoggingIntegration() def test_no_sdk_init_when_dsn_empty() -> None: """Если GLITCHTIP_DSN пустой, sentry_sdk.init() не должен вызываться.""" with patch("sentry_sdk.init") as mock_init: # Симулируем логику guard из main.py: if settings.glitchtip_dsn: sentry_sdk.init(...) glitchtip_dsn = None if glitchtip_dsn: sentry_sdk.init(dsn=glitchtip_dsn) mock_init.assert_not_called() def test_sdk_init_called_when_dsn_set() -> None: """Если GLITCHTIP_DSN задан, sentry_sdk.init() вызывается с правильными параметрами.""" dsn = "https://key@errors.gendsgn.ru/1" with patch("sentry_sdk.init") as mock_init: glitchtip_dsn = dsn if glitchtip_dsn: sentry_sdk.init( dsn=glitchtip_dsn, environment="test", release="unknown", traces_sample_rate=0.05, profiles_sample_rate=0.0, send_default_pii=False, integrations=[], ) mock_init.assert_called_once() call_kwargs = mock_init.call_args.kwargs assert call_kwargs["dsn"] == dsn assert call_kwargs["send_default_pii"] is False assert call_kwargs["profiles_sample_rate"] == 0.0