Law/tests/test_sms_service.py
2026-03-01 17:31:09 +03:00

60 lines
2.5 KiB
Python

import os
import unittest
from unittest.mock import patch
os.environ.setdefault("DATABASE_URL", "sqlite+pysqlite:///:memory:")
os.environ.setdefault("REDIS_URL", "redis://localhost:6379/0")
os.environ.setdefault("S3_ENDPOINT", "http://localhost:9000")
os.environ.setdefault("S3_ACCESS_KEY", "test")
os.environ.setdefault("S3_SECRET_KEY", "test")
os.environ.setdefault("S3_BUCKET", "test")
from app.core.config import settings
from app.services.sms_service import SmsDeliveryError, send_otp_message
class SmsServiceTests(unittest.TestCase):
def setUp(self):
self._settings_backup = {
"SMS_PROVIDER": settings.SMS_PROVIDER,
"SMSAERO_EMAIL": settings.SMSAERO_EMAIL,
"SMSAERO_API_KEY": settings.SMSAERO_API_KEY,
"OTP_DEV_MODE": settings.OTP_DEV_MODE,
"OTP_AUTOTEST_FORCE_MOCK_SMS": settings.OTP_AUTOTEST_FORCE_MOCK_SMS,
}
def tearDown(self):
for key, value in self._settings_backup.items():
setattr(settings, key, value)
def test_dev_mode_forces_mock_send(self):
settings.SMS_PROVIDER = "smsaero"
settings.SMSAERO_EMAIL = ""
settings.SMSAERO_API_KEY = ""
settings.OTP_DEV_MODE = True
payload = send_otp_message(phone="+79990000000", code="111111", purpose="CREATE_REQUEST")
self.assertEqual(payload.get("provider"), "mock_sms")
self.assertTrue(bool(payload.get("dev_mode")))
self.assertEqual(payload.get("debug_code"), "111111")
def test_unknown_provider_raises(self):
settings.SMS_PROVIDER = "unknown"
settings.OTP_DEV_MODE = False
with self.assertRaises(SmsDeliveryError):
send_otp_message(phone="+79990000000", code="111111", purpose="CREATE_REQUEST")
def test_autotest_context_forces_mock_for_real_provider(self):
settings.SMS_PROVIDER = "smsaero"
settings.SMSAERO_EMAIL = "prod@example.com"
settings.SMSAERO_API_KEY = "real-key"
settings.OTP_DEV_MODE = False
settings.OTP_AUTOTEST_FORCE_MOCK_SMS = True
with (
patch("app.services.sms_service._is_automated_test_context", return_value=True),
patch("app.services.sms_service._send_sms_aero") as send_real,
):
payload = send_otp_message(phone="+79990000000", code="222222", purpose="CREATE_REQUEST")
send_real.assert_not_called()
self.assertEqual(payload.get("provider"), "mock_sms")
self.assertTrue(bool(payload.get("autotest_forced_mock")))
self.assertEqual(payload.get("debug_code"), "222222")