Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/tests/test_ai_subscription_lock.py
2026-06-13 22:34:36 +00:00

48 lines
1.4 KiB
Python

from unittest.mock import MagicMock, patch
from app.services.ai.ai_service import AIService
def test_check_quota_and_charge_locks_subscription_row():
db = MagicMock()
ctx = MagicMock()
ctx.can_access_support_operator.return_value = False
ctx.is_superadmin.return_value = False
ctx.get_user_id.return_value = 1
plan = MagicMock()
plan.plan_type = "free"
subscription = MagicMock()
subscription.id = 42
subscription.is_active = True
subscription.tokens_used = 0
subscription.tokens_limit = 1000
subscription.plan = plan
locked = MagicMock()
locked.id = 42
locked.is_active = True
locked.tokens_used = 0
locked.tokens_limit = 1000
locked.plan = plan
repo = MagicMock()
repo.get_active_subscription.return_value = subscription
repo.get_by_id_for_update.return_value = locked
with patch(
"adapters.db.repositories.ai_subscription_repository.AISubscriptionRepository",
return_value=repo,
), patch(
"adapters.db.repositories.ai_config_repository.AIConfigRepository"
) as config_repo_cls:
config_repo_cls.return_value.get_active_config.return_value = MagicMock(
is_active=True
)
service = AIService(db, ctx, business_id=92)
service.check_quota_and_charge(10, 5)
repo.get_by_id_for_update.assert_called_once_with(42)
assert service.subscription is locked
db.commit.assert_called_once()